锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

电力-ModBus_RTU通讯规约1

时间:2023-03-01 07:00:00 光耦继电器ab34sac220通用型继电器e电力变送器

目录:
一、简介
1、简介
2、简单理解ModBus通信协议
3.解释表1和表2名词
二、通信信息传输过程
1.1地址码
1.2功能码
1.3数据区
三、ModBus功能码
3.1功能码02:读1路或多路开关输入状态
3.2功能码01:读1路或多路开关输出状态
3.3功能码03:读多路寄存器输入
3.4功能码05:写1路开关输出(遥控)
3.5功能码06:写单路寄存器
3.6 10功能码:写多路寄存器
3.7 功能码03:阅读事件记录
四、校验码错误(CRC校验)
五、处理通信错误信息和数据
-------------------------------------------------------
相关参考搜索我的百度网盘Modbus-国家标准-完整版,ModBus_RTU通信自定义示例和Modbus TCP_IP协议规范。
--------------------------------------------------------------------------------------------------------------
一、简介
1、简介
ModBus允许通信条约PDM施耐德、西门子、系列仪器/变送器AB、GE许多国际知名品牌的可编程顺序控制器(PLC)、RTU、SCADA系统、DCS或与第三方具有ModBus信息交换和数据传输在兼容的监控系统之间进行。
PDM只需简单地添加一套基于计算机(或工业控制机)的监控软件(如:组态王,Intouch、FIX、synall等)可形成一套电力监控系统。
ModBus通信规定有两种数据传输方式:HEX码和ASCII代码,分别ModBus-RTU和ModBus-ASCII,前者是数据传输,后者需要将数据转换为ASCII因此,码后传输ModBus-RTU协议通信效率高,处理简单,使用更多。
ModBus TCP/IP是RTU模式延伸:基于ModBus以太网

----------------------------
广泛的系统集成:
PDM系列仪器/变送器提供标准RS-485/422通信接口ModBus通信协议已广泛应用于国内外电力行业和工业控制行业是系统集成的标准。
----------------------------
通信数据的类型和格式:
以字节为单位的信息传输是异步的。主站与站之间传递的通信信息为11位字格式:
字格式(串行数据)
11位二进制
起始位
1位
数据位
8位
奇偶校验位
1位:有奇偶校验位/无:无奇偶校验位
停止位
1位:有奇偶校验位/2位:无奇偶校验位
   通讯数据(信息帧)格式
数据格式:
地址码
功能码
数据区
错误校检
数据长度:
1字节
1字节
N字节
16位CRC码(冗余循环码)
注:1)1个字节由8位二进制数组成(既8 bit)
       2)ModBus是Modicon公司的注册商标
       3)“从机”在本文件中既为PDM
----------------------------
判断Modbus一帧数据结束的方法:在RTU方式下,ModBus协议是根据3.5个字符时间内有没有接收数据来判断是否接受完成。
串行数据一般采用11位的字格式,那么3.5个字符就是3.5*11=38.5位。如果没有校验位,采用10位的字格式,那么3.5个字符就是
3.5*10=35位。
波特率是每秒传输的二进制位的个数,比如9600bps,即每1秒传输9600位,那么传输38.5个二进制位需要的时间:
38.5/9.6=4.0104167mS,Modbus_RTU要求一帧数据起始到结束至少要不小于3.5个字符时间。
先给定时器定时大概3.5个字符(更大点也可以),然后在串口的接收中断服务程序中,先将定时器的计数寄存器清零,然后重新开
始定时,如果接收的不是最后一个字节,那么在下个字节来的时候定时器就会又从零开始计数,如果后面再没有数据进来的话,定
时器就会因为定时时间到而进入定时器中断,就表示数据接收结束了。
-------------------------------------------------------
2、简单理解ModBus通信协议

