如何解决使用 OPCUA 和 Python 进行 OpenModelica 交互式仿真
编辑:有关详细信息,请参阅链接的论坛讨论 (here)。
我是 OpenModelica 的新用户。我使用 Raspberry Pi 作为(opc-ua)测试服务器,它会自动设置我的一些服务器节点。我还通过 UaExpert 连接到服务器以从我的 PC 读取/写入节点。我想将 OM 模型连接到此服务器,以便我可以提取服务器节点值作为模型模拟的输入。
我深入 OM 论坛并找到了一个 topic similar to this。在那次讨论中,OM 模型如下所示:
model SimulationTest
input Real RPM;
Real Torque;
equation
RPM = Torque;
end SimulationTest;
他们还有一个 python 脚本连接到服务器并修改了一些节点值。这是一个类似的测试脚本:
from opcua import Client
from opcua import ua
import time
import logging
from opcua.ua.uatypes import VariantType
# Define the URL on which the server is broadcasting
url = "opc.tcp://my.pi.ip.address:4840/"
if __name__ == "__main__":
client = Client(url)
logging.basicConfig(level=logging.WARN)
try:
client.set_user("username")
client.set_password("password")
client.connect()
print("Client connected!")
# Set default node values
engineRPM_command = client.get_node("ns=4;s=engineRPM_command")
engineRPM_command.set_value(800,VariantType.Int32)
RPM = engineRPM_command.get_value()
print("Current state of engineRPM_command : {}".format(RPM))
engineTORQUE_current = client.get_node("ns=4;s=engineTORQUE_current")
engineTORQUE_current.set_value(1.0,VariantType.Float)
Torque = engineTORQUE_current.get_value()
print("Current state of engineTORQUE_current : {}".format(engineTORQUE_current.get_value()))
# Change node values over time
while (True):
engineRPM_command.set_value(int(1.1*RPM),VariantType.Int32)
RPM = engineRPM_command.get_value()
engineTORQUE_current.set_value(1.5*Torque,VariantType.Float)
Torque = engineTORQUE_current.get_value()
print("RPM value is: ",RPM)
print("Torque value is: ",Torque)
time.sleep(2)
print("="*40)
except KeyboardInterrupt:
print("Stopping sequence!")
finally:
print("Done!")
client.disconnect()
为了设置交互式模拟环境,我在 Simulation Setup 下的 Simulation Flags 选项卡中配置了 Additional Simulation Flags (Optional): -rt 1.0 -embeddedServer opc-ua
。当我模拟模型时,会生成一些文件(.exe、.log、.json、.xml 和 .mat),但我在 OMEdit 中看不到任何图。
最大的问题是(1)我如何从 OMEdit 正确连接到我的 pi 服务器,(2)我如何为模拟提取节点值,以及(3)我可以从 OMEdit 中访问这个 opcua 节点数据模拟时间?
谢谢
解决方法
OMEdit 实现了自己的客户端,并将其用于读取数据和绘图。
如果您想使用自己的客户端,那么我建议您不要使用 OMEdit,而是使用 simulate
命令从命令行运行模拟。见https://build.openmodelica.org/Documentation/OpenModelica.Scripting.simulate.html。基本上你调用 simulate(SimulationTest,simflags="-rt=1.0 -embeddedServer=opc-ua -embeddedServerPort=4841")
之类的东西,然后使用你在 python 客户端中收到的数据来绘制结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。