Prosys OPC UA Simulation Server 与 NX MCD 信号映射排错指南

本文记录了在使用 Prosys OPC UA Simulation Server(免费版)创建变量、并通过 OPC UA 与 **Siemens NX MCD(Mechatronics Concept Designer)**做信号映射时,遇到的”变量 IO 类型识别异常”问题的完整排错过程,希望能帮到遇到同样问题的朋友。

背景

在虚拟调试(Virtual Commissioning)场景中,常用 Prosys OPC UA Simulation Server 模拟 PLC/外部设备的 OPC UA 服务器,配合 NX MCD 做机电一体化仿真。在 MCD 的”信号映射”对话框里,每个外部 OPC UA 变量会显示一个 IO 类型

  • 输入(Input)
  • 输出(Output)
  • 输入/输出(Input/Output,双向可读写)

理论上,一个具备完整读写权限的 OPC UA 变量,应该在 MCD 里显示为 输入/输出,可以自由映射给 MCD 的输入信号或输出信号。但实际操作中发现:用 Prosys 新建的变量,无论怎么调整权限,MCD 里始终只显示 输入,无法用作 MCD 信号的”输出”映射对象。

而用 asyncua(Python OPC UA 库)手写的一个简单服务器变量,却能正常显示为 输入/输出

排错过程

第一步:检查 MCD 信号方向(Signal Adapter)

MCD 信号本身有方向属性,新建信号默认是 输出(Output)。如果要让外部数据(PLC/Prosys/HMI)写入并驱动这个信号,必须先在 Signal Adapter 对话框里手动把该信号的类型由默认的”输出”改为 输入(Input),否则信号映射时根本无法把外部变量配给它。

小结: MCD 信号方向是站在 MCD 自己的角度定义的——

  • MCD 输出:值由 MCD 内部计算产生,外部只能读
  • MCD 输入:值由外部写入,MCD 只读取,用来驱动机构

第二步:检查 Prosys 变量的 AccessLevel

最初怀疑是 Prosys 免费版限制了变量权限编辑功能。经核实,AccessLevel(读写权限)属于 OPC UA 标准节点的基础属性,免费版完全支持编辑,不需要专业版授权。专业版的限制主要体现在:

  • 导入自定义 OPC UA 信息模型(NodeSet 文件)
  • Method(方法)仿真
  • PubSub DataSet 字段数量无限制(免费版限制 6 个字段)

打开 Prosys,编辑变量节点的 AccessLevel 属性,确认勾选了:

  • CurrentRead(可读)
  • CurrentWrite(可写)

确认无误后,问题依然存在,说明权限不是根本原因。

第三步:检查 DataType

发现新建的变量 DataType 默认是抽象的 BaseDataType,而不是具体类型(如 Double)。把 DataType 改成具体类型(Double)后重新检查,问题依然存在。

Double 类型下还有一个子类型 Duration——它本质上也是 Double,只是语义上专门表示”时长”(通常单位为毫秒)。除非变量确实表示时长,否则应选普通 Double,而不是 Duration。

第四步(关键):发现 Historizing / HistoryRead 是真正原因

仔细对比 Prosys 变量与 asyncua 变量的属性差异:

Prosys 变量(有问题):

AccessLevel : [CurrentRead, CurrentWrite, HistoryRead]
Historizing : true

asyncua 变量(正常):

var = await obj.add_variable(idx, "MyVariable", 6.7)
await var.set_writable()

set_writable() 只设置了 CurrentRead + CurrentWrite没有 HistoryRead,也没有开启 Historizing

MCD 在自动解析 OPC UA 节点的 IO 方向时,遇到同时标记了”支持历史数据”的变量,会触发不同的内部分类逻辑,导致误判为只读/只能作为输入使用,无法正确识别其双向读写能力。

解决方法

在 Prosys 中编辑该变量:

  1. 打开变量的 Attributes 面板
  2. AccessLevel 中,取消勾选 HistoryRead,只保留 CurrentRead + CurrentWrite
  3. Historizing 属性由 true 改为 false
  4. 保存
  5. 回到 NX MCD 的”外部信号配置”对话框,点击刷新按钮,重新浏览该 OPC UA 服务器的标签
  6. 再次打开”信号映射”对话框,该变量的 IO 类型应正确显示为 输入/输出

总结:Prosys 建立可双向读写变量的注意事项

检查项正确设置
AccessLevel仅勾选 CurrentRead + CurrentWrite,不要勾 HistoryRead
Historizingfalse
DataType具体类型(如 Double),不要用抽象的 BaseDataType
Simulation(仿真信号)如不需要自动变化的值,设为 NoneConstant,避免被仿真线程覆盖写入的值

延伸知识

MCD 与外部系统的 IO 方向是”镜像”关系

  • MCD 输出 ↔ 外部(PLC/Prosys)输入:MCD 计算出数据写给外部,外部接收
  • MCD 输入 ↔ 外部(PLC/Prosys)输出:外部写入数据,MCD 只读取,用来驱动机构

方向命名是相对各自系统而言的,不要把 PLC 视角的”输出”和 MCD 视角的”输出”混为一谈。

Prosys 免费版 vs 专业版

功能免费版专业版
创建自定义对象/变量、AccessLevel 编辑
全部基础仿真信号(Constant/Random/Sine 等)
导入自定义 OPC UA 信息模型(NodeSet)
Method(方法)仿真
PubSub DataSet 字段数量限制 6 个无限制
历史数据回放(Playback)

整理于 2026 年 6 月,基于实际排错过程总结,适用于 Prosys OPC UA Simulation Server(Free Edition)与 NX MCD 虚拟调试场景。


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注