发表于:2019/7/23 10:29:13
#0楼
Modbus通讯编程实例(一)
最近单独在写Modbus和现场总线的介绍,都是一些思路性质的介绍,不涉及具体的实例,可能很多童鞋还是觉得不够具体,因为我现在不做具体的编程调试了,所以直接些实例很费劲。参考了一些网上的和施耐德内部的资料,写成以下的案例,用了一些其他人的劳动成果,如果原作者在意版权问题,请联系我,我尊重您的所有权。
我的帖子里提过Modbus的功能码,常用的没几个,这里列出更多的(也不是全部):
功能码(十进制) 十六进制 说明
01 01 读线圈
02 02 读离散量输入
03 03 读保持寄存器
04 04 读输入寄存器
05 05 写单个线圈
06 06 写单个寄存器
07 07 读异常状态
08 08 诊断
11 0B 获得事件计数器
12 0C 获得事件记录
15 0F 写多个线圈
16 10 写多个寄存器
17 11 报告从站ID
22 16 屏蔽写寄存器
23 17 读/写多个寄存器
24 18 读FIFO队列
DATA_EXCH功能块是用于Premium和M340传输数据到另外一台设备,这个功能块支持Modbus所有的功能码。
DATA_EXCH用梯形图表示:
各个引脚定义
ADR为地址引脚,对于PREMIUM系列需要使用ADDR功能块连接
对于M340系列需要使用ADDM功能块连接。
TYPE为类型引脚,1为接受/发送,2为只接受,3为只发送。
EMIS为要发送表
RECP为接受表
GEST为交换管理表
实例一:读取N位(功能码01)
其中在EMIS数组中第一个字,低字节为功能码01,高字节为读取位的起始位1
第二个字,低字节为读取位的起始位1,高字节为读取位的长度5
第三个字,低字节为读取位的长度5
最后要在交换管理表的第四个字中定义这个报文字节的长度,为1个字节的功能码,2个字节的数据起始地址,2个字节的读取位的长度,所以长度为1+2+2=5
在TWIDO中赋值如下:
在RECP中第一个字为返回码
第二个字为读取的数据
实例二:读取N字(功能码03)
其中在EMIS数组中第一个字,低字节为功能码03,高字节为读取字的起始地址1
第二个字,低字节为读取字的起始地址1,高字节为读取字的长度6
第三个字,低字节为读取字的长度6
最后要在交换管理表的第四个字中定义这个报文字节的长度,为1个字节的功能码,2个字节的数据起始地址,2个字节的读取字的长度,所以长度为1+2+2=5
在TWIDO中赋值如下
在RECP中第一个字为返回码
第二个字开始为读取的数据
最近单独在写Modbus和现场总线的介绍,都是一些思路性质的介绍,不涉及具体的实例,可能很多童鞋还是觉得不够具体,因为我现在不做具体的编程调试了,所以直接些实例很费劲。参考了一些网上的和施耐德内部的资料,写成以下的案例,用了一些其他人的劳动成果,如果原作者在意版权问题,请联系我,我尊重您的所有权。
我的帖子里提过Modbus的功能码,常用的没几个,这里列出更多的(也不是全部):
功能码(十进制) 十六进制 说明
01 01 读线圈
02 02 读离散量输入
03 03 读保持寄存器
04 04 读输入寄存器
05 05 写单个线圈
06 06 写单个寄存器
07 07 读异常状态
08 08 诊断
11 0B 获得事件计数器
12 0C 获得事件记录
15 0F 写多个线圈
16 10 写多个寄存器
17 11 报告从站ID
22 16 屏蔽写寄存器
23 17 读/写多个寄存器
24 18 读FIFO队列
DATA_EXCH功能块是用于Premium和M340传输数据到另外一台设备,这个功能块支持Modbus所有的功能码。
DATA_EXCH用梯形图表示:
各个引脚定义
ADR为地址引脚,对于PREMIUM系列需要使用ADDR功能块连接
对于M340系列需要使用ADDM功能块连接。
TYPE为类型引脚,1为接受/发送,2为只接受,3为只发送。
EMIS为要发送表
RECP为接受表
GEST为交换管理表
实例一:读取N位(功能码01)
其中在EMIS数组中第一个字,低字节为功能码01,高字节为读取位的起始位1
第二个字,低字节为读取位的起始位1,高字节为读取位的长度5
第三个字,低字节为读取位的长度5
最后要在交换管理表的第四个字中定义这个报文字节的长度,为1个字节的功能码,2个字节的数据起始地址,2个字节的读取位的长度,所以长度为1+2+2=5
在TWIDO中赋值如下:
在RECP中第一个字为返回码
第二个字为读取的数据
实例二:读取N字(功能码03)
其中在EMIS数组中第一个字,低字节为功能码03,高字节为读取字的起始地址1
第二个字,低字节为读取字的起始地址1,高字节为读取字的长度6
第三个字,低字节为读取字的长度6
最后要在交换管理表的第四个字中定义这个报文字节的长度,为1个字节的功能码,2个字节的数据起始地址,2个字节的读取字的长度,所以长度为1+2+2=5
在TWIDO中赋值如下
在RECP中第一个字为返回码
第二个字开始为读取的数据