我希望能够从更逻辑(或基于行为)的角度而非低层次(电气)的角度,在Modelica(OpenModelica)中建模一个非常简单的嵌入式系统。对我来说,主要问题是我以前从未使用过Modelica,我真的很难理解如何正确地查看事物以进行建模。
该系统应该非常简单,起始时只包括一个通过总线连接到控制器的传感器。系统的期望行为是:传感器周期性地生成值,并通过中断通知控制器。控制器应该对该中断作出反应并提取该值。对我来说,这个例子的目的是首先理解如何在Modelica中查看事物的思路,并获得一个最初的(可能不是非常有用的)工作示例,我可以逐步将其扩展为更复杂的示例。
以下是我目前建模的系统:
传感器模型:
如果我尝试模拟“Simple_System”,基本上会出现两个错误。其中一个告诉我系统超规格(35个方程式对26个变量),另一个说:“找到没有时间相关变量的方程式:Controller.interface1.interrupt = 0.0”。
第一个我理解,但我完全不知道如何解决它。第二个我根本不理解。
任何帮助都将不胜感激!如果有人能至少向我推荐一些有用的文献,我也将非常感谢。
该系统应该非常简单,起始时只包括一个通过总线连接到控制器的传感器。系统的期望行为是:传感器周期性地生成值,并通过中断通知控制器。控制器应该对该中断作出反应并提取该值。对我来说,这个例子的目的是首先理解如何在Modelica中查看事物的思路,并获得一个最初的(可能不是非常有用的)工作示例,我可以逐步将其扩展为更复杂的示例。
以下是我目前建模的系统:
传感器模型:
model ES_Sensor
parameter Integer id = 1;
parameter Real frequency = 1.0;
Integer reg_temperature = 0;
ES_Interface interface;
algorithm
when sample(0, 1 / frequency) then
reg_temperature := reg_temperature + 1;
interface.interrupt := 1;
end when;
when interface.address == id then
interface.data := reg_temperature;
end when;
end ES_Sensor;
接口连接器:
connector ES_Interface
flow Real dummy1;
flow Real dummy2;
flow Real dummy3;
Integer address = 0;
Integer data = 0;
Integer interrupt = 0;
end ES_Interface;
总线模型:
model ES_Bus
ES_Interface master;
ES_Interface slave;
equation
master.data = slave.data;
master.address = slave.address;
master.interrupt = slave.interrupt;
end ES_Bus;
控制器模型:
model ES_Controller
ES_Interface interface1;
Integer reg_a = 0;
algorithm
when
interface1.interrupt == 1 then
interface1.interrupt := 0;
interface1.address := 1;
reg_a := interface1.data;
interface1.address := 0;
end when
end ES_Controller;
系统模型:
model Simple_System
ES_Sensor Sensor;
ES_Bus Bus;
equation
connect(Controller.interface1, Bus.master);
connect(Bus.slave, Sensor.interface);
end Simple_System;
如果我尝试模拟“Simple_System”,基本上会出现两个错误。其中一个告诉我系统超规格(35个方程式对26个变量),另一个说:“找到没有时间相关变量的方程式:Controller.interface1.interrupt = 0.0”。
第一个我理解,但我完全不知道如何解决它。第二个我根本不理解。
任何帮助都将不胜感激!如果有人能至少向我推荐一些有用的文献,我也将非常感谢。