使用Modelica的Loop模式下的软件

时间:2012-03-23 12:35:22

标签: modelica

如何使用Modelica(OpenModelica,jModelica)为工厂和控制器的C / C ++例程实现控制系统设计的循环软件。您可以建议什么方法? 我认为外部C函数会有所帮助,但似乎它们有一些限制,使得它们应该服从引用透明属性,即为相同的输入返回相同的值(不应该有内部状态)。

1 个答案:

答案 0 :(得分:4)

在这种情况下,调用外部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子句是调度程序的表示,并且因为它不包含任何状态事件(例如,您将拥有齿轮编码器或其他异步中断),模拟器可以安排所有这些函数调用没有任何重复它们的风险。