Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的Modicon控制器使用RS232C实现串行的Modbus。Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。
Modbus特点
Modbus具有以下几个特点:
(1)标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。
(2)Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。
(3)Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。
modbus rtu功能码
1 功能码“02”:读1路或多路开关量状态输入
例如:主机要读取地址为01,开关量DI1—DI4的输入状态。
从机(PDM)数据寄存器的地址和数据为:

主机发送的报文格式:

从机(PDM)响应返回的报文格式:

2 功能码“01”:读1路或多路开关量输出状态
例如:主机要读取地址为01,开关量DO1,DO2的输出状态。
从机(PDM)数据寄存器的地址和数据为:

主机发送的报文格式:

从机(PDM)响应返回的报文格式:

3 功能码“03”:读多路寄存器输入
例如:主机要读取地址为01,起始地址为0116的3个从机寄存器数据。
从机(PDM)数据寄存器的地址和数据为:

主机发送的报文格式:

从机(PDM)响应返回的报文格式:

4 功能码“05”:写1路开关量输出(“遥控”)
例1:开关量输出点DO1,其当前状态为“分”,主机要控制该路继电器“合”。
控制命令为:
“FF00”为控制继电器“合”;
“0000”为控制继电器“分”;
主机发送的报文格式:

从机(PDM)响应返回的报文格式:
与主机发送的报文格式及数据内容完全相同。
例2:开关量输出点DO2,其当前状态为“合”,主机要控制该路继电器“分”。
主机发送的报文格式:

从机(PDM)响应返回的报文格式:
与主机发送的报文格式及数据内容完全相同。
5 功能码“06”:写单路寄存器
例如:主机要把数据07D0,保存到地址为002C的从机寄存器中去(从机地址码为01)。通讯数据保存结束后,地址为002C的PDM表原存储信息为:

主机发送的报文格式:

从机(PDM)响应返回的报文格式:
与主机发送的报文格式及数据内容完全相同。
6功能码“10”:写多路寄存器
主机利用这个功能码把多个数据保存到PDM表的数据存储器中去。Modbus通讯规约中的寄存器指的是16位(即2字节),并且高位在前。这样PDM的存储器都是二个字节。由于Modbus通讯规约允许每次最多保存60个寄存器,因此PDM一次也最多允许保存60个数据寄存器。
例如:主机要把0064,0010保存到地址为002C,002D的从机寄存器中去(从机地址码为01)。通讯数据保存结束后,地址为002C/002D的PDM表内存储信息为:

主机发送的报文格式:

从机(PDM)响应返回的报文格式:
