modbus通讯协议介绍及应用
2023-03-29 15:01:02 0 举报
AI智能生成
modbus通讯协议介绍及应用
作者其他创作
大纲/内容
Modbus TCP
Modbus TCP协议与Modbus RTU类似,只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可
Modbus RTU一般采用串口RS232C或RS485/422,而Modbus TCP一般采用以太网口
对于寄存器操作方面都是一样的
Modbus ASCII
Modbus ASCII由于采用ASCII码传输,并且利用特殊字符作为其字节的开始与结束标识,其传输效率要远远低于Modbus RTU协议,一般只有在通信数据量较小的情况下才考虑使用Modbus ASCII通信协议
传感器modbus协议对接说明
传感器通常通过modbus协议上传数据
在使用时
首先,需要关注的是传感器的通信波特率,通信两端速率要一样;
其次,需要知道传感器默认的modbus地址,不同传感器可能也称为传感器ID。
很多传感器都有上位机软件,进行参数修改。
传感器说明举例
对于传感器参数,每家的传感器参数计算方式是不同的
例如
modbus介绍
Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准,并且现在是工业电子设备之间常用的连接方式
常见modbus协议包括
Modbus RTU
Modbus TCP
Modbus ASCII
Modbus RTU
常用功能码
【读线圈寄存器01H、读离散输入寄存器02H】
【读保持寄存器03H、读输入寄存器04H】
【写单个线圈寄存器05H、写单个保持寄存器06H】
【写多个线圈寄存器0FH,写多个保持寄存器10H】
读线圈(继电器)寄存器01H
也称为读开关量输出状态
例如:主机要读取地址为01,开关量DO1,DO2的输出状态
从机(PDM)数据寄存器的地址和数据为
主机发送的报文格式:
从机(PDM)响应返回的报文格式:
写单个线圈寄存器05H
也称为写一路开关量输出
例1:开关量输出点DO1,其当前状态为“分”,主机要控制该路继电器“合”。
控制命令为:
“FF00”为控制继电器“合”;
“0000”为控制继电器“分”;
主机发送的报文格式:
从机(PDM)响应返回的报文格式:
与主机发送的报文格式及数据内容完全相同
写多个线圈寄存器0FH
例如:要写多个继电器状态,第1、3、4为闭合状态
主机发送报文:
从机成功执行返回:01 0F 00 20 00 04 55 C2
读离散输入寄存器02H
读1路或多路开关量状态输入
例如:主机要读取地址为01,开关量DI1—DI4的输入状态
如果当前从机数据:寄存器起始地址为0020,输入状态数据为0B,即1011
主机读取格式:
从机回复:
读保持寄存器03H、读输入寄存器04H
保持寄存器是可读写的寄存器,输入寄存器是只能读不能写的寄存器
两种功能码格式相同。这里用03码举例
例如:主机要读取地址为01,起始地址为0116的3个从机寄存器数据
从机(PDM)数据寄存器的地址和数据为:
主机发送的报文格式:
从机(PDM)响应返回的报文格式:
写单个保持寄存器06H
例如:主机要把数据07D0,保存到地址为002C的从机寄存器中去(从机地址码为01)
主机发送的报文格式:
从机返回报文格式及数据与主机发送的报文格式及数据内容完全相同。
写多个保持寄存器10H
主机利用这个功能码把多个数据保存到PDM表的数据存储器中去
Modbus通讯规约中的寄存器指的是16位(即2字节),并且高位在前。
例如,要向从机两个寄存器写数据:
主机发送的报文格式:
从机(PDM)响应返回的报文格式:
Modbus 寄存器总结
对于保持寄存器,由于需要断电保持里面的数据,所以需要把数据存储到掉电不易失的存储空间中,03H,06H,10H为此类操作功能码
其他如输入寄存器,线圈状态,开关量输入等,存储没有特殊要求
modbus协议下发报文错误,将返回错误报文,错误报文格式如下:
地址+功能码(最高位置1)+错误码+校验
地址:发生错误的从站地址
功能码:主站发送功能码的最高位置1
例如:主机发送命令11 06 06 00 00 01 4A 12
如果从机解析报文出错,比如说寄存器 06 00不允许写操作,则返回
11 86 01 82 65
错误码
常用的错误码:
01 非法功能。请求的功能不存在,比如说,从机不支持06功能码
02 非法数据地址。请求的地址不允许操作,比如说从站从站可操作地址范围为0~01 00,如果,主站读写01 02,那会报02码
03 非法数据值。比如说,从站某个寄存器的取值范围为0~10,主站写11的话,就会报03码
注意:目前错误码,格式基本固定,但是错误码定义,每个厂家有所不同,所以需要,依据厂家的实际规定来确认
0 条评论
下一页