根据以下信息怎么使用200自由口读取温度,我编写的程序如下图
一、主要参数
1、采用传感器:NTC 10K B=3950
2、通信接口:RS485
3、通信协议:MODBUS-RTU
4、通信格式: 9600,n,8,1
5、工作电压:9V--24V
▲通讯命令
命令字列表
命令字(16进制)功能描述
03 读寄存器状态
06 写寄存器
功能03:读寄存器状态
主机命令从机地址+命令字+欲读寄存器地址+欲读字个数+校验 (CRC16)
1 byte + 1 byte + 2 bytes + 2 bytes + 2 bytes
从机回送从机地址+命令字+读到字长度+寄存器内容+校验 (CRC16)
1 byte + 1 byte + 1byte + n bytes + 2 bytes
例:读取温度
主机命令:
01 03 00 01 00 01 D5 CA
从机地址 命令字 欲读寄存器首地址 欲读字个数 校验 (CRC16)
从机响应:
01 03 02 00 22 61 E7
从机地址 命令字 读到数据长度 实时 温度 校验 (CRC16)
问题补充:
改程序后出现错误 “6”如下程序段
图片说明:
最佳答案
1)你先算一下这个校验码结果数据是否出错,主、从都需要重新核实。
2)根据报警信息是接收超过了timeout时间,但这个是范围广的报警信息,具体有主、从站硬件的连接,软件的程序和从站的响应、从站参数如从站地址的设置等。
3)不建议你使用定时器的理由是定时器工作机制是与扫描周期无关的,使用只能用标志位,一般采用前一个网络段的done位触发是比较合理的一个办法。
补充问题回复:
当报警6#,说明你同时调用了多个MBUS_MSG 指令,一次只能调用系统中唯一的一个。
根据你2次的提问,我感觉你应该检查硬件连接的可靠性及触发管脚first的循环机制。
图片说明:
提问者对于答案的评价:
谢谢
专家置评
modbus RTU通信可以使用modbus rtu指令库进行编程
多个msg需要进行轮训,使用done位做逻辑
参考
http://www.ad.siemens.com.cn/service/article/S7-200/S7-200modbus/Default.aspx
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc179931.html