中盛模块温湿度检测及三菱485通讯协议实现程序
中盛模块读温湿度的三菱485通讯程序最近在车间调试温湿度监控系统手头的中盛温湿度模块要接入三菱FX3U PLC。这玩意儿走的是485通讯刚开始折腾的时候真是被校验位和超时设定坑惨了。趁着记忆新鲜把趟过的坑整理成实战笔记。硬件接线先得整明白。中盛模块的485接口AB线接PLC的RDA、SDA注意别跟供电电源搞混线序。记得在PLC端并个120Ω终端电阻实测不加的话超过30米就丢包。最骚的是模块默认波特率9600但三菱的RS指令默认是19200这就得在程序开头改设定MOV H0C96 D8120 // 设置通讯格式19200/8/N/1 MOV K5 D8129 // 超时设定5秒这段配置寄存器操作就像给两个设备定暗号波特率不对就像两个人用不同语速说话后面数据再标准也白搭。调试时建议用M8029通讯完成标志带个指示灯看见灯闪就知道数据在跑。中盛模块读温湿度的三菱485通讯程序数据请求帧要严格按照模块协议来。中盛用的Modbus-RTU格式具体请求帧长这样RS D100 K8 D200 K10 // 发送8字节请求接收10字节响应 // 发送缓冲区D100-D104内容 H01 // 设备地址 H04 // 功能码读输入寄存器 H0000 // 起始地址温度 H0002 // 寄存器数量 HCRC // CRC校验需计算这里有个巨坑——CRC校验必须用低位在前算法。之前直接拿三菱的CRC指令算出来死活不对后来发现模块要求的是Modbus标准CRC16。建议先用在线CRC计算器生成样本值再移植到PLC算法里。收到响应后得拆解数据帧。正常返回的10字节结构01 04 04 01 90 01 91 XX XX第3字节04表示数据长度温度值在D201-D2020190转十进制就是40.0℃湿度值在D203-D2040191转十进制40.1%数据处理要注意符号问题。有些型号的温度值是带符号的这时候得用三菱的BIN指令转换LD M8000 BIN D201 D210 // 温度原始值转十进制 BIN D203 D211 // 湿度原始值转十进制 DIV D210 K10 D220 // 实际温度原值/10 DIV D211 K10 D221 // 实际湿度同理调试时务必用GX Works2的寄存器监控功能实时查看D200开始的接收缓冲区。常见故障码返回ERR1地址不匹配检查设备拨码开关返回ERR3数据长度异常检查请求帧寄存器数量无响应检查接线极性用万用表量A-B间电压正常应有2V左右压差实测这套程序在车间跑了大半年偶尔遇到干扰丢包的情况在程序里加了两次重发机制就稳了。关键是把超时时间设得比轮询周期短避免通讯堵塞。最后附上完整程序结构图传GitHub上了地址见评论区置顶需要自取别忘点星~
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2413077.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!