Modbus协议目前成为 工控行业的标准协议。为莫迪康公司(Modicon)开发的,后来被施耐德收购成为旗下品牌,现在已作为施耐德的标准协议。现在 Modbus 已经是工业领域全球最流行的协议。此协议支持传统的 RS-232、 RS-422、RS-485 和TCP以太网设备。许多工业设备,包括 plc, dcs,智能仪表等都在使用 Modbus 协议作为他们之间的通讯标准。有了它,不同厂商生产的控制 设备可以连成工业网络,进行集中监控。 Modbus协议包括ASCII、RTU、TCP等。数据通讯采用Maser(主)/Slave(从)方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。 Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。 工具/原料- 带有RS232串口、USB接口的计算机电脑
- RS232转RS485通信转换器
- 或USB转RS485通信转换器
- RS485设备一台(仪表,PLC,触摸屏,变频器等任意设备)
- 或通过虚拟串口软件安装两个虚拟串口
- 串口调试助手或commix1.3软件
方法/步骤- MODBUS串行通信协议基本规则:每个MODBUS数据包都由以下5个部分组成:(1)从站地址;(2) 要执行的功能码;(3)寄存器地址(变量地址);(4)数据 ;(5)CRC校验;
- (1)从站地址:地址长度为1个字节,有效的从站地址范围为1-247,从站如果接收到一帧地址信息与自身地址相符合的数据包时,就执行数据包中包含的命令。
- (2)功能码: MODBUS数据包中功能码长度为一个字节,用以通知从站应当执行何种操作,从站响应数据包中应当包含主站所请求操作的相同功能码字节。有关功能码参照下表:
- (3)寄存器地址:从机执行有效命令时数据区域存储的位置。不同变量占用不同寄存器个数,有些地址变量占用两个寄存器,4字节数据,有些变量占用一个寄存器,2字节数据,请根据实际情况使用。有些占用更多寄存器,根据实际数据来定。
- (4)数据区:数据区包含了终端执行特定功能所需要的数据或者终端响应查询时采集到的数据。这些数据的内容可能是数值、参考地址或者设置值;例如:功能码告诉终端读取一个寄存器,数据区则需要指明从哪个寄存器开始及读取多少个数据,内嵌的地址和数据依照类型和从机之间的不同内容而有所不同;寄存器数值发送顺序为:高位字节在前,低位字节在后。
- (5)CRC校验: MODBUS-RTU模式采用16位CRC校验。发送设备应当对包裹中的每一个数据都进行CRC16计算,最后结果存放入检验域中。接收设备也应当对包裹中的每一个数据(除校验域以外)进行CRC16计算,将结果域校验域进行比较;只有相同的包裹才可以被接受。
- 通信异常处理 如果主站发送了一个非法的数据包或者是主站请求一个无效的数据寄存器时,异常的数据响应就会产生。这个异常数据响应由从站地址、功能码、故障码和校验域组成. 根据MODBUS通讯要求,异常响应功能码=请求功能码+0x80;异常应答时,将功能号的最高位置1。例如:主机请求功能号为0x04则从机返回的功能号对应为0x84。
- 举例说明:1、读多寄存器例:主机读取仪表测量值UA(A相电压),假设现测量到A相电压为220.0V。UA的地址编码是0x4000(十六进制),因为UA是长整型数据(4字节),占用2个数据寄存器,220.0V电压转换对应的十六进制数据是:0x00000898(2200)。主机发送命令格式为:01 03 40 00 00 02 D1 CB从机返回命令格式为:01 03 04 00 00 08 98 FC 59
- 举例说明:例2:写单寄存器假设将温控表温度值SV修改为150(写入设定值SV),SV的地址编码是0x2000(十六进制),因为SV是整数(2字节),占用1个数据寄存器。将十进制整数150转换为十六进制数为0x0096。主机发送命令格式为:01 06 20 00 00 96 02 64从机返回命令格式为:01 06 20 00 00 96 02 64
注意事项- 一般PLC用十进制数表示,所以必须要进行数据转换。
- 注意查看不同厂家对modbus设备中协议的说明,特别注意有些数据格式问题。
|