Структурный раздел файла Simscape™ выполняется один раз во время компиляции. Этот раздел содержит информацию о том, как порты составляющих компонентов соединяются друг с другом, а также с внешними входами, выходами и узлами компонента верхнего уровня.
Раздел структуры начинается со connections
ключевое слово и прекращается end
ключевое слово. Этот connections
блок содержит набор connect
конструкции, которые описывают оба соединения (между nodes
) и соединений физического сигнала (между inputs
и outputs
).
В следующем примере файл собственного компонента включает блоки Foundation library Voltage Sensor и Electrical Ссылки и задает следующие соединения:
Положительный порт датчика напряжения к внешнему электрическому порту + составного компонента
Отрицательный порт датчика напряжения на землю
Выходной порт физического сигнала датчика напряжения на внешний выход составного компонента, расположенный с правой стороны полученной значка блока
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
The *
символ указывает соединения с ссылочным узлом в branch
операторы. Можно также использовать его, чтобы указать соединения с неявной ссылкой узлом в разделе структуры компонента:
connections connect(A, *); end
Неявный ссылочный узел действует как виртуальный заземляющий компонент. Узел, соединенный с неявной ссылкой, имеет все переменные Across, равные 0.
The *
символ не является специфичным для домена, и тот же раздел структуры может содержать соединения с неявной ссылкой в разных областях:
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
, а также нескольких библиотечных блоков Foundation. Файл Simscape составного компонента будет задавать эквивалентные сигнальные соединения со следующими конструкциями.
Конструкция | Объяснение |
---|---|
connect(In, subt.I1); | Соединяет порты In к входу порту + блока PS Вычитать. Иллюстрирует соединение входа порта составного компонента с входом портом представителя компонента. |
connect(subt.O, gain.I); | Соединяет выход порт блока PS Extract с входом портом блока PS Gain. Иллюстрирует соединение выходного порта компонента-члена с входным портом другого компонента-члена на том же уровне. |
connect(fl_rate.Q, subt.I2, Out); | Соединяет выход порт Q блока Датчик Гидравлической Скорости потока жидкости на порт входа - блока PS Вычитает и к порту выхода Out составного компонента. Иллюстрирует соединение одного источника к нескольким адресатам, а также соединение выхода порта представителя компонента с выходом портом окружающего составного компонента. |
Также заметьте, что выход порт блока PS Gain соединяется с входом портом составного блока Клапана Subsystem (другой представитель компонент на том же уровне). Valve Subsystem является автономным составным компонентом, и поэтому, если вы соединяете выход порт блока PS Gain с входом портом одного из представителя компонентов внутри Подсистемы Клапана, это будет нарушать причинность соединений физического сигнала (порт назначения не может быть соединен с несколькими источниками).
Многомерные физические сигналы могут быть полезны для:
Агрегирование измерений в различных пространственных точках, таких как температуры вдоль катушки или 2-D сетки элементов
Использование 3-D положений или скоростей тела
Использование матриц вращения или кватернионов в 3-D
Использование тензоров
Язык Simscape поддерживает нескалярные (векторные или матричные) физические сигналы в inputs
и outputs
декларации. Все сигналы в таком векторе или матрице должны иметь одинаковые модули. Для примера следующая декларация
inputs I = {zeros(3), 'm/s'}; % :left end
инициализирует вход компонента как матрицу линейных скоростей 3 на 3.
Когда вы соединяете входные и выходные порты, несущие нескалярные физические сигналы, можно использовать индексацию сигнала и конкатенацию в источнике, но не в пункте назначения. Скалярное расширение не допускается.
Следующая таблица показывает допустимые примеры синтаксиса, принимая подкомпонент A с портом выходного сигнала 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 (
значение (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);