对于01 16 1000 1234 ABCD这段代码的含义说明如下:
向地址 01的控制器1000地址处写入1234 。
地址域:就是指 从站的地址,比如一个仪表,这个地址就是它的通讯地址;
功能码:就是你要做的事情,通讯的目的 就是读写数据,所以 ModBus 功能码虽然很多,但是只有两个是我们常用的,就是读和
写。读的功能码是03,写的功能码是16。注意,这里的读写都是一次性写16个位,也就是一个WORD(包含数据地址与数据)
功能码如表2。
----------------------------
表1、ModBus功能码
功能码 名称 作用
1 0x01 读取线圈状态 取得一组逻辑线圈的当前状态(ON/OFF)
2 0x02 读取输入状态 取得一组开关输入的当前状态(ON/OFF)
3 0x03 读取保持寄存器 在一个或多个保持寄存器中取得当前的二进制值
4 0x04 读取输入寄存器 在一个或多个输入寄存器中取得当前的二进制值
5 0x05 强置单线圈 强置一个逻辑线圈的通断状态
6 0x06 预置单寄存器 把具体二进值装入一个保持寄存器
7 0x07 读取异常状态 取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可以将这些线圈定义,以说明从机状态,短报文适宜于迅速读取状态。
8 0x08 回送诊断校验 把诊断校验报文送从机,以对通信处理进行评鉴。
9 0x09 编程(只用于484) 使主机模拟编程器作用,修改PC从机逻辑。
10 0x0A 控询(只用于484) 可使主机与一台正在执行长程序任务从机通信,探询该从机是否已完成其操作任务,仅在含有功能码9的报文发送后,本功能码才发送。
11 0x0B 读取事件计数 可使主机发出单询问,并随即判定操作是否成功,尤其是该命令或其他应答产生通信错误时。
12 0x0C 读取通信事件记录 可是主机检索每台从机的ModBus事务处理通信事件记录(比如传送53条报文)。如果某项事务处理完成,记录会给出有关错误。
13 0x0D 编程(184/384 484 584) 可使主机模拟编程器功能修改PC从机逻辑
14 0x0E 探询(184/384 484 584) 可使主机与正在执行任务的从机通信,定期控询该从机是否已完成其程序操作,仅在含有功能13的报文发送后,本功能码才得发送。
15 0x0F 强置多线圈 强置一串连续逻辑线圈的通断。
16 0x10 预置多寄存器 把具体的二进制值装入一串连续的保持寄存器。
17 0x11 报告从机标识 可使主机判断编址从机的类型及该从机运行指示灯的状态。
18 0x12 (884和MICRO 84) 可使主机模拟编程功能,修改PC状态逻辑。
19 0x13 重置通信链路 发生非可修改错误后,是从机复位于已知状态,可重置顺序字节。
20 0x14 读取通用参数(584L) 显示扩展存储器文件中的数据信息。
21 0x15 写入通用参数(584L) 把通用参数写入扩展存储文件,或修改之。
22~64 保留作扩展功能备用
65~72 保留以备用户功能所用 留作用户功能的扩展编码
73~119 非法功能
120~127 保留 留作内部作用
128~255 保留 用于异常应答
----------------------------
表2、ModBus功能码与数据类型对应表
代码 功能 数据类型
1
2
3 整型、字符型状态字浮点型
4 整型、状态字、浮点型
5
6 整型、字符型、状态字、浮点型
8 N/A 重复“回路反馈”信息
15
16 整型、字符型、状态字、浮点型
----------------------------
表3、Modbus寄存器
寄存器种类 说明 PLC类比 举例说明
离散输入
状态DI
输入端口。通过外部设定改变输入状态,可读但不可写 DI数字量输入 面板上的按键、开关状态,电机的故障状态
线圈状态DO 输出端口。可设定端口的输出状态,也可以读取该位的输出状态,可分为两种不同的执行状态,例如保持型或边沿触发型 DO数字量
输出
电磁阀输出、电机的启停控制信号、
LED显示等
保持
寄存器AO
输出参数或保持参数,控制器运行时被设定的某些参数。
可读可写
AO模拟量 模拟量输出设定值,PID运行参数
输入
寄存器AI
输入参数。控制器运行时从外部设备获得的参数。
可读但不可写
AI模拟量输入 模拟量输入
Modbus协议定义了4种基本数据类型:只读位数据DI可读写位数据DO只读16位数据AI可读写16位数据AO这些数据分别被称为输入状态线圈状态输入寄存器保持寄存器
DI 数字输入,离散输入,一个地址一个数据位,用户只能读取它的状态,不能修改。
比如面板上的按键、开关状态,电机的故障状态
DO 数字输出,线圈输出,一个地址一个数据位,用户可以置位、复位,可以回读状态。
比如电磁阀输出,电机的启停控制信号、LED显示等
AI 模拟输入,输入寄存器,一个地址16位数据,用户只能读,不能修改,比如一个电压值的读数
AO 模拟输出,保持寄存器,一个地址16位数据,用户可以写,也可以回读,比如一个控制变频器的电流值
无论这些东西被叫做什么名字,其内容不外乎这几种,输入的信号用户只能看不能改,输出的信号用户控制,并可以回读。离散的
数据只有一位,模拟的数据有16位。
----------------------------
数据 就是我们传递的消息,这个对于我们来说才是最终目的。 1000 1234 就是我们传递的消息,是我们要告诉从站的内容,它又
分两部分:地址和内容。如果把从站比喻成一个大楼地址域就是大楼的门牌号,而数据里的地址就是大楼的房间号,换成变频器也
就是变频器的参数地址。所以这段帧 就是这样理解:告诉01大楼的1000房间,1234 往01变频器的1000参数写1234。差错校验:
是为了防止出错而做的保护,就是双方约定的各种计算方法,也就是我们在实际应用中的偶校验、奇校验、停止位等等。 这里的
ABCD 是随便写的,没任何意义。
-------------------------------------------------------
3、表1与表2名词解释
1)功能码含义
读:
01_DI:  读内部比特量输出状态,如告警、变位、故障、异常等。
02_DO:读外部开关量输入状态,如光耦输入、继电器输入等。
03_AO:读内部输出量的寄存器,如一些配置参数、定值的读取等。
04_AI:  读外部输入量的寄存器,如外部电压电流模拟量,温湿度等。
功能码01、02读到的位满8个组合成一个字节,可以用功能码04读取;线圈可以直接定义成一个位变量或者直接置某变量的某一位
写:
功能码05:写内部单个开关量状态;如光耦输出、继电器输出等。
功能码06:写内部单个寄存器的值;如更改配置参数、定值等。
功能码15:写内部多个开关量状态;如同05。
功能码16:写内部多个寄存器的值;如同06;对时是写多个寄存器,用此功能码。
11:通信超时或错误时询问用
12:询问从机检测到的各种故障、异常事件
----------------------------
2)关于实现
先定义一个变量区如: uint modbus_data [50],再定义那些保持寄存器和输入寄存器,如下:
保持寄存器:M30001-M300022  // 存放设置的参数,用 03读,16写
输入寄存器:M40001-M40028  // 存放实时数据,如启动、运行、停止、待机以及错误代码 ,用04读

