三菱FX3U的自由口通讯(用的MODBUS RTU协议),通过485-BD板与台达VFD-M变频器用RS指令来实现。 三菱PLC程序运用RS指令进行轮询通讯,正常情况下只进行读操作,当修改频率或者操作启停命令时,才进行写操作,写操作完成后自动移除。 从而起到保护从站变频器的EEROM的写入寿命 此plc程序亦适合于别的FX系列的plc,由于FX3U支持CRC指令,有的不支持这个指令,因此此程序使用自己写的CRC校验程序,从而满足各型号。 PLC程序和昆仑通态MCGS组态程序,具体演示过程如视频所示。
三菱FX系列PLC玩MODBUS RTU通讯这事儿,说难不难说简单也不简单。特别是用自写CRC校验这套玩法,能适配所有FX型号,这骚操作值得唠一唠。咱们这次拿FX3U+485BD板带台达VFD-M变频器实战,重点聊聊怎么用RS指令实现智能轮询机制。
硬件连线没啥花头,485BD板的SDA接变频器485+,SDB接485-,记得把终端电阻拨码开关整明白。关键是程序里这个轮询节奏要掌控好——平时只读不写,改频率或启停时才动真格,写完立马收手。这是真·为变频器EEROM寿命着想,毕竟这玩意儿擦写次数跟男同胞的头发似的,掉一次少一次。
先看CRC校验子程序,这是通用性的关键。虽然FX3U自带CRC指令,但咱这手搓代码能让老型号PLC照样跑:
LD M8000 MOV D100 K4 CRC D200 D100 D300这段看似简单,暗藏玄机。D200是数据起始地址,D100存数据长度,结果存在D300。核心是CRC_LOOP里的移位异或操作,每个字节都要做8次右移,配合XOR进行多项式计算。注意这里用的MODBUS标准多项式0x8005,倒序处理得用0xA001,这个反序操作很多人容易栽跟头。
主程序轮询框架才是精髓所在:
LD X0 RS D500 K8 D600 K7 D200X0是通讯使能触点,D500发送数据区存着从站地址、功能码这些。重点在RS指令参数配置:K8是发送字节数,K7是接收缓存大小,D200指向接收缓冲区。这里有个坑——每个RS指令执行期间必须保持触发条件,所以得用SET指令配合脉冲触发。
写操作触发逻辑设计得很机灵:
LD M100 //写命令触发 MOV H06 D510 //写入保持寄存器功能码 CALL P10 //执行写操作 RST M100 //完成后自动复位这个M100可能是HMI传来的写命令标志。注意写完后立即RST复位,防止重复写入。变频器参数地址映射要搞清楚,比如频率设定通常放在40001H(对应MODBUS地址0000H),启停命令在40009H之类的。
接收数据处理用了个状态机结构:
LD M8122 //接收完成标志 CMP D201 K1 //校验从站地址 CMP D202 K3 //校验功能码 BCD D203 K2 D210 //解析数据这里D201是返回的从站地址,D202是功能码。注意03功能码读保持寄存器的返回数据前两个字节是数据长度,实际数据从D203开始。用BCD转换是因为变频器数据经常用16进制格式表示频率百分比。
实际调试时建议加个心跳监测:
LD M8000 OUT T0 K50 LD T0 INC D400 //通讯计数器T0定时器每5秒触发一次,D400记录成功通讯次数。配合触摸屏做个状态指示灯,万一通讯卡死能快速定位问题段。
这套方案在昆仑通态MCGS上配套做了个简约不简单的界面:
- 频率设定框绑定PLC的D500寄存器
- 运行状态灯绑定M200
- 故障代码显示用D210数据映射
注意MODBUS地址偏移问题,HMI里填的40001对应PLC程序里的D200+0地址,别整岔劈了。
最后说个血泪经验:RS指令的发送完成标志M8129一定要用脉冲处理,不然容易进死循环。还有485线路的接地问题,曾经有个项目因为柜体未接地导致通讯时灵时不灵,拿万用表量出1.5V电位差,加个等电位连接立马药到病除。
这种通讯方案虽然比不上以太网通讯花哨,但在电磁环境复杂的场合反而更稳。关键是吃透了RS指令的工作机制后,搞起其他品牌的变频器、仪表通讯都是换汤不换药,一套代码能玩转半个车间的设备联动。