如何从openmodelica中的输出块连接到输入块?

时间:2017-05-31 18:35:12

标签: modelica openmodelica

我有一个openmodelica界面。

block InputInterfaceBlock

   CPSModel.ConnectionObjects.SocketConnection con =     CPSModel.ConnectionObjects.SocketConnection("/pathToSocket/rpcSocket");

  Modelica.Blocks.Interfaces.RealOutput y annotation(
    Placement(visible = true, transformation(origin = {194, 2}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {106, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));

 algorithm
   while true loop
    y := CPSModel.Functions.readFromSocket(con);
    print("Message from server : " + String(y) + "\n");
   end while;

  annotation(
     __OpenModelica_simulationFlags(jacobian = "coloredNumerical", s = "dassl", lv = "LOG_STATS"),
uses(Modelica(version = "3.2.2")),
Icon(graphics = {Text(origin = {4, -1}, extent = {{-62, 73}, {62, -73}}, textString = "Input\nInterface", fontName =            "DejaVu Sans Mono Bold")}));

   annotation(
     Placement(visible = true, transformation(origin = {-70, 70}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
end InputInterfaceBlock;

我有一个接口块(InputInterfaceBlock),它从路径中定义的套接字读取。我希望此接口块连接到另一个块(OutputInterfaceBlock)。

block OutputInterfaceBlock

  CPSModel.ConnectionObjects.SocketConnection con = CPSModel.ConnectionObjects.SocketConnection("pathToModel/rpcSocket");

  Modelica.Blocks.Interfaces.RealInput y annotation(
    Placement(visible = true, transformation(origin = {194, 2}, extent = {{-10, -10}, {10, 10}}, rotation = 0), iconTransformation(origin = {106, 0}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));

algorithm
    print("Trying to send : " + String(y) + "\n");
        CPSModel.Functions.writeToSocket(con, y);
        print("Message send to server." + "\n");

annotation(
    __OpenModelica_simulationFlags(jacobian = "coloredNumerical", s = "dassl", lv = "LOG_STATS"),
uses(Modelica(version = "3.2.2")),
Icon(graphics = {Text(origin = {4, -1}, extent = {{-62, 73}, {62, -73}}, textString = "Output\nInterface", fontName = "DejaVu Sans Mono")}));
  annotation(
    Placement(visible = true, transformation(origin = {-70, 70}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
end OutputInterfaceBlock;

我的模型如下。

model MechatronicSystem

  CPSModel.Models.InputInterfaceBlock Input annotation(
      Placement(visible = true, transformation(origin = {-90, 8}, extent = {{-28, -28}, {28, 28}}, rotation = 0)));

  CPSModel.Models.OutputInterfaceBlock Output annotation(
      Placement(visible = true, transformation(origin = {72, 12}, extent = {{28, 28}, {-28, -28}}, rotation = 0)));

equation
  connect(Input.y, Output.y) annotation(
    Line(points = {{-60, 8}, {44, 8}, {44, 12}, {42, 12}}, color = {0, 0, 127}));
annotation(
      uses(Modelica(version = "3.2.2")));
end MechatronicSystem;

我可以从套接字到模型的InputInterfaceBlock接收数据,但是当我尝试将该数据发送到OutputInterfaceBlock时。它未收到OutputInterfaceBlock

我该如何解决?

1 个答案:

答案 0 :(得分:3)

您在InputInterfaceBlock中使用while true循环,但Modelica中的不同算法不是协同例程,而是普通算法。

您可以将其替换为when sample(0.1,0.1) then ... end when;或类似地,这将每0.1秒运行一次代码。

while循环导致模型应该卡在InputInterfaceBlock中,并且不会调用OutputInterfaceBlock。