Раздел структуры файла 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
. В следующей таблице перечислены допустимый источник и целевые комбинации.
Источник | Место назначения |
---|---|
Внешний входной порт составного компонента | Входной порт членского компонента |
Выходной порт членского компонента | Входной порт членского компонента |
Выходной порт членского компонента | Внешний выходной порт составного компонента |
Например, рассмотрите следующую блок-схему.
Это представляет составной CompMeas
компонента, который, в свою очередь, содержит составной Valve Subsystem
компонента, а также несколько блоков библиотеки Foundation. Файл 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 поддерживает нескалярный (с векторным знаком или с матричным знаком) физические сигналы в объявлениях outputs
и inputs
. Все сигналы в таком векторе или матрице должны иметь те же модули. Например, следующее объявление
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
, например:
connect(a.o(value(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);