#define M30001  modbus_data[0]
#define M30002  modbus_data[1]

…………

#define M30021  modbus_data[20]

#define M30022  modbus_data[21]

#define M40001  modbus_data[22]

#define M40002  modbus_data[23]

…………

#define M400021  modbus_data[48]
#define M400028  modbus_data[49]
参考:www.amobbs.com/thread-3339982-2-1.html
--------------------------------------------------------------------------------------------------------------
二、通讯信息传输过程
 
当通讯命令由发送设备(主机)发送至接收设备(从机)时,符合相应地址码的从机接收通讯命令,并根据功能码及相关要求读取信息,如果CRC校验无误,则执行相应的任务,然后把执行结果(数据)返送给主机。返回的信息中包括地址码、功能码、执行后的数据以及CRC校验码,如果CRC校验出错就不返回任何信息。
1.1 地址码
       地址码是每次通讯信息帧的第一字节(8位),从0到255。这个字节表明由用户设置地址的从机将接收由主机发送来的信息。每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送信息。当从机回送信息时,回送数据均以各自的地址码开始。主机发送的地址码表明将发送到的从机地址,而从机返回的地址码表明回送的从机地址。相应的地址码表明该信息来自于何处。
-------------------------------------------------------
1.2 功能码
       功能码是每次通讯信息帧传送的第二个字节。ModBus通讯规约可定义的功能码为1到127。PDM系列仪表/变送器仅用到其中的一部分功能码。作为主机请求发送,通过功能码告诉从机应执行什么动作。作为从机响应,从机返回的功能码与从主机发送来的功能码一样,并表明从机已响应主机并且已进行相关的操作。
 
