某制造工厂的生产管理系统采用西门子WinCC作为上位机监控平台,其对外数据接口采用OPC UA协议。工厂新建的工控平台(如DCS系统、第三方SCADA或PLC控制系统)仅支持Modbus RTU/TCP协议通信。为实现两个系统之间的数据互通,需要部署协议转换网关,将WinCC系统的OPC UA数据实时转换为Modbus协议数据,供工控平台读取。
┌─────────────────┐ OPC UA ┌─────────────────┐ Modbus ┌─────────────────┐
│ │ (opc.tcp://) │ │ (RTU/TCP) │ │ │ WinCC管理系统 │◄─────────────────►│ VFBOX网关 │◄─────────────────►│ 工控平台 │
│ (OPC UA Server)│ │ (协议转换网关) │ │ (Modbus Master) │
│ │ │ │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
生产数据 协议转换 数据消费
| 设备 | 型号 | 说明 |
|---|---|---|
| VFBOX网关 | VB303-1200#128-N-1 | 1网口2串口,支持采集OPC UA,Modbus转发 |
| WinCC服务器 | 西门子WinCC V7.5 | OPC UA Server,提供生产数据 |
| 工控平台 | 第三方DCS/PLC | Modbus Master,读取网关数据 |
| 电脑 | 配置电脑 | 安装VFBOX Studio软件,用于配置网关 |
选型说明:网关型号中N代表采集协议为OPC UA,1代表转发服务协议为Modbus。128表示可采集128个数据点位。
| 设备 | IP地址 | 子网掩码 | 说明 |
|---|---|---|---|
| WinCC服务器 | 192.168.1.100 | 255.255.255.0 | OPC UA服务端 |
| VFBOX网关网口 | 192.168.1.199 | 255.255.255.0 | 默认IP,可修改 |
| 配置电脑 | 192.168.1.198 | 255.255.255.0 | 与网关同网段 |
| 工控平台 | 192.168.1.50 | 255.255.255.0 | Modbus TCP模式 |
使用UaExpert软件连接WinCC OPC UA服务器,获取以下关键信息:
示例数据节点:
| 数据名称 | 数据类型 | NodeId(网关地址) | 说明 |
|---|---|---|---|
| 生产线温度 | Float | ns=2;s=WinCC.Tag.Temperature | 车间温度监控 |
| 设备运行状态 | Boolean | ns=2;s=WinCC.Tag.MachineStatus | 设备启停状态 |
| 产量计数 | Int32 | ns=2;s=WinCC.Tag.ProductionCount | 当日产量 |
| 压力值 | Float | ns=2;s=WinCC.Tag.Pressure | 管道压力 |
| 报警状态 | Int32 | ns=2;s=WinCC.Tag.AlarmState | 报警代码 |
点击设备名称WinCC_OPC_Server,点击"新建标签",依次添加以下数据:
| 标签名称 | 数据类型 | 地址(NodeId) | 读写控制 |
|---|---|---|---|
| Temperature | Float | ns=2;s=WinCC.Tag.Temperature | 读 |
| MachineStatus | Boolean | ns=2;s=WinCC.Tag.MachineStatus | 读 |
| ProductionCount | Int32 | ns=2;s=WinCC.Tag.ProductionCount | 读 |
| Pressure | Float | ns=2;s=WinCC.Tag.Pressure | 读 |
| AlarmState | Int32 | ns=2;s=WinCC.Tag.AlarmState | 读 |
配置要点:
- 标签名称使用英文字母+数字,不要使用中文或特殊符号
- 数据类型必须与WinCC中变量的数据类型一致
- 地址格式为:ns=命名空间索引;s=节点标识符或ns=命名空间索引;i=节点ID
| 参数 | 设置值 | 说明 |
|---|---|---|
| 启用 | Yes | 启用Modbus从站功能 |
| 站号 | 1 | Modbus从站地址,工控平台通过此站号访问 |
| 字节顺序 | 1234 | 浮点型数据字节顺序,根据工控平台要求调整 |
若工控平台通过RS485/RS232连接网关:
若工控平台通过以太网连接网关:
将OPC UA采集的数据映射到Modbus寄存器地址:
| 标签名称 | 数据类型 | Modbus数据区 | 寄存器地址 | 功能码 |
|---|---|---|---|---|
| MachineStatus | Boolean | 0X Digital Coils | 00001 | 01H/05H |
| AlarmState | Int32 | 4X Holding Registers | 40001 | 03H/06H/10H |
| ProductionCount | Int32 | 4X Holding Registers | 40003 | 03H/06H/10H |
| Temperature | Float | 4X Holding Registers | 40005 | 03H/06H/10H |
| Pressure | Float | 4X Holding Registers | 40007 | 03H/06H/10H |
寄存器地址规划说明:
- 0X区(00001-09999):布尔量,可读写,对应功能码01H/05H/0FH
- 4X区(40001-49999):模拟量/数值型,可读写,对应功能码03H/06H/10H
- Int32和Float类型各占2个寄存器(4字节)
- 地址分配需考虑数据长度,避免重叠
在工控平台中配置Modbus TCP主站:
在工控平台中配置Modbus RTU主站:
在配置电脑上安装Modbus Poll软件,模拟工控平台读取网关数据:
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| OPC UA连接失败 | 网络不通或地址错误 | 检查IP、端口、防火墙设置 |
| 数据状态为Bad | NodeId错误或权限不足 | 核对NodeId,检查WinCC OPC UA配置 |
| Modbus读取失败 | 站号或地址错误 | 核对Modbus Slave站号和寄存器映射 |
| 浮点数值不对 | 字节顺序不匹配 | 调整Modbus Slave中的字节顺序设置 |
| 数据不更新 | 扫描间隔过长 | 在设备属性中减小扫描间隔(如1000ms) |
如需深度排查通信问题:
| VFBOX数据类型 | Modbus寄存器长度 | 占用寄存器数 | 示例地址 |
|---|---|---|---|
| Boolean | 1位 | 1个线圈 | 00001 |
| Byte/Char | 8位 | 1个寄存器 | 40001 |
| Short/Word | 16位 | 1个寄存器 | 40001 |
| Int32/Long/DWord/Float | 32位 | 2个寄存器 | 40001-40002 |
| Double/LLong/QWord | 64位 | 4个寄存器 | 40001-40004 |
| String | 变长 | 根据长度计算 | 40001.16 |