Раздел структуры файла Simscape™ выполняется однажды во время компиляции. Этот раздел содержит информацию о том, как порты составляющих компонентов соединяются друг с другом, а также с внешними входными параметрами, выходными параметрами и узлами компонента верхнего уровня.
Раздел структуры начинается с connections
ключевое слово и отключено end
ключевое слово. Этот connections
блок содержит набор connect
построения, которые описывают обоих связи сохранения (между nodes
) и связи физического сигнала (между inputs
и outputs
).
В следующем примере файл собственного компонента включает Датчик Напряжения библиотеки Foundation, и Электрическая Ссылка блокирует и задает следующие связи:
Положительный порт датчика напряжения к внешнему электрическому порту сохранения + составного компонента
Отрицательный порт датчика напряжения, чтобы основываться
Выходной порт физического сигнала датчика напряжения к внешнему выходу составного компонента, расположенного на правой стороне получившегося значка блока
component VoltSG nodes p = foundation.electrical.electrical; % + end outputs Out = { 0.0, 'V' }; % V:right end components(ExternalAccess=observe) VoltSensor = foundation.electrical.sensors.voltage; Grnd = foundation.electrical.elements.reference; end connections connect(p, VoltSensor.p); connect(Grnd.V, VoltSensor.n); connect(VoltSensor.V, Out); end end
В этом примере, первых двух connect
построения задают связи сохранения между электрическими узлами. Третий connect
построение является связью физического сигнала. Несмотря на то, что эти построения выглядят подобными, их синтаксические правила отличаются.
Для сохранения связей, connect
построение может иметь два или больше аргумента. Например, связи в следующем примере
connections connect(R1.p, R2.n); connect(R1.p, R3.p); end
может быть заменен
connections connect(R1.p, R2.n, R3.p); end
Порядок аргументов не имеет значения. Единственное требование - то, что соединяемые узлы все имеют тот же тип (то есть, все сопоставлены с той же областью).
В следующем примере составной компонент состоит из трех идентичных резисторов, соединенных параллельно:
component ParResistors nodes p = foundation.electrical.electrical; n = foundation.electrical.electrical; end parameters p1 = {3 , 'Ohm'}; end components(ExternalAccess=observe) r1 = foundation.electrical.elements.resistor(R=p1); r2 = foundation.electrical.elements.resistor(R=p1); r3 = foundation.electrical.elements.resistor(R=p1); end connections connect(r1.p, r2.p, r3.p, p); connect(r1.n, r2.n, r3.n, n); end end
*
символ указывает на связи со ссылочным узлом в branch
операторы. Можно также использовать его, чтобы указать на связи с неявным ссылочным узлом в разделе структуры компонента:
connections connect(A, *); end
Неявный ссылочный узел действует как виртуальный компонент основания. Узел, соединенный с неявной ссылкой, имеет все свои переменные Across, равные 0.
*
символ не проблемно-ориентирован, и тот же раздел структуры может содержать связи с неявной ссылкой в различных областях:
component abc nodes M = foundation.hydraulic.hydraulic; N = foundation.electrical.electrical; end connections connect(M,*); connect(N,*); end end
Однако несколько портов, соединенных с неявной ссылкой в том же connect
оператор должен все принадлежать той же области:
connections connect(a, b, *); end
Порядок портов не имеет значения. Это поведение сопоставимо с общими правилами связи для нескольких портов сохранения.
Связи физического сигнала направлены, поэтому connect
построение имеет следующий формат:
connect(s, d);
где s
исходный порт сигнала и d
целевой порт.
Может быть больше чем один целевой порт, соединенный с тем же исходным портом:
connect(s, d1, d2);
Исходные и целевые порты принадлежат inputs
или outputs
членские классы. В следующей таблице перечислены допустимый источник и целевые комбинации.
Источник | Место назначения |
---|---|
Внешний входной порт составного компонента | Input port членского компонента |
Выходной порт членского компонента | Input port членского компонента |
Выходной порт членского компонента | Внешний выходной порт составного компонента |
Например, рассмотрите следующую блок-схему.
Это представляет составной CompMeas
компонента, который, в свою очередь, содержит составной
Valve Subsystem
компонента, а также несколько библиотечных блоков Основы. Файл Simscape составного компонента задал бы эквивалентные связи сигнала со следующими построениями.
Создать | Объяснение |
---|---|
connect(In, subt.I1); | Порт In подключений к входному порту + из блока PS Subtract. Иллюстрирует соединение входного порта составного компонента к входному порту членского компонента. |
connect(subt.O, gain.I); | Соединяет выходной порт блока PS Subtract к входному порту блока PS Gain. Иллюстрирует соединение выходного порта членского компонента к входному порту другого членского компонента на том же уровне. |
connect(fl_rate.Q, subt.I2, Out); | Соединяет выходной порт Q из блока Hydraulic Flow Rate Sensor к входному порту - из блока PS Subtract и к выходному порту Out из составного компонента. Иллюстрирует соединение одного источника нескольким местам назначения, и также соединение выходного порта членского компонента к выходному порту включения составляет компонент. |
Также заметьте, что выходной порт блока PS Gain соединяется с входным портом блока составного объекта Подсистемы Клапана (другой членский компонент на том же уровне). Подсистема клапана является автономным составным компонентом, и поэтому если вы соединяете выходной порт блока PS Gain к входному порту одного из членских компонентов в Подсистеме Клапана, которая нарушила бы причинную связь связей физического сигнала (целевой порт не может быть соединен с многочисленными источниками).
Многомерные физические сигналы могут быть полезны для:
Агрегировав измерения в различных пространственных точках, таких как температуры вдоль обмотки или 2D сетки элементов
Используя 3-D положения тела или скорости
Используя матрицы вращения или кватернионы в 3-D
Используя тензоры
Язык Simscape поддерживает нескалярный (с векторным знаком или с матричным знаком) физические сигналы в inputs
и outputs
объявления. Все сигналы в таком векторе или матрице должны иметь те же модули. Например, следующее объявление
inputs I = {zeros(3), 'm/s'}; % :left end
инициализирует вход компонента как 3х3 матрицу линейных скоростей.
Когда вы соединяете порты ввода и вывода, несущие нескалярные физические сигналы, можно использовать индексацию сигнала и конкатенацию в источнике, но не в месте назначения. Скалярное расширение не позволено.
Следующая таблица показывает примеры допустимого синтаксиса, принимая субкомпонент с портом A.o
выходного сигнала соединяется с субкомпонентом B с портом
B.i
входного сигнала, и все размеры и модули совместимы.
Создать | Объяснение |
---|---|
connect(A.o(1,2), B.i); | Исходная индексация, чтобы соединиться со скалярным местом назначения: возьмите запись (1,2) из выхода A.o и соедините его с входом B.i. |
connect(A.o(1:2:5,2:3), B.i); | Индекс строками и столбцами, чтобы задать субматрицу. |
connect(A.o(1:2:end,:), B.i); | Используйте обозначение двоеточия, чтобы задать границы массива (передайте любой столбец выхода A.o к входу B.i. |
connect([A1.o, A2.o], B.i); | Конкатенация выходных параметров A1.o и A2.o по столбцам и передачи результат к входу B.i. |
Можно использовать значения параметров блоков в индексации в connect
оператор, например:
подключение (a.o (значение (
param_name
, '1'), 3), b.i);
Когда вы соединяете два физических сигнала, их модули должны быть непосредственно конвертируемыми. Если один из сигналов объявляется как безразмерный (то есть, с модулями '1'
), затем можно соединить сигнал с любыми основными единицами к нему. Однако модульное преобразование не поддержано в этом случае. Например, если a.i
2x1 безразмерный входной порт, затем этот оператор допустим:
connect([out1_in_meters, out2_in_seconds], a.i);
Если вы соединяете сигналы с различными шкалами того же модуля с безразмерным входным портом, компилятор предупреждает вас к тому, что модульное преобразование проигнорировано. Например, следующий оператор производит предупреждение во время компиляции:
connect([out1_in_km, out2_in_mm], a.i);