Программное обеспечение в режиме Loop с Modelica - PullRequest
4 голосов
/ 23 марта 2012

Как реализовать Программное обеспечение в Цикле для проектирования систем управления с Modelica (OpenModelica, jModelica) для установки и подпрограммой C / C ++ для контроллера. Какие подходы вы можете предложить? Я думал, что внешние функции C могли бы помочь, но, похоже, у них есть некоторые ограничения, так что они должны подчиняться эталонному свойству прозрачности, то есть возвращать одинаковые значения для одинаковых входных данных (не должно иметь внутренних состояний).

1 Ответ

4 голосов
/ 27 марта 2012

В этом случае проблема с вызовом внешних функций C не применяется. Это правда, что Modelica ограничивает использование функций в непрерывных уравнениях , так что функция должна возвращать одно и то же значение для тех же аргументов. В этих случаях вы должны найти способ передать состояние в функцию и вернуть ей новое состояние (если вы хотите удовлетворить это требование «чистоты»). Очевидно, что это довольно утомительно делать с кодом C (вам нужно будет передать состояние, назначить все переменные состояния (возможно, глобальные), запустить ваш код, затем извлечь значения всех переменных состояния и вернуть их).

К счастью для вас, вам не нужно беспокоиться об этом. Причина в том, что ваша функция должна вызываться только из предложения when. Если вы запускаете предложение when на основе времени (например, с помощью функции sample (...)), я уверен, что вам гарантировано, что функция будет вызываться только один раз в каждый момент времени.

По сути, ваша установка будет выглядеть примерно так:

algorithm
  when sample(0, sample_rate) then
    u := controllerEvaluation(x, y, t);
  end when;

Таким образом, вы можете передавать время, необходимые состояния, x и входы y (или u, в зависимости от вашей перспективы) в контроллер, и вы возвращаете команду контроллера на завод, u.

В этом контексте предложение when является представлением вашего планировщика и, поскольку оно не включает в себя какие-либо события состояния (как вы, например, сделали бы с помощью датчика зубчатого колеса или другого асинхронного прерывания), симулятор может планировать все эти вызовы функций без риска повторения.

...