去年在给本地一家食品包装厂做自动化改造时,产线主管指着控制柜里崭新的威纶通MT8071iE人机界面问我:"这新买的触摸屏能不能直接读取老PLC里的数据?我们那几台三菱FX3U都用了七八年了..." 这个看似简单的需求背后,其实涉及工业现场最典型的设备异构难题——不同品牌的HMI与PLC如何实现经济高效的互联。
传统方案要么要求PLC加装通讯模块(每个端口增加上千元成本),要么需要工控机做协议转换(引入新的故障点)。而穿透连接技术就像给设备开了条VIP通道,让HMI直接"穿透"到PLC内存区读写数据。以威纶HMI与三菱FX3U的组合为例,实测响应速度比OPC中转快3倍以上,且不需要额外硬件投入。
三菱FX3U系列PLC默认支持的MC协议(MELSEC Communication Protocol)采用3E帧格式,其数据包结构就像快递单:
code复制| 副标题 | 站号 | 指令代码 | 寄存器地址 | 数据长度 | 数据内容 | 校验码 |
举个例子,当HMI要读取D100开始的10个寄存器时,实际发送的十六进制报文类似:
50 00 FF FF 03 00 0C 00 10 00 04 01 00 64 00 0A 00 A6
其中关键字段解析:
0x0401表示批量读指令0x0064对应D100的地址编码(换算方法:D寄存器基地址0x4000 + 100)0x000A表示读取10个字威纶通HMI内置的协议驱动实际上完成了三件事:
D100转换为MC协议识别的0x0064在EasyBuilder Pro软件中,这些配置藏在"设备连接"→"三菱FX系列"→"通讯参数"里。有个容易忽略的细节是站号设置必须与PLC参数一致,笔者曾遇到因站号默认为0而PLC实际为1导致的连接失败。
虽然市面上有现成的USB-SC09编程线,但穿透连接推荐使用自制的RS422全双工电缆。具体接线方式:
| HMI端(DB9母头) | PLC端(圆8针) | 线径要求 |
|---|---|---|
| 引脚3(TXD+) | 引脚2(SDA) | ≥0.5mm² |
| 引脚8(TXD-) | 引脚1(SDB) | 屏蔽双绞 |
| 引脚2(RXD+) | 引脚6(RDA) | 耐油污 |
| 引脚7(RXD-) | 引脚5(RDB) |
关键提示:PLC端的RDA/RDB必须与HMI的TXD+/TXD-交叉连接,这个反接原则是很多新手容易搞错的地方。曾见过某项目因线序接反导致通讯芯片烧毁的案例。
理论上最高可设115200bps,但工业现场建议采用以下配置组合:
实测发现,当变频器与通讯电缆平行走线时,19200bps下的误码率会从0.01%飙升到2.3%。这时要么降低波特率,要么改用带磁环的屏蔽电缆。
在EasyBuilder Pro中创建新工程时,这几个参数必须严格匹配:
basic复制[Device_Setting]
Protocol = Mitsubishi_FX_3U
BaudRate = 19200
DataBit = 7
StopBit = 1
Parity = Even
StationNo = 1
Timeout = 300
特别注意:
通过GX Works2连接PLC后,需要确认以下参数:
0x009F(对应19200bps,7,E,1)踩坑记录:某次调试时发现HMI只能读不能写,最终发现是PLC的D8121(站号设置寄存器)被其他程序修改为0,与HMI设置的站号1不匹配。
用万用表测量通讯线电压:
若发现RXD端电压持续为0,可能是PLC端口损坏或协议未启用。曾遇到FX3U的422端口因雷击导致内部光耦击穿,更换通讯板后解决。
| 错误码 | 含义 | 解决方案 |
|---|---|---|
| 0x0041 | 站号不符 | 核对PLC D8121与HMI站号 |
| 0x0050 | 指令不支持 | 确认使用3E帧格式 |
| 0x00B0 | 校验错误 | 检查电缆屏蔽层接地 |
| 0x00C0 | 格式错误 | 确认数据位/停止位设置 |
当遇到间歇性通讯中断时,可以尝试:
MOV K4 D8120(强制设置通讯参数)对于需要频繁刷新的数据(如实时温度值),建议采用批量读取而非单点读取。例如:
basic复制// 低效方式:
Read D100
Read D101
...
Read D110
// 优化方式:
Read D100 Length=11
实测显示,读取11个寄存器时,批量方式耗时仅28ms,而单点方式达到172ms。但需注意三菱FX3U单次最多允许读取64个字。
当需要监控超过64个点时,可以采用分时读取策略:
SetData函数整合数据某饮料灌装线项目采用此方案后,通讯负载率从78%降至42%,且避免了PLC通讯口过载导致的看门狗超时。