Modbus RTU通用规约说明模板及规约配置DOC.docx
《Modbus RTU通用规约说明模板及规约配置DOC.docx》由会员分享,可在线阅读,更多相关《Modbus RTU通用规约说明模板及规约配置DOC.docx(31页珍藏版)》请在冰豆网上搜索。
![Modbus RTU通用规约说明模板及规约配置DOC.docx](https://file1.bdocx.com/fileroot1/2023-5/19/b582390c-d64e-4d42-9c5e-48ff62eb2095/b582390c-d64e-4d42-9c5e-48ff62eb20951.gif)
ModbusRTU通用规约说明模板及规约配置DOC
ModbusRTU通用规约说明、模板及规约配置
说明文档
一、ModbusRTU通用规约说明
1.1Modbus协议简介
Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(SchneiderAutomation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。
此协议支持传统的串口链路RS-232、RS-422、RS-485和以太网设备。
许多工业设备包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。
Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。
此协议定义了控制器能够认识和使用的报文结构,而不管它们是经过何种网络进行通信的。
标准的Modicon控制器使用RS232C实现串行的Modbus。
Modbus的ASCII、RTU协议规定了报文、数据的结构、询问和应答的方式,数据通讯采用主/从方式,主站发出数据请求报文,从站接收到正确报文后就可以发送数据到主站端以响应请求;主站也可以直接发报文修改从站的数据,实现双向读写。
1.2Modbus通用规约介绍
Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。
另外,Modbus采用主从问答方式收发数据,在实际使用中如果某从站站点断开后(如故障或失电),主站可以诊断出来,而当故障修复后,网络又可自动接通。
因此Modbus协议的可靠性较好。
Modbus协议在串行链路中RTU模式使用的最多,通用性很强,所以在这里仅介绍一下ModbusRTU协议即Modbus通用规约。
下表是ModbusRtu支持的功能码:
功能码
名称
作用
01
读取线圈状态
取得一组逻辑线圈的当前状态(ON/OFF)
02
读取输入状态
取得一组开关输入的当前状态(ON/OFF)
03
读取保持寄存器
在一个或多个保持寄存器中取得当前的二进制值
04
读取输入寄存器
在一个或多个输入寄存器中取得当前的二进制值
05
强置单线圈
强置一个逻辑线圈的通断状态
06
预置单寄存器
把具体二进值装入一个保持寄存器
07
读取异常状态
取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定
08
回送诊断校验
把诊断校验报文送从机,以对通信处理进行评鉴
09
编程(只用于484)
使主机模拟编程器作用,修改PC从机逻辑
10
控询(只用于484)
可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送
11
读取事件计数
可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时
12
读取通信事件记录
可是主机检索每台从机的ModBus事务处理通信事件记录。
如果某项事务处理完成,记录会给出有关错误
13
编程(184/384484584)
可使主机模拟编程器功能修改PC从机逻辑
14
探询(184/384484584)
可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送
15
强置多线圈
强置一串连续逻辑线圈的通断
16
预置多寄存器
把具体的二进制值装入一串连续的保持寄存器
17
报告从机标识
可使主机判断编址从机的类型及该从机运行指示灯的状态
18
(884和MICRO84)
可使主机模拟编程功能,修改PC状态逻辑
19
重置通信链路
发生非可修改错误后,是从机复位于已知状态,可重置顺序字节
20
读取通用参数(584L)
显示扩展存储器文件中的数据信息
21
写入通用参数(584L)
把通用参数写入扩展存储文件,或修改之
22~64
保留作扩展功能备用
65~72
保留以备用户功能所用
留作用户功能的扩展编码
73~119
非法功能
120~127
保留
留作内部作用
128~255
保留
用于异常应答
在这些功能码中较常使用的是1、2、3、4、5、6号功能码,使用它们即可实现对下位机的数字量和模拟量的读写操作。
1.3Modbus通用规约报文说明
1.3.1读可读写数字量寄存器(线圈状态):
01功能码
上位机发送报文:
[设备地址][功能码][起始寄存器地址高8位][低8位][读取的寄存器数高8位][低8位][CRC校验的低8位][高8位]
定义
设备地址
功能码
寄存器起始地址
读取数据长度
CRC校验
数据
11H
01H
0013H
0025H
CRC16
字节数
1
1
2
2
2
报文示例:
1101001300250E84
报文解析:
[11]设备地址:
在一个485总线上可以挂接多个设备,此处的设备地址表示与问询的设备通讯。
示例中为想和地址为17的(十进制的17是十六进制的11H)设备通讯。
[01]功能码:
读取数字量的功能码为01。
[0013]起始寄存器地址高8位、低8位:
表示想读取的开关量的寄存器起始地址。
比如示例中的起始地址为19。
[0025]寄存器数高8位、低8位:
表示从起始地址开始读多少个开关量。
示例中为37个开关量。
[0E84]CRC校验:
是从开头一直校验到此之前。
此处需要注意,CRC校验在命令中的高低字节的顺序和其他的相反。
下位机应答报文:
[设备地址][功能码01][返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位][高8位]
定义
设备地址
功能码
数据字节数
返回数据
CRC校验
数据
11H
01H
05H
DATA
CRC16
字节数
1
1
1
5
2
报文示例:
110105CD6BB20E1B45E6
报文解析:
[11]设备地址:
和上面相同。
[01]功能码:
和上面相同
[05]返回的字节个数:
表示数据的字节个数,也就是数据1,2...n中的n的值。
这里表示数据部分为5个字节。
[CD6BB20E1B]数据1...5:
由于每一个数据是一个8位的数,所以每一个数据表示8个开关量的值,每一位为0表示对应的开关断开,为1表示闭合。
比如示例中,CD6BB20E1B数据转换成二进制即为:
1100110101101011101100100000111000011011
27…192028无意义的高位部分置0
表示序号20(寄存器地址为19)开关闭合,21号断开,22闭合,23闭合,24断开,25断开,26闭合,27闭合...如果询问的开关量不是8的整倍数,那么最后一个字节的高位部分无意义,置为0。
[45E6]CRC校验同上。
1.3.2读只可读数字量寄存器(输入状态):
02功能码
和读取线圈状态类似,只是第二个字节的功能码不再是01H而是02H。
1.3.3写数字量(线圈状态):
05功能码
上位机发送报文:
[设备地址][功能码05][需下置的寄存器地址高8位][低8位][下置的数据高8位][低8位][CRC校验的低8位][高8位]
定义
设备地址
功能码
置位寄存器地址
下置数据
CRC校验
数据
11H
05H
00AC
FF00
CRC16
字节数
1
1
2
2
2
报文示例:
110500ACFF004E8B
报文解析:
[11]设备地址和上面的相同。
[05]功能码:
写数字量的功能码号为05。
[00AC]需下置的寄存器地址高8位,低8位:
表明了需要置位的开关的地址。
[FF00]下置的数据高8位,低8位:
表明需要下置的开关量的状态。
示例中为把该开关闭合。
注意,此处置位命令只可以是[FF00]表示闭合,[0000]表示断开,其他数值非法。
[4E8B]CRC校验同上。
注意:
此命令一条只能下置一个开关量的状态。
下位机应答报文:
报文示例:
110500ACFF004E8B
报文解析:
同上。
如果下位机执行成功,则把上位机发送的报文原样返回,否则不响应。
1.3.4读可读写模拟量寄存器(保持寄存器):
03功能码
上位机发送报文:
[设备地址][功能码03][起始寄存器地址高8位][低8位][读取的寄存器数高8位][低8位][CRC校验的低8位][高8位]
定义
设备地址
功能码
寄存器起始地址
读取数据长度
CRC校验
数据
11H
03H
006B
0003
CRC16
字节数
1
1
2
2
2
报文示例:
1103006B00037687
报文解析:
[11]设备地址和上面的相同。
[03]功能码:
读取模拟量的功能码为03。
[006B]起始寄存器地址高8位、低8位:
表示想读取的模拟量的起始地址,比如示例中的寄存器起始地址为107。
[0003]寄存器数高8位、低8位:
表示从起始地址开始读多少个模拟量。
示例中为读取3个模拟量。
注意:
在返回的信息中一个模拟量需要返回两个字节。
[7687]CRC校验同上。
下位机应答报文:
[设备地址][功能码03][返回的字节个数][数据1][数据2]...[数据n][CRC校验的低8位][高8位]
定义
设备地址
功能码
数据字节数
返回数据
CRC校验
数据
11H
03H
06H
DATA
CRC16
字节数
1
1
1
6
2
报文示例:
110306022B00000064C8BA
报文解析:
[11]设备地址:
和上面相同。
[03]功能码:
和上面相同
[06]返回的字节个数:
表示数据的字节个数,也就是数据1,2...n中的n的值。
例子中返回了3个模拟量的数据,因为一个模拟量需要2个字节所以共6个字节。
[022B00000064]数据1...6:
其中[数据1][数据2]分别是第1个模拟量的高8位和低8位,[数据3][数据4]是第2个模拟量的高8位和低8位,以此类推。
示例中返回的值分别是555,0,100。
注意:
在实际使用中,不同厂家规约可能会做改动,比如说对模拟量的处理是低字节在前,高字节在后,数据格式可分为有符号整型和无符号整型,有符号整型的又分为补码和绝对值两种方式等等,这是在实际分析报文需要注意的地方。
[C8BA]CRC校验同上。
1.3.5读只可读模拟量寄存器(输入寄存器):
04功能码
和读取保持寄存器类似,只是第二个字节的功能码不再是03H而是04H。
1.3.6写单个模拟量寄存器(保持寄存器):
06功能码
上位机发送报文:
[设备地址][命令号06][需下置的寄存器地址高8位][低8位][下置的数据高8位][低8位][CRC校验的低8位][高8位]
定义
设备地址
功能码
置位寄存器地址
下置数据
CRC校验
数据
11H
06H
0001
0003
CRC16
字节数
1
1
2
2
2
报文示例:
1106000100039A9B
报文解析:
[11]设备地址和上面的相同。
[06]功能码:
写数字量的功能码号为05。
[0001]需下置的寄存器地址高8位,低8位:
表明了需要下置的模拟量寄存器的地址。
比如示例中就是对地址为1的寄存器进行置数。
[0003]下置的数据高8位,低8位:
表明需要下置的模拟量数据。
比如示例中就把1号寄存器的值设为3。
[9A9B]CRC校验同上。
注意:
此命令一条只能下置一个模拟量的状态。
下位机应答报文:
报文示例:
1106000100039A9B
报文解析:
同上。
如果下位机执行成功,则把上位机发送的报文原样返回,否则不响应。
二、MODBUS模板规约配置
在工程现场我们经常遇到第三方设备需要进行通信,如果是特殊规约,那就需要工自研究所专门做规约与模板。
如果是标准通信规约比如说CDT-91,MODBUS-RTU,103规约等,我们就可以根据厂家要到的规约与点表,自行配置模板进行通信。
这里基于TDC9628通信工作站来主要讲述下常见的ModbusRTU通用规约的模板配置。
这里以某公司直流屏监控模块ZJK-5Modbus协议为例来说明如何制作Modbus模板。
下面是该直流屏MODBUS规约与点表。
ZJK-5MODBUS通讯规约(部分截取)
采用RS232/RS485,1位起始位8位数据位,无校验,1位停止位,波特率9600。
1、遥测量1
命令格式:
定义
地址
功能码
STARADDR
数据长度
CRC校验
数据
ADDR
03H
0000H
0016H
CRC16
字节数
1
1
2
2
2
注释:
▲ADDR为直流电源屏通讯地址,可设定(1-10);
▲数据长度为返回的数据长度,该长度不可变;
▲CRC16是从第一个字节到最后一个字节进行CRC16校验;
▲CRC16发送次序为低位在前,高位在后
返回格式:
定义
地址
功能码
长度
返回数据
CRC校验
数据
ADDR
03H
2CH
DATA
CRC16
字节数
1
1
1
44
2
DATA数据定义:
(44bytes)
字节号
名称
格式
系数
单位
01---02
1#交流A相电压
Hi-Lo
1
V
03---04
1#交流B相电压
Hi-Lo
1
V
05---06
1#交流C相电压
Hi-Lo
1
V
07---08
2#交流A相电压
Hi-Lo
1
V
09---10
2#交流B相电压
Hi-Lo
1
V
11---12
2交流C相电压
Hi-Lo
1
V
13---14
模块输出电压
Hi-Lo
0.1
V
15---16
一组电池电压
Hi-Lo
0.1
V
17---18
一段控母电压
Hi-Lo
0.1
V
19---20
二组电池电压
Hi-Lo
0.1
V
21---22
二段控母电压
Hi-Lo
0.1
V
23---24
模块输出电流
Hi-Lo
0.01
A
25---26
一组电池电流
Hi-Lo
0.01
A
27---28
一段控母电流
Hi-Lo
0.01
A
29---30
二组电池电流
Hi-Lo
0.01
A
31---32
二段控母电流
Hi-Lo
0.01
A
33---34
一段正母线对地电阻
Hi-Lo
0.1
KΩ
35---36
一段负母线对地电阻
Hi-Lo
0.1
KΩ
37---38
二段正母线对地电阻
Hi-Lo
0.1
KΩ
39---40
二段负母线对地电阻
Hi-Lo
0.1
KΩ
41---42
备用
43---44
备用
●数据类型:
带符号定点数,以原码表示.(BIT15=0表示正数,BIT15=1表示负数)
2、遥测量2
命令格式:
定义
地址
功能码
STARADDR
数据长度
CRC校验
数据
ADDR
04H
0100H
0015H
CRC16
字节数
1
1
2
2
2
返回:
定义
地址
功能码
长度
返回数据
CRC校验
数据
ADDR
04H
2AH
DATA
CRC16
字节数
1
1
1
42
2
DATA数据定义:
字节号
名称
格式
系数
单位
01---02
一组电池温度T
Hi-Lo
0.1
℃
03---04
备用
Hi-Lo
05---06
一组01节电压
Hi-Lo
0.01
V
07---08
一组02节电压
Hi-Lo
0.01
V
09---10
一组03节电压
Hi-Lo
0.01
V
11---12
一组04节电压
Hi-Lo
0.01
V
13---14
一组05节电压
Hi-Lo
0.01
V
15---16
一组06节电压
Hi-Lo
0.01
V
17---18
一组07节电压
Hi-Lo
0.01
V
19---20
一组08节电压
Hi-Lo
0.01
V
21---22
一组09节电压
Hi-Lo
0.01
V
23---24
一组10节电压
Hi-Lo
0.01
V
25---26
一组11节电压
Hi-Lo
0.01
V
27---28
一组12节电压
Hi-Lo
0.01
V
29---30
一组13节电压
Hi-Lo
0.01
V
31---32
一组14节电压
Hi-Lo
0.01
V
33---34
一组15节电压
Hi-Lo
0.01
V
35---36
一组16节电压
Hi-Lo
0.01
V
37---38
一组17节电压
Hi-Lo
0.01
V
39---40
一组18节电压
Hi-Lo
0.01
V
41---42
一组19节电压
Hi-Lo
0.01
V
数据类型:
带符号定点数,以原码表示.(BIT15=0表示正数,BIT15=1表示负数)
3、遥信量
命令格式:
定义
地址
功能码
STARADDR
长度
CRC校验
数据
ADDR
02H
0200H
0040H
CRC16
字节数
1
1
2
2
2
返回:
定义
地址
功能码
长度
返回数据
CRC校验
数据
ADDR
02H
08H
DATA
CRC16
字节数
1
1
1
8
2
数据定义:
(8Bytes)
字节
位号
内容
报警
字节
位号
内容
报警
1
Bit0
1#交流电源故障
Y
2
BIT0
1组单只电池欠压
Y
Bit1
2#交流电源故障
Y
BIT1
2组电池过压
Y
Bit2
蓄电池充电/放电
N
BIT2
2组电池欠压
Y
Bit3
模块运行状态浮充/均充
N
BIT3
2组单只电池过压
Y
Bit4
避雷器故障
Y
BIT4
2组单只电池欠压
Y
Bit5
1组电池过压
Y
BIT5
一段控母过压
Y
Bit6
1组电池欠压
Y
BIT6
一段控母欠压
Y
Bit7
1组单只电池过压
Y
BIT7
二段控母过压
Y
3
BIT0
二段控母欠压
Y
4
BIT0
1#电池监测仪通讯中断
Y
BIT1
一段母线绝缘降低
Y
BIT1
2#电池监测仪通讯中断
Y
BIT2
二段母线绝缘降低
Y
BIT2
3#电池监测仪通讯中断
Y
BIT3
一组电池熔断器断
Y
BIT3
4#电池监测仪通讯中断
Y
BIT4
二组电池熔断器断
Y
BIT4
5#电池监测仪通讯中断
Y
BIT5
模块通讯中断
Y
BIT5
数据采集模块通讯中断
Y
BIT6
直流输出开关跳闸
Y
BIT6
绝缘选线装置通讯中断
Y
BIT7
模块故障
Y
BIT7
交流采集模块通讯中断
Y
注释:
▲在画有“/”的位置表示该位为预留位,系统发送时该位置0;
▲在标有“Y”的位置表示该位为告警信息;
▲数据位为1时表示该位信息发生;
▲在标有“N”的位置表示该位为非告警信息,0表示前一状态,1表示后一状态。
这里只部分截取了该直流屏的部分规约说明与重要遥测遥信等点表。
2.1新建模板
打开该工程的TDC9628工程→模板管理→增加→增加模板
图1新增模板
图2模板定义
2.2增加模板信息
模板名称——ZJK-5直流屏(名称可以自行定义)
模板类型——实际设备(需选择)
增加遥测量:
项目名称——遥测量(需自行填写)
项目类型——遥测数据(需选择)
数据数量——由该直流屏规约中遥测量1和2中可看出需定义43个(16H+15H),在实际现场应用中,我们只需要把重要的直流屏信息上送,并不是需要有多少遥测就做多少。
这里为了说明,把遥测量1、2全部做进模板中。
数据宽度——16
数据类型——自定义
完善上述信息后,点击加入,此时就增加了遥测量的信息,如下图3。
图3增加遥测量后的模板
增加遥信量:
项目名称——遥信量(需自行填写)
项目类型——遥信数据(需选择)
数据数量——由该直流屏规约中遥信数据长度为40H,即64个。
在实际现场应用中,我们只需要把重要的直流屏信息上送,并不是需要有多少遥信就做多少。
这里为了说明,只做了前4个字节即32个遥信量。
数据宽度——1
数据类型——自定义
完善上述信息后,点击加入,此时就增加了遥信量的信息,如下图4。
图4增加遥信量后的模板
增加通信状态:
项目名称——通信状态(需自行填写)
项目类型——通讯状态(需选择)
数据数量——1
数据宽度——16
数据类型——自定义
完善上述信息后,点击加入,此时就增加了通信状态的信息,如图5。
图5增加通信状态后的模板
2.3完善模板信息
到这里把模板的信息增加完成了,接下来需要根据实际的规约点表来进行修改模板中相应遥测遥信点号的名称。
图6数据定义
双击对应序号遥测(信)量——弹出数据定义对话框——修改名称——点击修改,即可,见图6。
把遥测遥信通信状态都修改完成后,勾选“我已经定义好了,可以存起来”——点击“保存”,然后相应的模板就会在模板管理中最后一个,再点击“退出”,即可。
如图7
图7模板新建完成
三、ModbusRUT通用规约配置
3.1规约文件说明
规约名称:
MODBUS-RTU通用规约
类名:
PMODBUSRTU
常量名:
PMODBUSRTU
文件名:
PMODBUSRTU.h,PMODBUSRTU.cpp
3.2通讯参数说明
通讯口:
RS485/RS232
波特率:
随装置
帧格式:
随装置
通讯方式:
问答式
串口超时:
150ms
链路超时:
150ms
3.3模板配置说明
根据具体厂家实际装置配置