Определение соединений компонентов

Сведения о структурном разрезе

Структурный раздел файла 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);

Похожие примеры

Подробнее о