快捷搜索:  汽车  科技

modbus通讯协议执行标准(ModBus通讯协议及应用)

modbus通讯协议执行标准(ModBus通讯协议及应用)③ 00 00 :寄存器起始地址① 01:ID② 03:功能码 帧定界 :MODBUS RTU方式下,每两个字符之间发送或者接收的时间间隔不能超过1.5倍 字符传输时间。如果两个字符时间间隔超过了3.5倍的字符传输时间,规约就认为一帧数据已经接收,新的一帧数据传输开始;(1).RTU模式-消息帧举例:×发送指令:01 03 00 00 00 02 C4 0B

1、Modbus协议介绍

modbus通讯协议执行标准(ModBus通讯协议及应用)(1)

ModBus协议规约

Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。

Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。

ModBus网络只有一个主机,所有通信都由他发出。网络可支持247个之多的远程从数控制器,但实际所支持的从机数要由所用通信设备决定。采用这个系统,各PC可以和中心主机交换信息而不影响各PC执行本身的控制任务。

2、ModBus传输方式

modbus通讯协议执行标准(ModBus通讯协议及应用)(2)

帧定界 :MODBUS RTU方式下,每两个字符之间发送或者接收的时间间隔不能超过1.5倍 字符传输时间。如果两个字符时间间隔超过了3.5倍的字符传输时间,规约就认为一帧数据已经接收,新的一帧数据传输开始;

modbus通讯协议执行标准(ModBus通讯协议及应用)(3)

(1).RTU模式-消息帧举例:

×发送指令:01 03 00 00 00 02 C4 0B

① 01:ID② 03:功能码

③ 00 00 :寄存器起始地址

④ 00 02 :读取寄存器的长度

⑤ C4 0B:16 CRC校验,低位在前,高位在后;

×回复数据:01 03 04 26 8F 41 DD 30 99

① 01:ID

② 03:功能码

③ 04:数据长度

④ 26 8F 41 DD:41dd268f数据为27.64 数据类型浮点型(Floating Point)

⑤ 30 99:16 CRC校验,低位在前,高位在后

(2).ASCII模式

modbus通讯协议执行标准(ModBus通讯协议及应用)(4)

帧定界“:”帧起始 “CR LF” 帧结束,ASCII方式用两个ASCII字符表示一个8位数据,比如16进制的3A用字符“3”和字符“A”表示。

modbus通讯协议执行标准(ModBus通讯协议及应用)(5)

ASCII模式---消息帧举例

发送指令:

3A 30 31 30 33 30 30 30 34 30 31 06 0D OA

转化成十六进制就是“:0103000401 06”,“ : ”表示起始位,01是分机地址,03是功能命令,0004寄存器起始地址;01寄存器长度,

06是LRC校验

回复数据:3A 30 31 30 33 30 32 30 31 46 34 30 35 0D 0A

转化成十六进制就是 ":01030201 F405" ," : "表示起始位,01是分机地址,03是功能命令, 02是数据字节数,01F4就是500这个数据,05是LRC校验。

(3). MODBUS TCP

Modbus数据在TCP/IP以太网上传输,支持Ethernet II和802.3两种帧格式,Modbus TCP数据帧包含报文头、功能代码和数据3部分,MBAP报文头(MBAP、Modbus Application Protocol、Modbus应用协议)分4个域,共7个字节,如图所示:

modbus通讯协议执行标准(ModBus通讯协议及应用)(6)

由于使用以太网TCP/IP数据链路层的校验机制而保证了数据的完整性,MODBUS TCP 报文中不再带有数据校验”CHECKSUM”,原有报文中的“ADDRESS”也被“UNIT ID”替代而加在MODBUS应用协议报文头中。

MODBUS TCP-消息帧举例

发送命令:19 B2 00 00 00 06 06 03 00 27 00 02

上面是modbus客户端发出的报文内容,为modbus tcp/ip协议格式,其前面的六个字节为头字节( header handle);

19 B2 00 00 00 06

19 B2 两个字节是Client发出的检验信息,Sever端只是需要将这两个字节的内容copy以后再放到response的报文的相应位子就可以了

00 00 两个字节是表示tcp/ip 的协议的modbus的协议;

00 06 两个字节表示的是header handle后面还有多长的字节,即表示的是该字节以后的字节长度(lengch) 可以看到在00 06后面还有 “06 03 00 27 00 02”六个字节,所以这两个字节表示的就是6;

PDU:“06 03 00 27 00 02”

06 一个字节表示slave address;

03 为Fuction code ;

00 27 表示Client request的寄存器地址;

00 02 表示request 寄存器的长度;(寄存器个数)

3、Modbus协议应用

我们目前所支持的功能码非常有限,主要包括:

功能码

名称

备注

01

READ COIL STATUS

读线圈寄存器

02

READ INPUT STATUS

读状态寄存器

03

READ HOLDING REGISTERS

都保持寄存器

04

READ INPUT REGISTERS

读输入寄存器

05

FORCE SINGLE COIL

写单个线圈寄存器

06

PRESET SINGLE REGISTER

写单个保持寄存器

15

FORCE MULTIPLE COILS

写多个线圈寄存器

16

FORCE MULTIPLE REGISTERS

写多个保持寄存器

举例一:读取寄存器状态

功能码: 01

数据起始地址:00001~00008

数据长度:不大于08 (因为只有8个输出继电器)

说明:读取输出继电器的状态。

数据说明:

地址

描述

说明

00001

第1个输出继电器

=1吸合 =0断开

00002

第2个输出继电器

=1吸合 =0断开

00003

第3个输出继电器

=1吸合 =0断开

00004

第4个输出继电器

=1吸合 =0断开

00005

第5个输出继电器

=1吸合 =0断开

00006

第6个输出继电器

=1吸合 =0断开

00007

第7个输出继电器

=1吸合 =0断开

00008

第8个输出继电器

=1吸合 =0断开

Modbus请求:01 01 00 00 00 08 3D CC

Modbus响应:01 01 08 00 00 00 00 00 00 00 00 34 1D

4、ModBus使用工具

1.Modscan—主要用来模拟主设备发送指令

2.Modsim----模拟从设备回复数据

3.串口调试工具

modbus通讯协议执行标准(ModBus通讯协议及应用)(7)

猜您喜欢: