MODBUS协议蓄电池组在线监测Word格式文档下载.docx
《MODBUS协议蓄电池组在线监测Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《MODBUS协议蓄电池组在线监测Word格式文档下载.docx(38页珍藏版)》请在冰豆网上搜索。
在这种模式,一个Modbus事务处理包含2个报文:
一个来自主节点的请求,一个来自子节点的应答。
每个子节点必须有唯一的地址(1到247),这样才能区别于其它节点被独立的寻址。
在广播模式,主节点向所有的子节点发送请求。
对于主节点广播的请求没有应答返回。
广播请求一般用于写命令。
所有设备必须接受广播模式的写
功能。
地址0是专门用于表示广播数据的。
单播和广播模式的区别在一个多点的结构下(如RS485)更加易于理解。
3.2Modbus地址规则
Modbus寻址空间有256个不同地址。
0
1~47
55~248
广播地址
子节点单独地址
保留
Modbus主节点没有地址,只有子节点必须有一个地址。
该地址必须在Modbus串行总线上唯
一。
图解如下:
3.3串行链路数据帧格式
3.3.1Modbus帧描述
MODBUS协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。
特定总线或网络上
的MODBUS协议映射能够在应用数据单元(ADU)上引入一些附加域。
表3-2数据帧格式表
字段
字节数
描述
设备地址
1
BYTE型数据,对象的地址。
范围1~247。
每组蓄电池分配
一个访问地址,默认情况下组1地址为1,组2地址为组1
地址加1,以此类推。
监测多少组蓄电池,就占用连续的多
少个地址。
组1地址可以前台修改,相应组2地址也会在组
1地址上增1。
功能码
BYTE型数据。
见“命令解析”。
正常情况下发送和应答的
功能码一致,异常情况下参见“异常应答机制”。
数据区
N
校验
2
CRC16校验,校验生成函数参考附录七。
帧格式图解
在Modbus串行链路,地址域只含有子节点地址。
如前文所述,合法的子节点地址为十进制0–247。
每个子设备被赋予1–247范围中的地址。
主节点通过将子节点的地址放到报文的地址域对子节点寻址。
当子节点返回应答时,它将自己的地
址放到应答报文的地址域以让主节点知道哪个子节点在回答。
功能码指明服务器要执行的动作。
功能码后面可跟有表示含有请求和响应参数的数据域。
错误检验域是对报文内容执行"
冗余校验"
的计算结果。
根据不同的传输模式(RTUorASCII)
使用两种不同的计算方法。
4.串行传输模式RTU
它定义了报文域的位内容在线路上串行的传送。
它确定了信息如何打包为报文和解码。
Modbus串行链路上所有设备的传输模式(和串行口参数)必须相同。
4.1RTU传输模式
串行链路上第一个MODBUS执行的长度约束限制了MODBUSPDU大小(最大RS485ADU=256
字节)。
因此,对串行链路通信来说,MODBUSPDU=256-服务器地址(1字节)-CRC(2字节)=253
字节。
帧描述:
ModbusRTU帧最大为256字节。
4.2Modbus报文RTU帧
由发送设备将Modbus报文构造为带有已知起始和结束标记的帧。
这使设备可以在报文的开始接收
新帧,并且知道何时报文结束。
不完整的报文必须能够被检测到而错误标志必须作为结果被设置。
在RTU模式,报文帧由时长至少为3.5个字符时间的空闲间隔区分。
在后续的部分,这个时间区
间被称作t3.5。
整个报文帧必须以连续的字符流发送。
如果两个字符之间的空闲间隔大于1.5个字符时间,则报文帧被认为不完整应该被接收节点丢弃。
串通讯的数据帧格式图解
4.3.1///*****************串口传输设置********************
串口通信输出格式为:
1位起始位,8位数据位,1位停止位,奇校验。
默认波特率为2400bps,可调节为1200bps,2400bps,4800bps,9600bps。
编码系统:
8–位二进制
报文中每个8位字节含有两个4位十六进制字符(0–9,A–F)
BitsperByte:
1起始位
8数据位,首先发送最低有效位
1位作为奇偶校验
1停止位
偶校验是要求的,其它模式(奇校验,无校验)也可以使用。
为了保证与其它产品的最大兼
容性,同时支持无校验模式是建议的。
默认校验模式模式必须为偶校验。
注:
使用无校验要求2个停止位。
字符是如何串行传送的:
每个字符或字节均由此顺序发送(从左到右):
最低有效位(LSB)...最高有效位(MSB)
4.3.2///*****************RTU数据格式********************
下行数据结构(主机发送到从机数据协议)
起始码地址码功能码数据区CRC校验停止码
||||||
-------------------------------------------------------------------------------------------------------------
1、数据格式:
【起始码:
0xEB0x900xEB0x90】
起始码:
+从机地址码
(1)+【命令码】
(1)+【起始地址
(2)+寄存器数
(2)】+CRC16校验
(2)+停止码
(2) (括号内为字节数)
CRC16高字节在前低字节在后
2、从机地址码为0表示广播方式,所有从机都能收到并处理,否则地址码与从机地址相同时从机才响应;
因此从机地址范围:
1~247
三.上行数据结构(从机发送到主机数据协议)
起始码地址码功能码数据区CRC校验停止码
--------------------------------------------------------------------------------------------------------------
2、数据格式:
(1)+【寄存器数
(2)+N个数据】+CRC16校验
(2)+停止码
(2)
(括号内为字节数)
CRC16高字节在前低字节在后
4.4帧检验域:
循环冗余校验(CRC)
在RTU模式包含一个对全部报文内容执行的,基于循环冗余校验(CRC-CyclicalRedundancy
Checking)算法的错误检验域。
CRC域检验整个报文的内容。
不管报文有无奇偶校验,均执行此检
验。
CRC包含由两个8位字节组成的一个16位值。
CRC域作为报文的最后的域附加在报文之后。
计算后,首先附加低字节,然后是高字节。
CRC
高字节为报文发送的最后一个子节。
附加在报文后面的CRC的值由发送设备计算。
接收设备在接收报文时重新计算CRC的值,
并将计算结果于实际接收到的CRC值相比较。
如果两个值不相等,则为错误。
CRC的计算,开始对一个16位寄存器预装全1。
然后将报文中的连续的8位子节对其进行后
续的计算。
只有字符中的8个数据位参与生成CRC的运算,起始位,停止位和校验位不参与CRC
计算。
CRC的生成过程中,每个8–位字符与寄存器中的值异或。
然后结果向最低有效位(LSB)方向
移动(Shift)1位,而最高有效位(MSB)位置充零。
然后提取并检查LSB:
如果LSB为1,则寄存
器中的值与一个固定的预置值异或;
如果LSB为0,则不进行异或操作。
这个过程将重复直到执行完8次移位。
完成最后一次(第8次)移位及相关操作后,下一个8
位字节与寄存器的当前值异或,然后又同上面描述过的一样重复8次。
当所有报文中子节都运算之
后得到的寄存器忠的最终值,就是CRC。
5数据存储和传输顺序
5.116bit数据类型字节存储及传输顺序
MODBUS使用一个‘big-Endian’,对于16bit数据类型,先传输高字节,再传输低字节。
例如3A56H,先传送3AH,再传送56H。
输入寄存器和保持寄存器都是16bit寻址的寄存器。
可以认为单个寄存器的位存储顺序也是高字节在前,低子字节在后。
5.232bit数据类型字存储及传输顺序
MODBUS使用一个‘big-Endian’,对于32bit浮点型、32bit整型等32bit数据类型,先传输高16bit字,再传输低16bit字。
比如8DF377A2H数据,先传输8DF3H,再传输77A2H。
在输入寄存器和保持寄存器中,32bit数据占用连续的两个寄存器地址。
相应低地址存储高16位,高地址存放低16位。
8DF377A2H数值如果用地址12、13连个寄存器来存放,则地址12寄存器存放8DF3H,地址13寄存器存放77A2H。
5.3字符串数据类型存储及传输顺序
字符串数据传输时先传输较靠前的字符。
字符串数据类型在输入寄存器和保持寄存器存储时,顺序上较靠前的字符存储在较低地址的寄存器中。
在一个寄存器中,较靠前的8bit字符存储在高字节上,较靠后的8bit字符存储在低字节上。
5.4.布尔型数据类型存储及传输顺序
布尔型数据主要分布在离散输入寄存器中。
离散输入寄存器实际以字节为单位存储和传输。
较低地址的寄存器存储在一个字节的较低位上。
传输时,先传输较低地址的寄存器值。
存储较低地址的8个寄存器的字节先于
存储较高地址的8个寄存器的字节传输。
例如:
连续的16个离散输入寄存器的值从低地址到高地址依次为:
1,1,0,1,1,1,
0,0,1,1,0,1,1,1,0,1。
传输时分两个字节传输,先传输二进制1,1,0,1,1,
1,0,0八个位,实际存储的值为二进制00111011(注意低位先传),即3BH。
再传送1,
1,0,1,1,1,0,1八个位,实际存储的值为10111011B,即BBH。
6.MODBUS应用层协议:
命令解析和“数据区”定义
命令解析
本章中所罗列的发送接收数据内容仅指“命令结构”一节中所提到的“数据区”。
6.1.标准MODBUS命令
6.1.1.读离散输入寄存器02H
在一个远程设备中,使用该功能码读取离散量输入的1至2000连续状态。
请求PDU详细说明
了起始地址,即指定的第一个输入地址和输入编号。
从零开始寻址输入。
因此寻址输入1-16为0-15。
根据数据域的每个比特将响应报文中的离散量输入分成为一个输入。
指示状态为1=ON和0=
OFF。
第一个数据字节的