OpenModelica交互式仿真结合OPC UA、Python对接树莓派服务器的配置咨询
OpenModelica 对接树莓派OPC UA服务器实操指南
一、OMEdit环境下对接树莓派OPC UA服务器的正确配置
- 首先厘清之前的配置误区:你之前添加的
-rt 1.0 -embeddedServer opc-ua参数,作用是把OpenModelica的仿真进程本身变成OPC UA服务端,供其他设备连接读取仿真值,并不是让仿真程序作为客户端去连接你树莓派上搭建的外部OPC UA服务端,这也是你跑了仿真但没连通、也没出曲线的核心原因。 - 要实现作为客户端连接外部树莓派服务端,不需要在仿真参数里加embeddedServer相关配置,直接在模型库中引入官方提供的
Modelica.Blocks.Sources.OPCUA(作为客户端读节点值)、Modelica.Blocks.Sinks.OPCUA(作为客户端写节点值)组件,在组件的配置面板里填写树莓派端的连接信息:- 服务端地址:按照你Python脚本里的格式,填
opc.tcp://<树莓派实际IP>:4840/,和UaExpert里填写的地址完全一致 - 认证配置:填入树莓派服务端要求的用户名、密码,和你日常用UaExpert登录的凭据保持统一
- 节点映射:和你Python测试脚本里的节点标识保持一致,把要拉取的节点路径(比如
ns=4;s=engineRPM_command)填到对应组件的节点配置栏里
- 服务端地址:按照你Python脚本里的格式,填
- 配置完成后先做连通性校验:点击组件面板自带的“测试连接”按钮,能正常返回节点的当前实时值,就说明配置链路通了,不需要直接跑仿真试错。
二、从OPC UA服务器拉取节点值作为仿真输入的逻辑配置
- 替换无绑定的裸输入变量:你之前写的示例模型里的
input Real RPM是没有数据源的空变量,直接把OPCUA源组件的输出端口,硬连接到这个输入变量的端口上,模型运行时就会自动从服务器拉取对应节点值填到仿真输入里 - 对齐仿真采样节奏:参考你给的Python脚本逻辑,树莓派服务器每2秒更新一次节点值,要在仿真设置里把固定仿真步长设为2秒,不要用变步长求解器,避免出现节点值读取跳变、采样不同步的问题
- 解决仿真不出曲线的问题:去掉仿真参数里的
-rt 1.0 -embeddedServer opc-ua配置,正常运行离线仿真后,系统生成的.mat结果文件会被OMEdit自动加载,直接显示仿真结果曲线,不需要手动导入。
三、仿真运行过程中读取OPC UA实时节点数据的说明
- 完全支持该功能:只要按照上面的步骤接好OPCUA客户端组件,仿真运行时,OMEdit自带的实时变量观测面板,会直接同步显示从服务器拉过来的节点实时值,不需要切到UaExpert客户端反复查看
- 注意使用边界:如果需要把OpenModelica仿真本身做成OPC UA服务端供其他设备交互,再开
-embeddedServer参数即可;如果只需要读树莓派的节点值做仿真输入,就不要开这个参数,避免不必要的资源占用。
内容的提问来源于stack exchange,提问作者Emiko Hourston
相关产品推荐
相关产品推荐