表1 Modbus部分功能码
 
功能码
定 义
操 作(二进制)
0x02
读开关量输入
读取一路或多路开关量状态输入数据
0x01
读开关量输出
读取一路或多路开关量输出状态数据
0x03
读寄存器数据
读取一个或多个寄存器的数据
0x05
写开关量输出
控制一路继电器“合/分”输出
0x06
写单路寄存器
把一组二进制数据写入单个寄存器
0x10
写多路寄存器
把多组二进制数据写入多个寄存器
-------------------------------------------------------
1.3 数据区
数据区包括需要由从机返送何种信息或执行什么动作。这些信息可以是数据(如:开关量输入/输出、模拟量输入/输出、寄存器等等)、参考地址等。例如,主机通过功能码03告诉从机返回寄存器的值(包含要读取寄存器的起始地址及读取寄存器的长度),则返回的数据包括寄存器的数据长度及数据内容。对于不同的从机,地址和数据信息都不相同(应给出通讯信息表)。
 
PDM 系列仪表/变送器采用Modbus通讯规约,主机(PLC、RTU、PC机、DCS等)利用通讯命令(功能码03),可以任意读取其数据寄存器(其数据信息表详见附录)。PDM系列仪表/变送器的数据寄存器存储的电量多达几百个(如:电流、电压、功率、0~31次谐波分量等),并且都是16位(2字节)的二进制数据,并且高位在前;一次最多可读取寄存器数(既各种电量的数量)是50个。
 
PDM响应的命令格式是从机地址、功能码、数据区及CRC码。数据区的数据都是两个字节,并且高位在前(电能量除外)。
 
注:
1PDM-820AC/ACM/ACRPDM-800AC/ACM具有“03”、“06”、“10”功能码;
2、如果PDM采用MODBUS ASCII通讯协议,其通讯数据格式为;7个数据位,1停止位,偶校验。
--------------------------------------------------------------------------------------------------------------
三、ModBus功能码
 
3.1 功能码“02:读1路或多路开关量输入状态
 
例如:主机要读取地址为01,开关量DI1—DI4的输入状态。读取告警、变位、故障、异常等。
从机(PDM)数据寄存器的地址和数据为:
起始位地址
DI寄存器数据(16进制)
备 注
0000
0B
DI1/DI2/DI4状态为“1”,DI3状态为
“0”
主机发送的报文格式为:
主机发送
字节数
发送的信息
备 注
从机地址
1
01   
发送至地址为01的从机
功能码
1
02   
读开关量输入状态
起始BIT位
2
0000 
起始BIT位地址为0000
读数据长度
2
0004 
读取4路开关量输入状态位
CRC码
2
79C9
由主机计算得到CRC码
从机(PDM)响应返回的报文格式:
 
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章

从机响应
字节数
返回的信息
备 注
从机地址
1
01  
来自从机01
功能码
1
02   
读开关量输入状态
数据长度
1
01   
1个字节(8个BIT位)