接着上篇,这篇主要谈谈流量计数据读取。我们使用的MEMS流量计采用Modbus协议Modbus 使用RS-485 作为硬件载体。
一. Modbus协议
该协议定义了 Modbus 总线Master(主设备)与Slave(从设备)之间的通讯报文格式,对于主设备来说,Modbus 协议是联系上位机(如PC、PLC、HMI 等)的接口,而且所有的通讯都是“透明的”。控制器通信使用主-从技术,即仅有一个设备(主设备)能初始化传输(查询),其它设备(从设备)根据主设备查询提供的数据作出相应反应。
主设备可单独和从设备通信,也能以广播方式和所有从设备通信(仅限于点对点通讯)。如果单独通信,从设备返回一帧消息作为回应;如果是以广播方式查询的,则不作任何回
应。Modbus 协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据和错误检测域。
从设备回应消息帧也由Modbus 协议构成,包括确认要产生动作的域、任何要返回的数据和错误检测域。如果在消息接收过程中发生错误,或从设备不能执行其命令,从设备将
建立一错误消息帧并把它作为回应发送出去。
控制器能设置为两种传输模式(ASCII 或RTU)中的任何一种在标准的Modbus 网络进行通信,用户选择想要的模式,包括串口通信参数(波特率、奇偶校验方式等),在配置每
个控制器的时候,在一个Modbus 网络上的所有设备都必须选择相同的传输模式和串口参数。所选的ASCII 或RTU 方式仅适用于标准的Modbus 网络,它定义了在这些网络上连续
传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。
1.1 modbus RTU模式
图1 RTU模式
使用RTU 模式,消息发送至少要以3.5 个字符时间的停顿间隔开始。在网络波特率下多样的字符时间,这是最容易实现的(如下图的T1-T2-T3-T4 所
示,相当于四个字节的传输延迟)。传输的第一个域是设备地址。可以使用的传输字符是十六进制的0~9,A~F。网络设备不断侦测网络总线,包括停顿间隔时间在内。当接收到第一个域(地址域)以后,每个设备都进行解码以判断是否是发往自己的。在最后一个传输字符之后,一个至少3.5 个字符时间的停顿确定了消息的结束。一个新的消息可在此停顿后开始。
图2 RTU典型消息帧
1.2 modbus编码
按照modbus RTU消息帧我们知道要读取modbus从设备数据,必须要按照协议走;首先发送设备地址,接着发送功能码,然后是数据位,最后是这帧指令CRC校验码。参照产品用户手册,以读取总流量为例:
图3 总流量寄存器
假设当前从设备地址为01,则发送:01 03 00 04 00 03 CRC_H CRC_L给流量计就可读回流量计数据&