信捷XDPLC与3台台达DT330温控器通讯程序(XJXD-3) 功能:通过信捷XD5,实现对3台台达DT330温控器设定温度,读取温度,反应灵敏,通讯稳定可靠。 程序采用轮询方式 器件:信捷XD5-24T4-E,台达DT330温控器,昆仑通态TPC7022NI触摸屏。 说明:的是带注释,带温控器手册,接线,参数设置都提供。 通讯稳定可靠,实用有效。
最近在厂里折腾了个小项目——用信捷XD5-24T4-E PLC同时撩三台台达DT330温控器。这活儿看着简单,真做起来才发现485通讯的水挺深。今天就唠唠怎么用轮询大法实现稳定控温,顺带分享几个踩坑实录。
硬件搭台:RS485的物理层
先上硬菜:信捷XD5自带COM2口支持485通讯,三台温控器手拉手菊花链式接线。重点来了!台达DT330的A+接PLC的485+,B-接485-(别反了,反了直接罢工)。每台温控器地址记得设成1/2/3(参数Ad-01),终端电阻给最后一台挂上120Ω电阻。电源最好单独供电,别和PLC共用,不然干扰会让你怀疑人生。
!接线示意图
(此处应有接线图,自己画个简图标注A/B线+电源隔离)
参数设置:先谈恋爱得对上暗号
台达DT330的通讯参数要跟PLC对齐:
- 波特率:19200(手册P.45)
- 数据位:7位
- 停止位:1位
- 校验位:偶校验
PLC端用MODBUS RTU协议,站号对应1/2/3。有个坑爹细节——台达的温控值用16位整数,实际温度得除以10(比如设定25.5℃要发255)。
代码实战:轮询才是老司机的稳健
核心思路就是挨个点名三台设备,避免数据撞车。上主程序骨架:
// 初始化通讯口 MOV H81, D8120 // 设置COM2为19200,7,E,1 RST M8122 // 清空通讯标志 // 轮询控制 LD M8000 // 常开触点 OUT T0 K50 // 500ms轮询周期 LD T0 CALL P0 // 调用通讯子程序子程序P0里玩地址切换:
// 轮询计数器 INC D0 // D0记录当前设备号 CMP D0 K3 // 超过3号机? >= RST D0 // 归零循环 // 根据设备号发指令 LD D0=0 MOV K1 D100 // 目标地址1号机 CALL P1001 // 温度读取函数 LD D0=1 MOV K2 D100 CALL P1001 ...// 以此类推重点看温度读取函数(以MODBUS功能码03H为例):
// P1001: 读取PV当前值 MOV D100 D200 // 目标地址 MOV H0003 D201 // 功能码 MOV H0000 D202 // 起始地址0040H(台达参数地址) MOV H0001 D203 // 读取1个寄存器 CALL MODBUS_SEND // 调用发送指令 // 接收处理 LD M8122 // 接收完成标志 CALL DATA_PROCESS MOV K100 D10 // 超时计数器 RST M8122校验和计算千万别偷懒,实测用CRC16比LRC稳得多。推荐直接用信捷的CRC指令,省得自己写:
CRC D200 K6 D300 // 对前6个字节计算CRC MOV D300 D207 // 填入报文末尾避坑指南:
- 遇到乱码先甩锅给接地——485通讯地线必须共接
- 温控器响应慢?在PLC程序里加个50ms的发送间隔
- 数据突变检查站号是否冲突,曾经有台机器地址设成0导致群魔乱舞
- 触摸屏显示异常?检查数值转换,昆仑通态那边要做除以10处理
最后上张实际运行效果图,三路温度曲线稳如老狗,波动±0.3℃以内。源码已打包,需要注释版的老铁评论区自取。搞工控嘛,有时候就得像谈恋爱——耐心点,该有的响应总会来的。