基于tcp的modbus详解
- 格式:pdf
- 大小:252.28 KB
- 文档页数:30
modbus tcp 通讯原理Modbus TCP通讯原理引言:Modbus是一种常见的工业通信协议,用于实现设备之间的数据交换。
Modbus TCP是Modbus协议在TCP/IP网络上的应用。
本文将介绍Modbus TCP通讯原理,包括通讯方式、数据帧结构以及通讯流程等内容。
一、Modbus TCP通讯方式Modbus TCP采用了主从式通讯方式,其中主站负责发起通讯请求,而从站则负责响应请求并返回数据。
主站可以是一个上位机或者其他网络设备,而从站则是连接在网络中的各个Modbus设备。
二、Modbus TCP数据帧结构Modbus TCP数据帧由6个部分组成,分别是事务标识符、协议标识符、长度字段、单元标识符、功能码和数据。
具体结构如下:1. 事务标识符(Transaction Identifier):用于标识通讯的事务,主站和从站通过该字段进行通讯的匹配。
2. 协议标识符(Protocol Identifier):用于标识所使用的协议,对于Modbus TCP来说,该字段的值为0。
3. 长度字段(Length):指示了数据帧的长度,包括单元标识符、功能码和数据。
4. 单元标识符(Unit Identifier):用于标识从站的地址,主站通过该字段将请求发送给特定的从站。
5. 功能码(Function Code):用于指示请求的类型,包括读取数据、写入数据、读取寄存器等功能。
6. 数据(Data):根据功能码的不同,该字段可以包含读取或写入的数据。
三、Modbus TCP通讯流程Modbus TCP通讯流程主要包括请求和响应两个过程,具体流程如下:1. 请求过程:a) 主站发送一个请求数据帧给从站,包括事务标识符、协议标识符、长度字段、单元标识符、功能码和相关数据。
b) 从站接收到请求后进行处理,根据功能码执行相应的操作。
c) 从站将处理结果封装成一个响应数据帧发送给主站,包括事务标识符、协议标识符、长度字段、单元标识符和相关数据。
ModbusTcp协议详解Modbus TCP协议详解一、概述Modbus TCP是一种基于TCP/IP网络的通信协议,用于在工业自动化系统中实现设备之间的通信。
它是Modbus协议的一种变体,具有简单、高效、可靠的特点,被广泛应用于工业控制领域。
二、协议结构1. 物理层Modbus TCP协议使用以太网作为物理层传输媒介,支持10Mbps和100Mbps的传输速率。
数据通过以太网的数据链路层进行传输。
2. 传输层Modbus TCP协议使用TCP作为传输层协议,确保数据的可靠传输。
TCP提供了可靠的连接、流量控制和拥塞控制机制,保证了数据的完整性和准确性。
3. 应用层Modbus TCP协议的应用层采用了Modbus协议的数据格式和功能码。
数据格式包括消息头和消息体两部分。
消息头包括以下字段:- 事务标识符(Transaction Identifier):用于标识请求和响应之间的对应关系。
- 协议标识符(Protocol Identifier):用于标识Modbus协议。
- 长度字段(Length):表示消息体的长度。
- 单元标识符(Unit Identifier):用于标识设备。
消息体包括以下字段:- 功能码(Function Code):用于指定请求或响应的功能。
- 数据字段(Data):包含具体的请求或响应数据。
三、功能码Modbus TCP协议定义了一系列功能码,用于实现不同的功能。
常用的功能码包括:1. 读取线圈状态(Read Coils):用于读取线圈的状态(开关量)。
2. 读取离散输入状态(Read Discrete Inputs):用于读取离散输入的状态(开关量)。
3. 读取保持寄存器(Read Holding Registers):用于读取保持寄存器的值(16位整数)。
4. 读取输入寄存器(Read Input Registers):用于读取输入寄存器的值(16位整数)。
5. 写单个线圈(Write Single Coil):用于写入单个线圈的状态。
Modbus TCP是一种基于TCP/IP网络的通信协议,用于在工业自动化系统中实现设备间的数据交换。
以下是Modbus TCP通讯协议的详细解释和一个实例演示:1. Modbus TCP协议概述:- Modbus TCP是Modbus协议的一种变体,使用TCP/IP作为传输层协议,通过以太网进行数据通信。
- 它基于客户端-服务器架构,其中客户端发起数据请求,而服务器响应请求并提供数据。
- Modbus TCP使用简单的请求-响应模型,支持读取和写入数据寄存器、线圈、输入寄存器和离散输入等。
2. Modbus TCP帧结构:- Modbus TCP帧由标头和数据部分组成。
- 标头包括事务标识符、协议标识符、长度字段和单元标识符。
- 数据部分包含功能码、数据和错误检查字段。
3. Modbus TCP功能码:- Modbus TCP支持多种功能码用于不同的操作,如读取、写入、读取多个寄存器等。
- 常见的功能码包括读取线圈状态(0x01)、读取输入状态(0x02)、读取保持寄存器(0x03)、写单个寄存器(0x06)等。
4. Modbus TCP实例演示:- 假设有一个Modbus TCP服务器设备,IP地址为192.168.0.100,端口号为502。
- 客户端想要读取该设备上的保持寄存器中的数据。
- 客户端发送一个读取保持寄存器的请求帧,包括事务标识符、协议标识符、长度字段、单元标识符和功能码等。
- 服务器接收到请求后,解析请求帧,根据功能码读取保持寄存器中的数据。
- 服务器将读取到的数据封装成响应帧,并发送给客户端。
- 客户端接收到响应帧后,解析响应帧,提取出所需的数据。
Modbus TCP协议是一种常用的工业自动化通信协议,广泛应用于控制系统、仪表设备和传感器等。
通过使用Modbus TCP,不同的设备可以方便地进行数据交换和远程控制。
在实际应用中,可以使用各种编程语言和开发工具来实现Modbus TCP通讯,如Python、C#、Java等。
modbus tcp协议报文解析Modbus TCP协议报文解析一、引言Modbus TCP是一种通信协议,用于在TCP/IP网络上传输数据。
它是Modbus协议的一种变体,是工业自动化领域广泛应用的协议之一。
本文将对Modbus TCP协议报文进行解析,以帮助读者更好地理解该协议的工作原理。
二、Modbus TCP协议概述Modbus TCP协议是基于TCP/IP网络的Modbus协议的一种实现。
相比于传统的串行Modbus协议,Modbus TCP协议采用了基于以太网的通信方式,通过TCP/IP网络传输数据。
它能够实现实时的数据传输,具有高可靠性和灵活性的特点。
三、Modbus TCP协议报文结构Modbus TCP协议报文的结构包括事务标识符、协议标识符、长度字段、单元标识符、功能码、数据域和CRC校验字段。
下面分别进行解析:1. 事务标识符(Transaction Identifier):用于标识不同的事务,通常是一个16位的无符号整数。
2. 协议标识符(Protocol Identifier):用于标识Modbus协议的版本,通常是一个16位的无符号整数。
3. 长度字段(Length):用于标识整个报文的长度,通常是一个16位的无符号整数。
4. 单元标识符(Unit Identifier):用于标识Modbus设备的地址,通常是一个8位的无符号整数。
5. 功能码(Function Code):用于标识报文的类型,通常是一个8位的无符号整数。
不同的功能码表示不同的操作,如读取数据、写入数据等。
6. 数据域(Data):用于存放具体的数据,其格式和长度根据功能码的不同而有所不同。
7. CRC校验字段(Cyclic Redundancy Check):用于校验报文的完整性,以确保数据的准确传输。
四、Modbus TCP协议报文示例下面是一个Modbus TCP协议报文的示例:事务标识符:0x0001协议标识符:0x0000长度字段:0x0007单元标识符:0x01功能码:0x03数据域:0x0000 0x0001CRC校验字段:0xC7D5该报文表示的是对单元标识符为0x01的Modbus设备进行读取数据操作,读取的数据地址为0x0000,读取的数据长度为1个字。
modbustcp实例
以下是一个基于Modbus TCP的实例:
PLC作为服务器,IP地址为192.168.6.101,端口号为502。
电脑作为客户端,通过该IP和端口号连接PLC,并进行数据监控。
在数据监控界面,可以查看和读取不同区域(如X、Y、M、D等)的数据。
通过一个自己编写的C#程序,可以实现与PLC的连接和数据的读写。
程序可以读取PLC中不同区域的数据,例如X区的信号状态、Y区的输出状态、M区的内部状态等,同时也可以写入数据到PLC的不同区域,实现对PLC的控制。
在演示过程中,展示了如何连续读取和写入多个数据,并通过数据监控界面实时验证操作的结果。
同时,还说明了如何同时写入多个值,比如在D区写入一组数据,并通过程序读取验证。
总的来说,TCP-Modbus通信是一种高效的方式,通过它可以轻松实现与PLC的数据交互和控制。
通过编写程序,并使用相关的类库,能够更加灵活地操作PLC,实现各种功能。
modbus tcp协议报文解析
摘要:
1.Modbus TCP协议简介
2.Modbus TCP协议报文结构
3.Modbus TCP协议报文解析
4.Modbus TCP协议应用场景
正文:
Modbus TCP协议是一种基于TCP/IP协议的通信协议,主要用于工业自动化和控制领域中的设备通信。
它是在Modbus RTU协议基础上发展而来,相较于Modbus RTU协议,Modbus TCP协议具有更快的传输速度和更远的传输距离。
Modbus TCP协议报文结构包括:起始符、长度域、控制域、地址域、数据域、校验域和结束符。
其中,起始符和结束符用于标识报文的开始和结束;长度域表示报文的长度;控制域用于标识Modbus TCP协议的类型;地址域用于标识通信设备的身份;数据域用于传输实际数据;校验域用于校验数据传输的正确性。
Modbus TCP协议报文解析主要包括以下几个方面:首先,解析起始符和结束符,确定报文的边界;其次,解析长度域,获取报文的长度;接着,解析控制域,识别Modbus TCP协议的类型;然后,解析地址域,获取通信设备的身份;最后,解析数据域和校验域,确保数据传输的正确性。
Modbus TCP协议广泛应用于工业自动化、能源管理、智能交通等领域。
例如,在智能工厂中,Modbus TCP协议可用于实现设备之间的通信,实现生产过程的自动化控制;在智能交通中,Modbus TCP协议可用于实现交通信号控制、智能路灯控制等。
modbus tcp协议报文解析摘要:一、Modbus TCP 协议简介二、Modbus TCP 报文结构1.请求报文结构2.响应报文结构三、Modbus TCP 报文解析实例四、总结正文:一、Modbus TCP 协议简介Modbus TCP 协议是一种用于工业自动化领域的通信协议,它基于TCP/IP 协议栈,并在其基础上增加了Modbus 应用层协议。
Modbus TCP 协议主要用于实现设备之间的通信,例如PLC、PAC 以及各种传感器和执行器等。
通过Modbus TCP 协议,设备可以相互传输数据和控制命令,从而实现对工业自动化过程的监控和控制。
二、Modbus TCP 报文结构Modbus TCP 报文分为请求报文和响应报文两种。
1.请求报文结构请求报文由请求头和请求数据组成,具体结构如下:- 事务处理标识符:用于区分不同的通信数据报文,每次通信后加1。
- 协议标识符:表示Modbus 协议。
- 数据长度:指示接下来数据的长度,单位为字节。
- 设备地址:用于标识连接在串行线或网络上的远程服务端的地址。
- 功能码:表示请求的操作类型,例如读取保持寄存器数据。
- 起始地址:指示要读取的寄存器数据的起始地址。
- 寄存器数量:表示要读取的寄存器数据的数量。
2.响应报文结构响应报文由响应头和响应数据组成,具体结构如下:- 事务处理标识符:与请求报文中的事务处理标识符保持一致。
- 协议标识符:与请求报文中的协议标识符保持一致。
- 数据长度:指示接下来数据的长度,单位为字节。
- 设备地址:与请求报文中的设备地址保持一致。
- 功能码:与请求报文中的功能码保持一致。
如有错误,功能码将返回80h。
- 数据字节长度:指示接下来数据的字节长度。
- 响应数据:根据请求操作类型返回相应的数据值。
三、Modbus TCP 报文解析实例假设我们要通过Modbus TCP 协议读取一个保持寄存器的值,请求报文和响应报文的结构如下:请求报文:- 事务处理标识符:1- 协议标识符:00 00- 数据长度:06- 设备地址:09- 功能码:03- 起始地址:00 00- 寄存器数量:01响应报文:- 事务处理标识符:1- 协议标识符:00 00- 数据长度:05- 设备地址:09- 功能码:03- 数据字节长度:02- 响应数据:12 34从上述实例中可以看出,请求报文中的事务处理标识符、协议标识符、设备地址、功能码和起始地址分别表示通信事务的处理标识、协议类型、设备地址、操作类型和读取数据的起始地址。
【ModbusTCP协议详解】内容有点多,但讲得很详细!简介Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。
1996年施耐德公司推出基于以太网TCP/IP的Modbus 协议:ModbusTCP。
Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型。
标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。
ModbusTCP数据帧ModbusTCP的数据帧可分为两部分:MBAP+PDU。
报文头MBAPMBAP为报文头,长度为7字节,组成如下:事务处理标识协议标识长度单元标识符2字节2字节2字节1字节内容解释事务处理标识可以理解为报文的序列号,一般每次通信之后就要加1以区别不同的通信数据报文。
协议标识符00 00表示ModbusTCP协议。
长度表示接下来的数据长度,单位为字节。
单元标识符可以理解为设备地址。
帧结构PDUPDU由功能码+数据组成。
功能码为1字节,数据长度不定,由具体功能决定。
功能码Modbus的操作对象有四种:线圈、离散输入、保持寄存器、输入寄存器。
对象含义线圈PLC的输出位,开关量,在Modbus中可读可写离散量PLC的输入位,开关量,在Modbus中只读输入寄存器PLC中只能从模拟量输入端改变的寄存器,在Modbus中只读保持寄存器PLC中用于输出模拟量信号的寄存器,在Modbus中可读可写根据对象的不同,Modbus的功能码有:功能码含义0x01 读线圈0x05 写单个线圈0x0F 写多个线圈0x02 读离散量输入0x04 读输入寄存器0x03 读保持寄存器0x06 写单个保持寄存器0x10 写多个保持寄存器说明更详细的表代码中文名称英文名位操作/字操作操作数量01 读线圈状态READ COIL STATUS 位操作单个或多个02 读离散输入状态READ INPUT STATUS 位操作单个或多个03 读保持寄存器READ HOLDING REGISTER 字操作单个或多个04 读输入寄存器READ INPUT REGISTER 字操作单个或多个05 写线圈状态WRITE SINGLE COIL 位操作单个06 写单个保持寄存器WRITE SINGLE REGISTER 字操作单个15 写多个线圈WRITE MULTIPLE COIL 位操作多个16 写多个保持寄存器WRITE MULTIPLE REGISTER 字操作多个PDU详细结构0x01:读线圈在从站中读1~2000个连续线圈状态,ON=1,OFF=0•请求:MBAP 功能码起始地址H 起始地址L 数量H 数量L(共12字节)•响应:MBAP 功能码数据长度数据(一个地址的数据为1位)•如:在从站0x01中,读取开始地址为0x0002的线圈数据,读0x0008位•00 01 00 00 00 06 01 01 00 02 00 08•回:数据长度为0x01个字节,数据为0x01,第一个线圈为ON,其余为OFF•00 01 00 00 00 04 01 01 01 010x05:写单个线圈将从站中的一个输出写成ON或OFF,0xFF00请求输出为ON,0x000请求输出为OFF•请求:MBAP 功能码输出地址H 输出地址L 输出值H 输出值L (共12字节)•响应:MBAP 功能码输出地址H 输出地址L 输出值H 输出值L (共12字节)•如:将地址为0x0003的线圈设为ON•00 01 00 00 00 06 01 05 00 03 FF 00•回:写入成功•00 01 00 00 00 06 01 05 00 03 FF 000x0F:写多个线圈将一个从站中的一个线圈序列的每个线圈都强制为ON或OFF,数据域中置1的位请求相应输出位ON,置0的位请求响应输出为OFF•请求:MBAP 功能码起始地址H 起始地址L 输出数量H 输出数量L 字节长度输出值H 输出值L•响应:MBAP 功能码起始地址H 起始地址L 输出数量H 输出数量L0x02:读离散量输入从一个从站中读1~2000个连续的离散量输入状态•请求:MBAP 功能码起始地址H 起始地址L 数量H 数量L(共12字节)•响应:MBAP 功能码数据长度数据(长度:9+ceil(数量/8))•如:从地址0x0000开始读0x0012个离散量输入•00 01 00 00 00 06 01 02 00 00 00 12•回:数据长度为0x03个字节,数据为0x01 04 00,表示第一个离散量输入和第11个离散量输入为ON,其余为OFF•00 01 00 00 00 06 01 02 03 01 04 000x04:读输入寄存器从一个远程设备中读1~2000个连续输入寄存器•请求:MBAP 功能码起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)•响应:MBAP 功能码数据长度寄存器数据(长度:9+寄存器数量×2)•如:读起始地址为0x0002,数量为0x0005的寄存器数据•00 01 00 00 00 06 01 04 00 02 00 05•回:数据长度为0x0A,第一个寄存器的数据为0x0c,其余为0x00•00 01 00 00 00 0D 01 04 0A 00 0C 00 00 00 00 00 00 00 00 0x03:读保持寄存器从远程设备中读保持寄存器连续块的内容•请求:MBAP 功能码起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)•响应:MBAP 功能码数据长度寄存器数据(长度:9+寄存器数量×2)•如:起始地址是0x0000,寄存器数量是 0x0003•00 01 00 00 00 06 01 03 00 00 00 03•回:数据长度为0x06,第一个寄存器的数据为0x21,其余为0x00•00 01 00 00 00 09 01 03 06 00 21 00 00 00 000x06:写单个保持寄存器在一个远程设备中写一个保持寄存器•请求:MBAP 功能码寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节)•响应:MBAP 功能码寄存器地址H 寄存器地址L 寄存器值H 寄存器值L(共12字节)•如:向地址是0x0000的寄存器写入数据0x000A•00 01 00 00 00 06 01 06 00 00 00 0A•回:写入成功•00 01 00 00 00 06 01 06 00 00 00 0A0x10:写多个保持寄存器在一个远程设备中写连续寄存器块(1~123个寄存器)•请求:MBAP 功能码起始地址H 起始地址L 寄存器数量H 寄存器数量L 字节长度寄存器值(13+寄存器数量×2)•响应:MBAP 功能码起始地址H 起始地址L 寄存器数量H 寄存器数量L(共12字节)•如:向起始地址为0x0000,数量为0x0001的寄存器写入数据,数据长度为0x02,数据为0x000F•00 01 00 00 00 09 01 10 00 00 00 01 02 00 0F•回:写入成功•00 01 00 00 00 06 01 10 00 00 00 01Modbus TCP 示例报文ModBusTcp与串行链路Modbus的数据域是一致的,具体数据域可以参考串行Modbus。
modbus tcp数据报文结构详解MODBUS TCP数据报文结构详解1. 简介MODBUS是一种通信协议,常用于工业自动化系统中的设备间通信。
MODBUS TCP是基于TCP/IP网络的MODBUS协议的一种实现方式。
本文将详细解释MODBUS TCP数据报文的结构。
2. MODBUS TCP概述MODBUS TCP使用TCP作为传输层协议,通过以太网传输数据。
它使用简单易懂的ASCII码或二进制格式进行通信,并采用主从架构实现设备间的数据交换。
3. 数据报文结构MODBUS TCP数据报文的结构包括: - 事务标识符(TID):用于标识每个请求/响应事务的唯一标识符。
- 协议标识符(PID):指示MODBUS TCP协议的标识号。
- 长度字段:指示数据报文的长度(以字节为单位),不包括TID和PID字段。
- 单元标识符(UID):用于标识设备的唯一标识符。
- 功能码(FC):指示报文的操作类型,如读取寄存器、写入寄存器等。
- 数据字段:根据功能码的不同,包含特定的数据信息。
4. 报文格式MODBUS TCP数据报文的格式如下:[TID] [PID] [长度字段] [UID] [FC] [数据字段]其中,数据字段的格式根据不同的功能码而变化。
5. 功能码MODBUS TCP定义了一系列功能码,用于表示不同的操作。
常见的功能码包括: - 读取线圈状态(FC 01):读取线圈的开关状态。
- 读取输入状态(FC 02):读取输入寄存器的状态。
- 读取保持寄存器(FC 03):读取保持寄存器的值。
- 写单个线圈(FC 05):设置单个线圈的开关状态。
- 写单个保持寄存器(FC 06):设置单个保持寄存器的值。
6. 示例以下是一个示例的MODBUS TCP数据报文:TID: 0x0001PID: 0x0000长度字段: 0x0006UID: 0x01FC: 0x03数据字段: 0x000A 0x000B上述报文表示读取设备ID为1的设备的保持寄存器的值。
开放型MODBUS-TCP规范(中文版)开放型Modbus/TCP规范修订版1.0,1999年3月29日目录目录 (2)1.该规范的发展概况 (3)2.概述 (3)2.1面向连接.32.2数据编码42.3参考编号的解释 (4)2.4隐含长度基本原则 (5)3.一致性等级概述 (5)3.1类型0 (5)3.2类型1 (5)3.3类型2 (6)3.4机器/厂家/网络的特殊功能 (7)4.协议结构 (7)5.一致性等级的协议参考值 (8)5.1类型0指令详述 (9)5.1.1读乘法寄存器(FC3) (9)5.1.2写乘法寄存器(FC16) (9)5.2类型1指令详述 (10)5.2.1读线圈(FC1) (10)5.2.2读离散输入(FC2) (10)5.2.3读输入寄存器(FC4) (11)5.2.4写线圈(FC5) (11)5.2.5写单一寄存器(FC6) (12)5.2.6读异常状态字(FC7) (12)5.3类型2指令详述 (13)5.3.1强制多点线圈(FC15) (13)5.3.2读一般参考值(FC20) (14)5.3.3写一般参考值(FC21) (15)5.3.4掩模写寄存器(FC22) (16)5.3.5读/写寄存器(FC23) (16)5.3.6读FIFO队列(FC24) (17)6.异常代码 (17)附录 (19)A.客户机和服务器应用指导 (19)A.1客户机设计 (19)A.2服务器设计 (20)A.2.1多线程服务器20A.2.2单线程服务器 (21)A.3必需的及期望的性能.22B.非指令数据的编码 (23)B.1指令字中的比特数 (23)B.2多指令字变量 (24)B.2.1984数据类型 (24)B.2.2IEC-1131数据类型 (25)该规范的发展概况原始版本1997年9月3日作为公共评论的草案。
再版1999年3月29日,即修订版1.0。
没有大的技术改动,仅作了补充说明。
增加了附录A和B作为对一些常用执行问题的回应。
该MODBUS/TCP规范在万维网上公开发行。
它表明开发者的意愿是把它作为工业自动化领域具有互用性的标准。
既然MODBUS和MODBUS/TCP作为事实上的“实际”标准,而且很多生产商已经实现了它的功能,此规范主要是阐述在互连网上具有普遍可用性的基于TCP通讯协议的MODBUS报文的特殊编码。
2.概述MODBUS/TCP是简单的、中立厂商的用于管理和控制自动化设备的MODBUS系列通讯协议的派生产品。
显而易见,它覆盖了使用TCP/IP协议的“Intranet”和“Internet”环境中MODBUS 报文的用途。
协议的最通用用途是为诸如PLC’s,I/O模块,以及连接其它简单域总线或I/O 模块的网关服务的。
MODBUS/TCP协议是作为一种(实际的)自动化标准发行的。
既然MODBUS已经广为人知,该规范只将别处没有收录的少量信息列入其中。
然而,本规范力图阐明MODBUS中哪种功能对于普通自动化设备的互用性有价值,哪些部分是MODBUS作为可编程的协议交替用于P LC’s的“多余部分”。
它通过将配套报文类型“一致性等级”,区别那些普遍适用的和可选的,特别是那些适用于特殊设备如PLC’s的报文。
2.1面向连接在MODBUS中,数据处理传统上是无国界的,使它们对由噪音引起的中断有高的抵抗力,而且在任一端只需要最小的维护信息。
编程操作,另一方面,期望一种面向连接的方法。
这种方法对于简单变量通过唯一的“登录”符号完成,对于Modbus Plus变量,通过明确的“程序路径”容量来完成,而“程序路径”容量维持了一种双向连接直到被彻底击穿。
MODBUS/TCP处理两种情况。
连接在网络协议层很容易被辨认,单一的连接可以支持多个独立的事务。
此外,TCP允许很大数量的并发连接,因而很多情况下,在请求时重新连接或复用一条长的连接是发起者的选择。
熟悉MODBUS的开发者会感到惊讶:为什么面向连接TCP协议比面向数据报的UDP要应用广泛。
主要原因是通过封装独立的“事务”在一个连接中,此连接可被识别,管理和取消而无须请求客户和服务器采用特别的动作。
这就使进程具有对网络性能变化的适应能力,而且容许安全特色如防火墙和代理可以方便的添加。
类似的推理被最初的万维网的开发者所采用,他们选用TCP及端口80去实现一个作为单一事务的最小的环球网询问。
2.2数据编码MODBUS采用“big-endian”来表示地址和数据对象。
这就意味着当一个数字表示的数量大于所传输的单一字节,最大有效字节将首先被发送。
例如:16-bits0x1234将为0x120x3432-bits0x12345678L将为0x120x340x560x782.3参考编号的解释MODBUS将其数据模型建立在一系列具有不同特征的表的基础之上。
这四个基本表如下离散输入单比特,由I/O系统提供,只读离散输出单比特,由应用程序更改,读写输入寄存器16比特,数值,由I/O系统提供,只读输出寄存器16比特,数值,由应用程序更改,读写输入和输出之间以及可寻址位和可寻址代码的数据对象之间的差别并不意味着任何应用性能的不同。
如果这是我们所讨论的目标机械的最自然的解释,那么认为所有的四个基本表是相互覆盖的看法也是非常普通而完全可以接受的。
对于每一个基本表,协议允许单独选择65536个数据对象中的任何一个,而且对那些对象的读写操作可以跨越多个连续的数据对象,直到达到基于处理事务功能代码的数据大小限制。
这儿没有假定数据对象代表一种真正邻接的数据阵列,而这是大多数简单PLC’s的解释。
“读写常用参考”功能代码被定义为携带32位的参考值并且能允许在“非常”大的空间里可以直接访问数据对象。
现在没有可以利用这一特点的PLC设备。
一个易造成混乱的潜在来源是用于MODBUS功能的参考值和用于Modicon PLC’s的“寄存器值”之间的关系。
由于历史原因,用户参考值使用从1开始的十进制数表示。
而MODBUS 采用更普通的从0开始的无符号整数进行软件数据整理分析。
于是,请求从0读取寄存器的Modbus消息将已知值返回建立在寄存器4:00001(存储类型4=输出寄存器,参考值00001)中的应用程序。
2.4隐含长度基本原则所有的MODBUS请求和响应都被设计成在此种方法下工作,即接收者可确认消息的完整性。
对于请求和响应为固定长度的功能代码,仅发送功能代码就足够了。
对于在请求和响应中携带不定长数据的功能代码,数据部分前将加上一个字节的数据统计。
当Modbus通过TCP运送,前缀中携带附加的长度信息以便接收者识别消息的边界,甚至消息被分成若干组进行传输。
外在的和隐含的长度准则的存在,以及CRC-32检错代码(以太网)的使用使请求和响应消息中发生未被识别的错误的机率减至无限小。
3.一致性等级概述当从草稿开始定义一种新的协议,有可能加强编码方式和阐述的一致性。
MODBUS由于其先进的特性,已经在很多地方得到了实施,必须避免破坏它已经存在的实施。
因此,已经存在的成套的处理类型被划分出一致性等级:等级0代表普遍使用且总体上一致的功能;等级2代表有用的功能,但带有某些特性。
现存装置的不适应于互用性的功能也已确认。
必须注意到,将来对该标准的扩充将定义附加的功能代码来处理现存事实标准不适用的情形。
然而,被提议扩充的详细资料出现在本手册中将会另人误解。
通过将代码“随机的”发送或者即便是通过检查异常响应的类型来确定特别的目标装置是否支持特别的功能代码总是可能的,而且该方法将保证引入这些扩充的现使用的MODBUS设备的连续的互用性。
事实上,这就是当前功能代码的分级原则。
Modbus功能代码共有三种类型分别为:·公共功能代码已定义好的功能码,保证其唯一性,由认可。
·用户自定义功能代码有两组,分别为65~72和100~110,不需要认可,但不保证代码使用的唯一性,如想变为公共代码,需要RFC认可。
·保留的功能代码由某些公司使用在某些传统设备的代码,不可作为公共用途。
常用公共功能代码见表2。
表2常用公共功能代码3.1等级0这是最小的有用功能,对主站和从站来说。
读乘法寄存器(fc3)写乘法寄存器(fc16)3.2等级1这是附加的被普遍实现的和能共同使用的成套功能,正如前面介绍过的,许多从站把输入,输出,离散值和寄存器值作为同等的进行处理。
读线圈(fc1)读离散输入(fc2)读寄存器输入(fc4)写线圈(fc5)写单一寄存器(fc6)读异常状态字(fc7)此功能对于每一个从站系列显然具有不同的含义。
3.3等级2这些是需要HMI和管理等例行操作的数据传送功能。
强制型多路线圈(fc15)读一般参考值(fc20)该功能可以处理并发的多个请求,而且能接收32位的参考数值。
当前的584和984PLC’s仅使用此功能接收类型6的参考值(扩展的寄存器文件)。
该功能最适于扩充以处理大的寄存器空间和缺少诸如“未定位”变量的参考值的数据对象。
写一般参考值(fc21)此功能可以处理并发的多个请求,也可接收32位的参考数值。
当前的584和984PLC’s仅使用此功能接收类型6的参考值(扩展的寄存器文件)。
该功能最适于扩充以处理大的寄存器空间和缺少诸如“未定位”变量的参考值的数据对象。
掩膜写寄存器(fc22)读/写寄存器(fc23)此功能把一定范围的寄存器输入和输出当作单一的处理事务。
使用MODBUS是执行规则的带有I/O模块的状态影象交换的最好办法。
如此,高性能的通用的数据采集装置可以执行功能3,16和23,从而把快捷的数据规则交换(23)和执行特殊数据对象的需求询问或更新的能力结合起来(3和16)。
读FIFO队列(fc24)一个有点专用的功能,打算将表结构的数据象FIFO(用到584/984上的FIN和FOUT 功能模块)一样传送到主机。
对于某种事件录入软件很有用。
3.4机器/厂家/网络的特殊功能以下所有的功能,虽然在MODBUS协议手册中提到,但由于它们有很强的机器依赖性,因而不适于互用性的目的。
诊断(fc8)编程(484)(fc9)轮询(484)(fc10)获取通讯事件计数器值(Modbus)(fc11)获取通讯事件记录(Modbus)(fc12)编程(584/984)(fc13)轮询(584/984)(fc14)通告从站ID(fc17)编程(884/u84)(fc18)恢复通讯连接(884/u84)(fc19)编程(原理)(fc40)固件置换(fc125)编程(584/984)(fc126)通告本地地址(Modbus)(fc127)4.协议结构本部分阐述了通过MODBUS/TCP网络携带的MODBUS请求和或响应封装的一般格式。