现在一个温度模块,支持Modbus RS485通信。本人想用自由口通讯发送02 03 00 00 00 01 84 39给它,然后返回温度代码。但是本人程序读不到返回值。请问哪里错了?能帮我修改一下么?
图片说明:
最佳答案
1、
VB100=8 这个正确
VW101-VW107 组织的数据帧也正确
SMB30=89H,将PORT0 口定义为了 9600 8位数据位、无校验,温度模块也是必须定义成这样,并且停止位是1位。
温度模块的设备地址是2吗?设完后要不要断电重启。
另外你再查一下 03H 功能码读一个字,从站返回的数据帧是几个字节,不能超过 SMB94 的值 8 个了节。
网络3,每秒发送一次,为什么不用 SM0.5,而用的是 SM0.1?而且此处发送指令需要用上升沿的。
在发送完成中断子程序中为为什么要改变 SMB87 控制字的值呢?
在发送完成中断子程序中增加一个变量自加指令,检验一下进到这个完送完成中断子程序没有;
同样可以在接收完成中断子程序中这样做,便于调试。
还可以查一下接线是不是正确。
http://www.ad.siemens.com.cn/productportal/Prods/s7-200-smart-portal/200SmartTop/SmartSMS/019.html
2、
用校验工具验证了 02 03 00 00 00 01 84 39 是标准的 MODBUS RTU 请求帧;为什么不用 MODBUS RTU 主站指令编程呢?
先用 MODSCAN32 软件测试一下温控模块 40001 中是什么内容。
Modbus RTU 主站 (最下面有MODBUS RTU 轮循实例)
http://www.ad.siemens.com.cn/productportal/Prods/s7-200-smart-portal/200SmartTop/communication/serial_port/modbus/Master/Master.htm
提问者对于答案的评价:
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc347328.html