<< 点击显示目录 >> 主页 ModbusTCP库使用说明 > 基本知识 > 通讯原理 |
目录
1. 基本信息
2. 通讯原理
3. 通讯协议
3.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通讯。
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。
如图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寄存器时要尽可能地使用一片连续的地址。
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。