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

О разделе структуры

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

Связанные примеры

Больше о