MODBUS协议蓄电池组在线监测.docx
- 文档编号:7245211
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:27
- 大小:44.94KB
MODBUS协议蓄电池组在线监测.docx
《MODBUS协议蓄电池组在线监测.docx》由会员分享,可在线阅读,更多相关《MODBUS协议蓄电池组在线监测.docx(27页珍藏版)》请在冰豆网上搜索。
MODBUS协议蓄电池组在线监测
蓄电池组在线监测装置
MODBUS通信协议
1MODBUS通信协议原理
2物理层接口
蓄电池组在线监测装置,采用RS485线路进行通信。
3Modbus串行数据链路层协议
3.1Modbus主站/从站协议原理
Modbus串行链路协议是一个主-从协议。
在同一时刻,只有一个主节点连接于总线,一个或多个子节点(最大编号为247)连接于同一个串行总线。
Modbus通信总是由主节点发起。
子节点在没
有收到来自主节点的请求时,从不会发送数据。
子节点之间从不会互相通信。
主节点在同一时刻只
会发起一个Modbus事务处理。
主节点以两种模式对子节点发出Modbus请求:
→在单播模式,主节点以特定地址访问某个子节点,子节点接到并处理完请求后,子节点向主节
点返回一个报文(一个'应答')。
在这种模式,一个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。
功能码
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个字符时间,则报文帧被认为不完整应该被接收节点丢弃。
串通讯的数据帧格式图解
蓄电池组在线监测装置,采用RS485线路进行通信。
串口通信输出格式为:
1位起始位,8位数据位,1位停止位,奇校验。
默认波特率为2400bps,可调节为1200bps,2400bps,4800bps,9600bps。
编码系统:
8–位二进制
报文中每个8位字节含有两个4位十六进制字符(0–9,A–F)
BitsperByte:
1起始位
8数据位,首先发送最低有效位
1位作为奇偶校验
1停止位
偶校验是要求的,其它模式(奇校验,无校验)也可以使用。
为了保证与其它产品的最大兼
容性,同时支持无校验模式是建议的。
默认校验模式模式必须为偶校验。
注:
使用无校验要求2个停止位。
字符是如何串行传送的:
每个字符或字节均由此顺序发送(从左到右):
最低有效位(LSB)...最高有效位(MSB)
一。
下行数据结构(主机发送到从机数据协议)
起始码地址码功能码数据区CRC校验停止码
||||||
-------------------------------------------------------------------------------------------------------------
1、数据格式:
【起始码:
0xEB0x900xEB0x90】
起始码:
+从机地址码
(1)+【命令码】
(1)+【起始地址
(2)+寄存器数
(2)】+CRC16校验
(2)+停止码
(2) (括号内为字节数)
CRC16高字节在前低字节在后
2、从机地址码为0表示广播方式,所有从机都能收到并处理,否则地址码与从机地址相同时从机才响应;因此从机地址范围:
1~247
三.上行数据结构(从机发送到主机数据协议)
起始码地址码功能码数据区CRC校验停止码
||||||
--------------------------------------------------------------------------------------------------------------
2、数据格式:
【起始码:
0xEB0x900xEB0x90】
起始码:
+从机地址码
(1)+【命令码】
(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八个位,实际存储的值为B,即BBH。
6.MODBUS应用层协议:
命令解析和“数据区”定义
命令解析
本章中所罗列的发送接收数据内容仅指“命令结构”一节中所提到的“数据区”。
6.1.标准MODBUS命令
读离散输入寄存器02H
在一个远程设备中,使用该功能码读取离散量输入的1至2000连续状态。
请求PDU详细说明
了起始地址,即指定的第一个输入地址和输入编号。
从零开始寻址输入。
因此寻址输入1-16为0-15。
根据数据域的每个比特将响应报文中的离散量输入分成为一个输入。
指示状态为1=ON和0=
OFF。
第一个数据字节的LSB(最低有效位)包括在询问中寻址的输入。
其它输入依次类推,一直
到这个字节的高位端为止,并在后续字节中从低位到高位的顺序。
如果返回的输入数量不是八的倍数,将用零填充最后数据字节中的剩余比特(一直到字节的高位端)。
字节数量域说明了数据的完整字节数。
响应PDU
功能码
1个字节
0x02
字节数
字节数1个字节
N*
输入状态
N*×1个字节
*N=输出数量/8,如果余数不等于0,那么N=N+1
将离散量输入状态204-197表示为十六进制字节值AC,或二进制10101100。
输入204是这个
字节的MSB,输入197是这个字节的LSB。
将离散量输入状态218-213表示为十六进制字节值35,或二进制00110101。
输入218位于左侧
第3比特,输入213是LSB。
注:
用零填充2个剩余比特(一直到高位端)。
6.1.2读输入寄存器04H
在一个远程设备中,使用该功能码读取1至大约125的连续输入寄存器。
请求PDU说明了起始
地址和寄存器数量。
从零开始寻址寄存器。
因此,寻址输入寄存器1-16为0-15。
将响应报文中的寄存器数据分成每个寄存器为两字节,在每个字节中直接地调整二进制内容。
对于每个寄存器,第一个字节包括高位比特,并且第二个字节包括低位比特。
将输入寄存器9的内容表示为两个十六进制字节值000A,或十进制10。
6.1.3读保持寄存器03H
在一个远程设备中,使用该功能码读取保持寄存器连续块的内容。
请求PDU说明了起始寄存器
地址和寄存器数量。
从零开始寻址寄存器。
因此,寻址寄存器1-16为0-15。
将响应报文中的寄存器数据分成每个寄存器有两字节,在每个字节中直接地调整二进制内容。
对于每个寄存器,第一个字节包括高位比特,并且第二个字节包括低位比特。
将寄存器108的内容表示为两个十六进制字节值022B,或十进制555。
将寄存器109-110的内
容分别表示为十六进制0000和0064,或十进制0和100。
报告从站ID11H
表6-1-4-1报告从站ID命令发送数据区
说明:
为了及时监视到设备重启,要求每次轮训数据时都必须进行一次“报
告从站ID”。
6.1.5MODBUS异常响应
当客户机设备向服务器设备发送请求时,客户机希望一个正常响应。
从主站询问中出现下列四种可能事件之一:
●如果服务器设备接收到无通信错误的请求,并且可以正常地处理询问,那么服务器设备将返回一个正常响应。
●如果由于通信错误,服务器没有接收到请求,那么不能返回响应。
客户机程序将最终处理请求的超时状态。
●如果服务器接收到请求,但是检测到一个通信错误(奇偶校验、LRC、CRC、...),那么不能返回响应。
客户机程序将最终处理请求的超时状态。
●如果服务器接收到无通信错误的请求,但不能处理这个请求(例如,如果请求读个不存在的输出或寄存器),服务器将返回一个异常响应,通知用户错误的本质特性。
异常响应报文有两个与正常响应不同的域:
功能码域:
在正常响应中,服务器利用响应功能码域来应答最初请求的功能码。
所有功能码的最高有效位(MSB)都为0(它们的值都低于十六进制80)。
在异常响应中,服务器设置功能码的MSB为1。
这使得异常响应中的功能码值比正常响应中的功能码值高十六进制80。
通过设置功能码的MSB,客户机的应用程序能够识别异常响应,并且能够检测异常码的数据域。
数据域:
在正常响应中,服务器可以返回数据域中数据或统计表(请求中要求的任何报文)。
在异常响应中,服务器返回数据域中的异常码。
这就定义了产生异常的服务器状态。
客户机请求和服务器异常响应的实例:
在这个实例中,客户机对服务器设备寻址请求。
功能码(01)用于读输出状态操作。
它将请求地址
1245(十六进制04A1)的输出状态。
值得注意的是,象输出域(0001)号码说明的那样,只读出一个输
出。
如果在服务器设备中不存在输出地址,那么服务器将返回异常码(02)的异常响应。
这就说明从站
的非法数据地址。
从下页开始异常码的列表。
异常判断流程参考图
7MODBUS对寄存器表访问模式
基本表格
对象类型
访问类型
内容
离散量输入寄存器表
单个比特
只读
/O系统提供这种类型数据
输入寄存器表
16-比特字
只读
I/O系统提供这种类型数据
保持寄存器表
16-比特字
读写
通过应用程序改变这种类型数据
8程序设计结构
当服务器对客户机响应时,它使用功能码域来指示正常(无差错)响应或者出现某种差错(称
为异常响应)。
对于一个正常响应来说,服务器仅对原始功能码响应。
对于异常响应,服务器返回一个与原始功能码等同的码,设置该原始功能码的最高有效位为逻
辑1。
MODBUS协议定义了三种PDU。
它们是:
●MODBUS请求PDU,mb_req_pdu
●MODBUS响应PDU,mb_rsp_pdu
●MODBUS异常响应PDU,mb_excep_rsp_pdu
定义mb_req_pdu为:
mb_req_pdu={function_code,request_data},其中
function_code-[1个字节]MODBUS功能码
request_data-[n个字节],这个域与功能码有关,并且通常包括诸如可变参考、变量、数据偏移
量、子功能码等信息。
定义mb_rsp_pdu为:
mb_rsp_pdu={function_code,response_data},其中
function_code-[1个字节]MODBUS功能码
response_data-[n个字节],这个域与功能码有关,并且通常包括诸如可变参考、变量、数据偏
移量、子功能码等信息。
定义mb_excep_rsp_pdu为:
mb_excep_rsp_pdu={function_code,request_data},其中
function_code-[1个字节]MODBUS功能码+0x80
exception_code-[1个字节],在下表中定义了MODBUS异常码。
9.数据类型说明:
BYTEunsignedchar
INTunsignedshort
FLOATfloat
ULONGunsignedlong
9.1附录一离散输入寄存器表功能码:
0x02
字段
起始地址
十进制
起始地址
十六进制
说明
——(读写设置告警时标)——
年
0
0000
1
BYTE
0000~9999
月
1
0001
1
BYTE
1~12
日
2
0002
1
BYTE
1~31
时
3
0003
1
BYTE
0~23
分
4
0004
1
BYTE
0~59
秒
5
0005
1
BYTE
0~59
1号板电压过高
6
0006
BYTE
0--无告警,1--告警
1号板电压过低
7
0007
BYTE
0--无告警,1--告警
1号板大板没放出电流
8
0008
BYTE
0--无告警,1--告警
1号板内阻电压异常
9
0009
BYTE
0--无告警,1--告警
1号板均充结束
10
000A
BYTE
0---无提示;1---核容放电结束提示。
在核容放电结束后
1号板核容放电结束提示
11
000B
BYTE
0---无提示;1---核容放电结束提示。
在核容放电结束后,该提示信号维持1分钟,然后自动取消。
1号温度过高
12
000C
BYTE
0--无告警,1--告警
1号板通讯故障
13
000D
BYTE
0--无告警,1--告警
2号板电压过高
14
000E
BYTE
0--无告警,1--告警
2号板电压过低
15
000F
BYTE
0--无告警,1--告警
21号板大板没放出电流
16
0010
BYTE
0--无告警,1--告警
2号板内阻电压异常
17
0011
BYTE
0--无告警,1--告警
2号板均充结束
18
0012
BYTE
0---无提示;1---放电结束提示。
2号板核容放电结束提示
19
0013
BYTE
0---无提示;1---核容放电结束提示。
2号板通讯故障
20
0014
BYTE
0--无告警,1--告警
2号温度过高
21
0015
BYTE
0--无告警,1--告警
开关量1
22
0016
BYTE
0—断,1—通
开关量2
23
0017
BYTE
0—断,1—通
开关量3
24
0018
BYTE
0—断,1—通
开关量4
25
0019
BYTE
0—断,1—通
保留
附录二保持寄存器表(读写)功能码:
0x03
字段
起始地址
十进制
起始
地址
十六
进制
字节数
(Byte)
数据类型
范围
单位
说明
——(读写设置巡检时标)——
本次测量设备ID
0
0000
2
INT
电池类型:
容量参数
1
0002
2
INT
电池类型:
电压参数
2
0004
1
BYTE
设备最大板数
3
0005
1
BYTE
0~5
1号板
测量电池数
4
0006
1
BYTE
2号板
测量电池数
5
0007
1
BYTE
电池组上限电压
6
0098
4
float
0~999
V
电池组下限电压
7
009C
4
float
0~999
V
——(读写设置巡检间隔时间)——
秒
20
0014
4
UNLLONG
——(读写快速巡检设置时间)——
秒
24
0018
4
UNLONG
——(读写设置内阻定检时标)——
时
28
001C
2
INT
——(读写设置连接内阻定检时标)——
时
30
001E
2
INT
保留
电池报警设置
单节电池上限电压
50
0032
4
float
0~999
V
单节电池下限电压
54
0036
4
float
0~999
V
电池组上限电压
58
003A
4
float
0~999
V
电池组下限电压
62
003E
4
float
0~999
V
保留
附录三输入寄存器表(只读)功能码:
0x04
字段
起始地址
十进制
起始
地址
十六
进制
字节数
(Byte)
数据类型
范围
单位
说明
——(巡检最新时间1)——
年
0
0000
1
BYTE
0000~9999
月
1
0001
1
BYTE
1~12
日
2
0002
1
BYTE
1~31
时
3
0003
1
BYTE
0~23
分
4
0004
1
BYTE
0~59
秒
5
0005
1
BYTE
0~59
-----(巡检获取测量值1)---
1号板总电压
7
000E
4
F
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MODBUS 协议 蓄电池 在线 监测