通讯原理

<< 点击显示目录 >>

主页  ModbusTCP库使用说明 > 基本知识 >

通讯原理

目录

1. 基本信息

2. 通讯原理

3. 通讯协议

3.1 通讯帧结构

 

1.基本信息

Modbus通讯协议,是Modicon PLC所指定的资料交换通讯接口标准,于1979年首先制定串行通信标准(含Modbus异步及Modbus Plus同步,在本文档中只讨论Modbus异步通讯),于1997年制定网络通信标准(Modbus/TCP)。Modbus通讯协议属于OSI所定义的通信层次的第七层应用层(Application Layer)。其通讯形式为Client/Server或者称为Master/Slave。

由于Modbus协议只在OSI层次结构的应用层中做出定义,因此,Modbus既可运行在RS232, RS485, RS422上,也可运行在以太网路上。本文档将分别从串行通讯和以太网通讯这两方面来说明Modbus的通讯原理,并且介绍在贝加莱系统平台上如何实现Modbus通讯。

 

2.通讯原理

Modbus的通讯方式是Master/Slave(主/从)方式,在串行总线上Modbus只能以单主多从的方式进行通讯,而在以太网路上Modbus的通讯方式可以支持多主多从。

在Modbus网路中,一定要有一方扮演Master,并主动发送Query Message给对应的Slave方。Slave一旦收到消息后,马上根据Query Message中的内容准备Response Message并回送给Master。Master是以地址号来区分不同的Slave,因此在同一个Modbus网路中不允许存在拥有相同地址号的Slave。

一般情况下,当PLC和仪表、电表、执行机构等设备通讯时,PLC可作为Master;而当PLC与HMI设备(触摸屏)或者上位计算机进行通讯时,PLC通常作为Slave。

 

3.通讯协议

clip0015

如图2-1所示,为每一次Master和Slave之间的询问/响应消息的基本内容。

o∆   Device Address:Slave的地址号,1~255;

o∆   Function Code:功能码;

 

Modbus规定,在Slave中必须拥有4种最基本的寄存器,即:

oCoils:可读可写开关量寄存器,长度为1 BIT;地址编号以0开始,如00003代表第3个寄存器地址。

oInput Status:只读开关量寄存器,长度为1 BIT;地址编号以1开始,如10005代表第5个寄存器地址。

oInput Registers:只读模拟量寄存器,长度为1 WORD;地址编号以3开始,如30105代表第105个寄存器地址。

oHolding Registers:可读可写模拟量寄存器,长度为1 WORD;地址编号以4开始,如41105代表第1105个寄存器地址。

 

每一条功能码包含两层意思,即,要访问的寄存器类型(如Input Registers)和操作的类型(读或者写)。以下表格罗列出了一些最常用的Modbus访问指令:

 

表2-1 Modbus常用指令表

Modbus Function Code

说明

含义

01

Read Coils Status

读 开关量寄存器(Coil 可读可写)

02

Read Input Status

读 开关量寄存器(Input 只读)

03

Read Holding Registers

读 模拟量寄存器(Holding Register 可读可写)

04

Read Input Registers

读 模拟量寄存器(Input Register 只读)

05

Force Single Coil

写 单个开关量寄存器(Coil 可读可写)

06

Preset Single Holding Register

写 多个开关量寄存器(Coil 可读可写)

15

Force Multiple Coils

写 单个模拟量寄存器(Holding Register 可读可写)

16

Preset Multiple Holding Registers

写 多个模拟量寄存器(Holding Register 可读可写)

 

∆  Start Address 和 Number Of Points/Registers:这两个内容结合在一起,代表Master需要操作Slave寄存器的起始地址以及寄存器数量。

∆  Byte Count:写入或读出寄存器数据的总长度。

∆  Data:写入或读出寄存器的数据。

∆  Error Check:校验数据,通常有CRC校验(Modbus RTU)或者LRC校验(Modbus ASCII)。由于在TCP/IP层已经存在校验机制,因此,Modbus TCP无需校验字段。

从通讯方式说,Modbus通讯属于轮询方式。因此,Slave站点越多,使用的寄存器类型越多或者需要操作的目标寄存器越不连续,Master所需要的访问指令也就越多,通讯效率会随之降低。因此,在建立Slave寄存器时要尽可能地使用一片连续的地址。

 

3.1 通讯帧结构

clip0016

Modbus TCP与Modbus RTU比较,不同之处只体现在开始字符与校验,其余部分都一样。

∆   开始/结束间隔:Modbus TCP的起始字符用6个Byte的数字表示,以定义一些TCP/IP的需要系数。说明如下:

oByte0和Byte1:用两个字节的内容组成本次通信Message的编号,以区分每次Message。一般由Master进行编号,Slave则将传来的Message照样通过Response Message回传至Master。

oByte2和Byte3:通信协议识别号码。

oByte4和Byte5:Message长度(由Device Address至Data为止),长度不能超过256。

 

∆  Device Address:Slave的站号,占用1个字节。

∆  Function Code:功能码,占用1个字节。

∆  Start Address:访问寄存器的起始地址,用2个字节来表示,如第1372号地址,表示成0x 055C。

∆  Number Of Regs:操作寄存器的个数,占用2个字节,如需要操作总共1000个寄存器,表示成0x03E8。

∆  Byte Count:占用1个字节,表示数据区长度。

Data:读取或者写入寄存器的数值,每个开关量的信息只占用1 Bit。