Modbus通讯协议(TCP和RTU)
Modbus协议
1.Modbus 协议1.1 Modbus协议简介Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年为使用可编程逻辑控制器(PLC)而发表的协议。
是全球第一个真正用于工业现场的总线协议。
现已经成为工业领域通信协议标准,并且成为工业电子设备之间最常用的连接方式。
控制器通过Modbus协议,经串行网络、以太网(或其它网络)和各设备之间进行通信。
Modbus协议主要包括Modbus RTU、Modbus ASCII、Modbus TCP。
Modbus协议是一个master/slave 架构的协议。
有一个节点是master 节点,其他使用Modbus协议参与通信的节点是slave 节点。
每一个slave 设备都有一个唯一的地址。
1.2 Modbus协议特点开放、通用的工业标准;可靠且免费;兼容性好,支持多种物理接口,如:RS-232、RS-485、RS-422、以太网等;支持多种传输介质,如普通线缆、双绞线、光纤、无线等;报文格式简单、紧凑、易懂、容易开发和使用;很容易支持不同接口的协议转换;1.3 Modbus协议架构Modbus协议包括Modbus RTU、Modbus ASCII、Modbus TCP协议。
1.4 Modbus主/从协议在同一时刻,只有一个主节点,一个或多个子节点连接于同一个串行总线。
Modbus 通信总是由主节点发起,子节点在没有收到来自主节点的请求时,从不会发送数据,子节点之间从不会互相通信。
主节点在同一时刻只会发起一个Modbus事务处理。
主节点以特定地址访问某个子节点,子节点接到并处理完请求后,子节点向主节点返回一个报文。
一个Modbus 事务处理包含2个报文:一个来自主节点的请求,一个来自子节点的应答。
每个子节点必须有唯一的地址,这样才能区别于其它节点被独立的寻址。
2.Modbus RTU2.1 Modbus RTU 帧格式报文开始至少需要有3.5个字符的静止时间,根据使用的通讯参数,很容易计算这个静止时间。
Modbus-RTU和Modbus-TCP协议模板(C语言)
Modbus-RTU和Modbus-TCP协议模板(C语言)目录简介: (2)Modbus-RTU简介: (2)Modbus-TCP简介: (3)System.h: (4)CRC_Check.h (5)CRC_Check.c (5)Modbus_RTU.h (8)Modbus_RTU.c (10)Modbus_TCP.h (27)Modbus_TCP.c (27)第1页简介:在单片机内部实现modbus协议,可以简单地将变量的值映射到modbus寄存器地址,这种方法是高效的,但是有以下缺点:1、通常不支持一条指令操作多个变量(寄存器);2、可移植性较差。
本模板使用8位数组模拟modbus寄存器。
06,10指令均对数组进行写操作,同时记录寄存器的写入操作,在其他地方定时判断“写入标志”,将“写入标志”置位的“模拟寄存器”的值转移到相关变量,或进行其他操作。
03指令读取最新数据,要求定时将变量的值写入“模拟寄存器”。
本模板缺点是占用资源较多、效率较低,优点是完整支持了modbus的03,06,10指令。
Modbus-RTU简介:1、Modbus读寄存器指令(0x03)地址(1B) +功能码(1B) +起始地址(2B) +寄存器数量(2B) +CRC(2B)返回:地址(1B) +功能码(1B) +字节数(1B) +数据值(2*“寄存器数量” Bytes或者“字节数”) +CRC(2B)2、Modbus写单个寄存器指令(0x06)地址(1B)+功能码(1B)+寄存器地址(2B)+数据值(2B)+CRC(2B)返回:地址(1B)+功能码(1B)+寄存器地址(2B)+数据值(2B)+CRC(2B) (返回与发送的指令相同)3、Modbus写多个寄存器指令(0x10)地址(1B) +功能码(1B) +起始地址(2B) +写寄存器数量(2B n) +字节计数(1B n*2) +数据(n*2 B) +CRC(2B)返回:地址(1B) +功能码(1B) +起始地址(2B) +写寄存器数量(2B) +CRC(2B)第2页Modbus-TCP简介:在MODBUS-RTU前添加6个字节,并删除MODBUS-RTU的CRC校验。
Modbus-TCP和Modbus-RTU的区别
Modbus-TCP和Modbus-RTU的区别1.ModbusTCP的特点Modbus TCP是Modbus通信协议的一种变体,它基于TCP/IP通信协议,常用于工业自动化领域。
Modbus TCP具有以下特点:.基于开放标准:Modbus TCP是基于TCP/IP通信协议和Modbus协议的开放标准,可以与各种设备、软件和系统进行集成和通信。
..简单易用:Modbus TCP协议设计简单,易于实现和使用。
它提供了灵活性,并且适用于多种不同的应用场景。
..高效可靠:Modbus TCP采用TCP/IP协议作为通信介质,数据传输速度快,数据精度高,且能够保证数据的可靠性和稳定性。
..易于扩展:Modbus TCP支持多点连接,可以同时与多个客户端建立连接,在分布式控制和管理方面具有很好的应用潜力。
..安全可靠:Modbus TCP提供了很好的安全性,支持加密功能和访问控制等机制,以确保通信安全可靠。
.Modbus TCP具有开放标准、简单易用、高效可靠、易于扩展和安全可靠等特点,适用于各种工业自动化场景,如过程控制、数据采集和监测等。
2.ModbusRTU的特点Modbus RTU是一种串行通信协议,主要用于在工业自动化中的设备之间进行数据传输和通信。
以下是Modbus RTU的一些特点:.速度快:Modbus RTU采用二进制码来表示数据,传输效率高,并且可以支持较高的通信速率,最高可达115.2kbps。
..简单易用:Modbus RTU协议的指令和格式都非常简单明了,易于理解和使用,在应用中具有广泛的适用性。
..灵活性强:Modbus RTU不仅可以支持串行通信,还可以通过网关和路由器实现TCP/IP网络连接。
..数据完整性高:Modbus RTU协议在数据传输过程中采用了CRC码校验,可以保证数据的完整性,避免因为传输出错而导致的数据丢失。
..节点数量多:Modbus RTU可以支持最多256个节点,可以方便地扩展和管理节点。
ModbusTcp与ModbusRTU的区别
Modbus TCP 与Modbus RTU的区别Modbus通信协议由Modicon公司(现已经为施耐德公司并购,成为其旗下的子品牌)于1979年发明的,是全球最早用于工业现场的总线规约。
由于其免费公开发行,使用该协议的厂家无需缴纳任何费用,Modbus通信协议采用的是主从通信模式(即Master/Slave通信模式),其在分散控制方面应用极其广泛,从而使得Modbus 协议在全球得到了广泛的应用。
Modbus通信协议具有多个变种,其具有支持串口(主要是RS-485总线),以太网多个版本,其中最著名的是Modbus RTU,Modbus ASCII和Modbus TCP三种。
其中Modbus RTU与Modbus ASCII均为支持RS-485总线的通信协议,其中Modbus RTU由于其采用二进制表现形式以及紧凑数据结构,通信效率较高,应用比较广泛。
而Modbus ASCII由于采用ASCII码传输,并且利用特殊字符作为其字节的开始与结束标识,其传输效率要远远低于Modbus RTU协议,一般只有在通信数据量较小的情况下才考虑使用Modbus ASCII通信协议,在工业现场一般都是采用Modbus RTU协议,一般而言,大家说的基于串口通信的Modbus通信协议都是指Modbus RTU通信协议。
在此我们着重讨论Modbus RTU协议,而Modbus TCP协议则是在RTU协议上加一个MBAP报文头,由于TCP是基于可靠连接的服务,RTU协议中的CRC校验码就不再需要,所以在Modbus TCP协议中是没有CRC校验码,用一句比较通俗的话说就是:Modbus TCP协议就是Modbus RTU协议在前面加上五个0以及一个6,然后去掉两个CRC校验码字节就OK.虽然这句话说得不是特别准确,但是也基本上把RTU与TCP之间的区别说得比较清楚了。
RTU协议中的指令由地址码(一个字节),功能码(一个字节),起始地址(两个字节),数据(N个字节),校验码(两个字节)五个部分组成,其中数据又由数据长度(两个字节,表示的是寄存器个数,假定内容为M)和数据正文(M乘以2个字节)组成,而RTU协议是采用3.5个字节的空闲时间作为指令的起始和结束,一般而言,只有当从机返回数据或者主机写操作的时候,才会有数据正文,而其他时候比如主机读操作指令的时候,没有数据正文,只需要数据长度即可。
Modbus通讯协议RTUASCIITCP详细介绍完整版
M o d b u s通讯协议R T U A S C I I T C P详细介绍集团标准化办公室:[VV986T-J682P28-JP266L8-68PNN]Modbus通讯协议RTU ASCII TCP详细介绍Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(Schneider Automation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。
此协议支持传统的RS-232、RS-422、RS-485和以太网设备。
许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
当在网络上通信时,Modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。
Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。
此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。
标准的Modicon控制器使用RS232C实现串行的Modbus。
Modbus的ASCII、RTU 协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。
Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。
另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。
Modbus通讯协议详解
Modbus通讯协议详解一、引言Modbus通讯协议是一种在工业自动化领域广泛使用的通信协议,用于实现设备之间的数据交换。
本文将详细介绍Modbus通讯协议的基本原理、通信方式、数据格式等方面的内容。
二、协议概述1. Modbus协议是一种客户-服务器通信协议,基于主从结构。
通常情况下,主设备(也称为主站)负责发起通信请求,而从设备(也称为从站)则负责响应请求并提供数据。
2. Modbus协议支持多种物理层和传输层,包括串行通信和以太网通信。
常用的物理层包括RS-232、RS-485和以太网,传输层则包括ASCII和RTU两种格式。
3. Modbus协议使用简单的请求/响应模式进行通信。
主设备通过发送请求帧来获取或设置从设备的数据,从设备则通过发送响应帧来回应主设备的请求。
三、通信方式1. 串行通信Modbus协议支持使用串行通信方式进行数据传输。
在串行通信中,主设备和从设备之间通过一对串行线路进行数据交换。
常用的串行通信物理层包括RS-232和RS-485。
2. 以太网通信Modbus协议也可以通过以太网进行数据传输。
在以太网通信中,主设备和从设备通过TCP/IP协议栈进行数据交换。
以太网通信具有较高的传输速率和较大的通信距离。
四、数据格式1. 帧格式Modbus协议使用帧格式进行数据传输。
每个帧由起始字符、从设备地址、功能码、数据域和校验字段组成。
2. 功能码功能码用于标识请求的类型。
常用的功能码包括读取线圈状态、读取输入状态、读取保持寄存器、读取输入寄存器、写单个线圈、写单个保持寄存器等。
3. 数据域数据域用于存储请求或响应的数据。
数据域的长度取决于功能码的类型。
4. 校验字段为了确保数据的准确性,Modbus协议使用校验字段进行数据校验。
常用的校验方式包括CRC校验和LRC校验。
五、通信流程1. 主设备发送请求帧主设备通过串行线路或以太网发送请求帧给从设备。
请求帧包括从设备地址、功能码和数据域。
Modbus的RTU、ASCII、TCP傻傻搞不清楚?一文全解读
Modbus的RTU、ASCII、TCP傻傻搞不清楚?一文全解读今天来聊一聊Modbus,先看看今天的主要内容:1、术语解读2、背景3、协议原理4、传输方式5、Modbus RTU与Modbus ASCII有什么区别6、Modbus TCP及其注意点7、功能码作用8、Modbus协议安全分析01术语解读校验码:校验码通常是一组数字的最后一位,由前面的数字通过某种运算得出,用以检验该组数据的正确性。
代码作为数据在向计算机或其它设备进行输入时,容易产生输入错误,为了减少这种输入错误,编码专家发明了各种校验检错方法,并依据这些方法设置了校验码。
常用的校验有:累加和校验SUM、字节异或校验XOR、纵向冗余校验LRC、循环冗余校验CRC……离散量输入:主要用来读取单个位的数据,如IO的状态;线圈:开关输出信号,主要用来写入单个位的数据,与离散量构成组成对位的操作;输入寄存器:主要用来读取16位,也就是两个字节的数据;保持寄存器:主要用来写入16位的数据;PLC:可编程逻辑控制器,是一种采用一类可编程的存储器,用于其内部存储程序和执行逻辑运算、顺序控制、定时、计数与算术操作等面向用户的指令,并通过数字或模拟式输入/输出控制各种类型的机械或生产过程。
串口通信:随着计算机系统的应用和微机网络的发展,通信功能越来越显得重要。
这里所说的通信是指计算机与外界的信息交换。
因此,通信既包括计算机与外部设备之间,也包括计算机和计算机之间的信息交换。
由于串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并且可以借助现成的电话网进行信息传送,因此特别适合于远距离传输。
对于那些与计算机相距不远的人-机交换设备和串行存储的外部设备如终端、打印机、逻辑分析仪、磁盘等,采用串行方式交换数据也很普遍。
在实时控制和管理方面,采用多台微机处理机组成分级分布控制系统中,各 CPU 之间的通信一般都是串行方式。
所以串行接口是微机应用系统常用的接口。
modbus tcp和modbusrtu 实例
Modbus TCP和Modbus RTU是工业控制领域中常用的通信协议,它们在工业自动化控制系统中扮演着重要的角色。
本文将介绍Modbus TCP和Modbus RTU的基本概念、工作原理以及实例应用。
一、Modbus TCP和Modbus RTU的概念1.1 Modbus TCPModbus TCP是一种基于以太网的Modbus通信协议,它使用TCP/IP协议作为传输媒介,可以实现在局域网或广域网中的设备之间进行实时数据通信。
Modbus TCP采用标准的Modbus协议格式,具有数据传输快速、稳定可靠等特点,广泛应用于工业自动化控制系统中。
1.2 Modbus RTUModbus RTU是一种基于串行通信的Modbus通信协议,它采用二进制编码的方式进行数据传输,具有传输速度快、占用系统资源少等特点。
Modbus RTU通常应用于工业现场设备之间的通信,如PLC、传感器等设备之间的数据交换和控制。
二、Modbus TCP和Modbus RTU的工作原理2.1 Modbus TCP的工作原理Modbus TCP采用客户端-服务器模式进行通信,客户端发起数据请求,服务器端响应请求并返回数据。
通信过程中,客户端通过TCP/IP协议向服务器端发送数据请求,服务器端接收请求并根据请求进行响应,完成数据的读写操作。
Modbus TCP通信的数据包格式包括事务标识、协议标识、长度字段、单元标识、功能码、数据域等字段,通过这些字段完成数据的传输和交换。
2.2 Modbus RTU的工作原理Modbus RTU采用主从站方式进行通信,主站负责发起数据请求,从站响应主站的请求并返回数据。
通信过程中,主站通过串行通信方式向从站发送数据请求,从站接收请求并根据请求进行响应,完成数据的读写操作。
Modbus RTU通信的数据包格式包括位置区域码、功能码、数据等字段,通过这些字段完成数据的传输和交换。
三、Modbus TCP和Modbus RTU的实例应用3.1 Modbus TCP的实例应用以太网通信的Modbus TCP协议在工业控制中有着广泛的应用。
ModbusTCP通讯协议
ModbusTCP通讯协议协议名称:Modbus TCP通讯协议一、引言Modbus TCP通讯协议是一种基于TCP/IP网络的通讯协议,用于在工业自动化领域中实现设备之间的数据交换。
本协议旨在确保设备之间的可靠通讯和数据传输,提供灵活的数据读写功能,并保证通讯的安全性和稳定性。
二、协议概述1. 协议目标本协议的目标是定义一种通用的通讯方式,使得不同厂商的设备能够通过TCP/IP网络进行数据交换和控制。
通过使用标准的Modbus TCP协议,可以实现设备之间的互操作性和兼容性。
2. 协议特点(1)基于TCP/IP协议:采用TCP/IP作为底层通讯协议,提供可靠的数据传输和连接管理功能。
(2)简单易用:协议设计简单明了,易于理解和实现。
(3)高效性:采用二进制数据传输方式,有效利用网络带宽。
(4)灵活性:支持多种数据类型和数据格式,满足不同应用场景的需求。
(5)安全性:提供数据加密和身份验证机制,确保通讯的安全性。
三、协议结构1. 帧格式Modbus TCP协议采用如下的帧格式:(1)事务标识符(2字节):用于标识一次通讯的唯一性。
(2)协议标识符(2字节):用于标识协议类型,固定为0x0000。
(3)长度字段(2字节):指示后续数据的长度。
(4)单元标识符(1字节):用于标识设备的地址。
(5)功能码(1字节):指示所执行的功能。
(6)数据域(可变长度):包含具体的数据内容。
2. 功能码Modbus TCP协议定义了一系列功能码,用于实现不同的数据读写操作。
常用的功能码包括:(1)读取线圈状态(功能码0x01):用于读取设备的开关量状态。
(2)读取输入状态(功能码0x02):用于读取设备的输入状态。
(3)读取保持寄存器(功能码0x03):用于读取设备的模拟量数据。
(4)读取输入寄存器(功能码0x04):用于读取设备的输入寄存器数据。
(5)写单个线圈(功能码0x05):用于控制设备的开关量状态。
(6)写单个保持寄存器(功能码0x06):用于写入设备的模拟量数据。
ModBusRTU通讯协议与ModBus通讯协议有什么区别
M o d B u s R T U通讯协议与M o d B u s通讯协议有什么区别Last revision date: 13 December 2020.modbus RTU常见问题汇总2013年04月22日 10:57注:本资料由网络搜索,答案仅供参考(持续更新中)点击查看产品详情1、ModBus RTU通讯协议与ModBus通讯协议有什么区别ModBus协议是应用层报文传输协议(OSI模型第7层),它定义了一个与通信层无关的协议数据单元(PDU),即PDU=功能码+数据域。
ModBus协议能够应用在不同类型的总线或网络。
对应不同的总线或网络,Modbus 协议引入一些附加域映射成应用数据单元(ADU),即ADU=附加域+PDU。
目前,有下列三种通信方式:1.以太网,对应的通信模式是MODBUS TCP。
2.异步串行传输(各种介质如有线RS-232-/422/485/;光纤、无线等),对应的通信模式是MOU或MODBUS ASCII。
3.高速令牌传递网络,对应的通信模式是Modbus PLUS。
2、关于MODBUS RTU通讯协议的提问modbus 主要由站地址(一个字节)+功能码(一个字节)+首地址(两个字节)+访问字数(两个字节)+校验码(CRC16或LRC两个字节)总共8个字节组成。
其实VB中编程很简单从组建添加MSComm组建就行了,难的是校验,3、modbus、rtu、modbus rtu分别是什么modbus协议是工控行业的标准协议,前身为莫迪康所写,现已被施奈德收购而modbus分为两种协议:即串口协议(modbus rtu)和网口协议(modbus tcp)协议,一般的工控机只支持rs232或者RS485的串口模式,这个时候工控机的协议栈里就只有协议,当他从串口接收到数据时,会直接根据报文中的数据进行控制,如果需要用modbusTCP协议进行传输,则需要使用带有网口的PLC具体的帧格式如下modbus RTU 地址域功能码数据差错校验modbus TCP 目的地址协议id 长度单元号功能码数据简单的说 tcp是由RTU加工而来的而RTU则是另外一种概念,不包含在modbus协议内是工控行业对监控设备的简称。
深入了解Modbus TCP协议
深入了解Modbus TCP协议Modbus总线有三种协议:Modbus RTU协议、Modbus ASCII协议和Modbus TCP协议,Modbus总线活跃在工业通信领域。
Modbus RTU 和Modbus ASCII擅长串行通信,比如基于RS485或者RS232的通信,而Modbus TCP则擅长基于以太网的通信。
由于底层所使用的结构不同,Modbus的应用数据单元(Application Data Unit,ADU)有所不同。
你可能并去清晰什么是ADU,昌晖仪表下面来具体介绍。
为了进行通信,Modbus规定了一种很简洁的数据结构,被称为“协议数据单元”(Protocol Data Unit,PDU)。
协议数据单元由功能码+数据构成,如下面这张图:功能码的长度为1个字节,它表示要执行的功能。
比如常见的:01读取线圈;02读取离散量输入值;03读取保持寄存器值;05写单个线圈等;数据部分的长度为0-252个字节,它表示要读的地址或者要写入的值,不同的功能码对应的数据有所不同。
比如01功能码,其数据为4个字节,其中前两个字节表示要读取的线圈的地址,后两个字节表示要读取线圈的数量;而对于05功能码,其数据也是4个字节,前两个字节表示要写入线圈的地址,后面两字节表示要写入的值。
协议数据单元有三种类型:恳求型协议数据单元(Request PDU)、应答型协议数据单元(Response PDU)、及特别应答型协议数据单元(Exception Response PDU),更多关于协议数据单元的内容,大家可以去Modbus官网()下载通信规范好好阅读。
协议数据单元是Modbus的通用数据结构,它与底层物理结构无关,Modbus RTU、Modbus ASCII和Modbus TCP都使用相同的协议数据单元。
但是,Modbus在通信的时候,总要依靠物理网络。
因此要把协议数据单元映射到物理网络上,这就形成了应用数据单元(Application Data Unit,ADU)。
Modbus通讯协议RTU-ASCII-TCP详细介绍
Modbus通讯协议RTU-ASCII-TCP 详细介绍Modbus通讯协议RTU ASCII TCP详细介绍Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(Schneider Automation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。
此协议支持传统的RS-232、RS-422、RS-485和以太网设备。
许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
当在网络上通信时,Modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。
Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。
此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。
标准的Modicon控制器使用RS232C实现串行的Modbus。
Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写。
Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。
另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master 端可以诊断出来,而当故障修复后,网络又可自动接通。
因此,Modbus协议的可靠性较好。
下面我来简单的给大家介绍一下,对于Modbus的ASCII、RTU和TCP协议来说,其中TCP和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并通过TCP/IP网络协议发送出去即可。
MODBUS协议详细讲解
MODBUS RTU详细解释Modbus一个工业上常用的通讯协议、一种通讯约定。
Modbus协议包括RTU、ASCII、TCP。
其中MODBUS-RTU 最常用,比较简单,在单片机上很容易实现。
虽然RTU比较简单,但是看协议资料、手册说得太专业了,起初很多内容都很难理解。
所谓的协议是什么?就是互相之间的约定嘛,如果不让别人知道那就是暗号。
现在就来定义一个新的最简单协议。
例如,协议:“A”--“LED灭”“B”--“报警”“C”--“LED亮”单片机接收到“A”控制一个LED灭,单片机接收到“B”控制报警,单片机接收到“A”控制一个LED亮。
那么当收到对应的信息就执行相应的动作,这就是协议,很简单吧。
先来简单分析一条MODBUS-RTU报文,例如:01060001001798040106000100179804从机地址功能号数据地址数据CRC校验这一串数据的意思是:把数据0x0017(十进制23)写入1号从机地址0x0001数据地址。
先弄明白下面的东西。
1、报文一个报文就是一帧数据,一个数据帧就一个报文:指的是一串完整的指令数据,就像上面的一串数据。
2、CRC校验意义:例如上面的9804是它前面的数据(010*********)通过一算法(见附录2,很简单的)计算出来的结果,其实就像是计算累加和那样。
(累加和:就是010*********加起来的值,然后它的算法就是加法)。
作用:在数据传输过程中可能数据会发生错误,CRC检验检测接收的数据是否正确。
比如主机发出010600 010*******,那么从机接收到后要根据010*********再计算CRC校验值,从机判断自己计算出来的CRC校验是否与接收的CRC校验(9804主机计算的)相等,如果不相等那么说明数据传输有错误这些数据不能要。
3、功能号意义:modbus定义。
见附录1。
作用:指示具体的操作。
MODBUS-RTU一、一个报文分析先声明下我们的目的,我们是要两个设备通讯,用的是MODBUS协议。
ModBusRTU通讯协议
ModBusRTU通讯协议协议名称:ModBus RTU通讯协议1. 引言ModBus RTU通讯协议是一种用于串行通信的通讯协议,主要用于工业自动化领域中的设备间数据传输和通信。
本协议旨在确保设备之间的可靠通信,并规定了数据传输格式、通信规则和错误处理等内容。
2. 适用范围本协议适用于使用ModBus RTU通讯协议进行数据传输和通信的设备和系统。
3. 术语定义在本协议中,以下术语定义适用:3.1 主机(Master):发送请求并控制通信的设备。
3.2 从机(Slave):响应主机请求的设备。
3.3 寄存器(Register):存储设备内部数据的位置。
3.4 线圈(Coil):存储设备内部布尔类型数据的位置。
4. 数据传输格式4.1 物理层ModBus RTU通讯协议使用串行通信方式,通信速率可根据实际需求进行设置。
4.2 帧格式每个ModBus RTU帧由以下部分组成:4.2.1 地址码:用于标识从机的地址。
4.2.2 功能码:用于指示请求的类型。
4.2.3 数据域:包含请求或响应的数据。
4.2.4 CRC校验:用于检测帧的传输错误。
5. 通信规则5.1 主机发送请求5.1.1 主机向从机发送请求帧,包括地址码、功能码和数据域。
5.1.2 从机接收请求帧,并根据功能码执行相应的操作。
5.2 从机响应请求5.2.1 从机根据请求帧的功能码执行操作,并生成响应数据。
5.2.2 从机向主机发送响应帧,包括地址码、功能码和数据域。
5.3 主机接收响应5.3.1 主机接收响应帧,并进行CRC校验。
5.3.2 如果校验通过,主机处理响应数据;否则,主机请求重发或进行错误处理。
6. 功能码本协议定义了以下常用功能码:6.1 读取线圈状态(Read Coil Status):用于读取从机中的线圈状态。
6.2 读取输入状态(Read Input Status):用于读取从机中的输入状态。
6.3 读取保持寄存器(Read Holding Registers):用于读取从机中的保持寄存器。
Modbus协议解析及串口通讯原理
1.Modbus 协议通讯方式区别Modbus RTU协议报文间隔需要大于3.5个字符计算:2.Modbus RTU数据帧格式3.Modbus ASCII 数据帧格式4.Modbus TCP 数据帧格式5.串口通讯串行通讯分类RS485接口标准RS232接口标准1.Modbus 协议通讯方式区别Modbus协议分为三种通信方式:Modbus RTU、Modbus ASCII以及Modbus TCP。
首先,Modbus TCP的通信格式和Modbus RTU非常相似,唯一的差别只是Modbus RTU最后带两个字节的CRC校验,而Modbus TCP没有,Modbus TCP 加了消息头。
下表是MODBUS ASCII协议和RTU协议的比较:协议开始标记结束标记校验传输效率程序处理CR,LF LRC低直观,简单,易调试ASCII:(冒号)RTU无无CRC高稍复杂从上表的比较我们可以看到, MODBUS ASCII的协议和RTU协议相比, MODBUS ASCII协议拥有开始和结束标记,而 MODBUSRTU却没有,所以ASCII协议的程序中对数据包的处理能更加方使。
MODBUS ASCII协议的DATA域传输的都是可见的ASCII字符,因此在调试阶段就显得更加直观,另外它的LRC校验程序也比较容易编写,这些都是 MODBUS ASCII的优点; MODBUS ASCII的主要缺点是传输效率低,因为它传输的都是可见的ASCII字符,原来用RTU传输的数据每一个字节用 ASCII的话都要把这个字节拆分两个字节,比如RTU传输一个十六进制数OXF9, AsCII需要传输字符F和字符9,对应的 ASCII码0x46和0×39两个字节,这样它的传输的效率肯定就比RTU 低。
所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。
另外,由于ASCII协议有开始标志和结束标志,所以一个数据包之间的各字节间的传输间隔时间可以大于1秒,而 MODBUS RTU方式下,由于没有规定开始和结束标记,所以协议规定每两个字节之间发送或者接收的时间间隔不能超过3.5倍字符传输时间。
Modbus协议分析——TCPRTU
Modbus协议分析——TCP/RTU两种传输方式控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。
用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。
所选的ASCII或RTU方式仅适用于标准的Modbus网络,它定义了在这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。
在其它网络上(象MAP和Modbus Plus)Modbus消息被转成与串行传输无关的帧。
1、ASCII模式当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,在消息中的每个8Bit字节都作为两个ASCII字符发送。
这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。
代码系统· 十六进制,ASCII字符0...9,A...F· 消息中的每个ASCII字符都是一个十六进制字符组成每个字节的位· 1个起始位· 7个数据位,最小的有效位先发送· 1个奇偶校验位,无校验则无· 1个停止位(有校验时),2个Bit(无校验时)错误检测域· LRC(纵向冗长检测)2、RTU模式当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。
这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据。
代码系统· 8位二进制,十六进制数0...9,A...F· 消息中的每个8位域都是一个两个十六进制字符组成每个字节的位· 1个起始位· 8个数据位,最小的有效位先发送· 1个奇偶校验位,无校验则无· 1个停止位(有校验时),2个Bit(无校验时)错误检测域· CRC(循环冗长检测)Modbus消息帧两种传输模式中(ASCII或RTU),传输设备以将Modbus消息转为有起点和终点的帧,这就允许接收的设备在消息起始处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给所有设备),判知何时信息已完成。
Modbus通讯协议(TCP和RTU)
1MODBUS RTU读寄存器请求序号意义所占字节字节存放格式1从设备地址1个字节0x00−0xff 2功能码1个字节0x033起始寄存器基地址两个字节高字节在前4寄存器个数两个字节高字节在前5CRC校验码两个字节低字节在前读寄存器回应序号意义所占字节字节存放格式1从设备地址1个字节0x00−0xff2功能码1个字节0x033数据长度1个字节寄存器个数×24数据寄存器个数×2个字节每个寄存器高字节在前5CRC校验码两个字节低字节在前写单个寄存器请求序号意义所占字节字节存放格式1从设备地址1个字节0x00−0xff 2功能码1个字节0x063起始寄存器地址两个字节高字节在前4寄存器值两个字节 高字节在前5CRC校验码 两个字节 低字节在前写单个寄存器回应序号意义所占字节字节存放格式1从设备地址1个字节0x00−0xff 2功能码1个字节0x103起始寄存器地址两个字节高字节在前4寄存器值两个字节 高字节在前5CRC校验码 两个字节 低字节在前1写多个寄存器请求序号意义所占字节字节存放格式1从设备地址1个字节0x00−0xff2功能码1个字节0x103起始寄存器地址两个字节高字节在前4寄存器个数两个字节 高字节在前5数据长度 1个字节 寄存器个数×2 6数据寄存器个数×2个字节每个寄存器高字节在前7CRC校验码 两个字节 低字节在前写多个寄存器回应序号意义所占字节字节存放格式1从设备地址1个字节0x00−0xff 2功能码1个字节0x103起始寄存器地址两个字节高字节在前4寄存器个数两个字节 高字节在前5CRC校验码 两个字节 低字节在前错误返回序号意义所占字节字节存放格式1从设备地址1个字节0x00−0xff2功能码1个字节请求功能码+0x80 3错误码1个字节 其代号见下面表格4CRC校验码 两个字节 低字节在前错误代号错误代号意义0x01不支持该功能码0x02越界0x03寄存器数量超出范围0x04读写错误22MODBUS TCP读寄存器请求序号意义所占字节字节存放格式1事务处理标识两个字节高字节在前2协议标识两个字节高字节在前3长度两个字节高字节在前4单元标识1个字节0x00−0xff 6功能码1个字节0x037起始寄存器基地址两个字节高字节在前8寄存器个数两个字节高字节在前•事务处理标识,该标识在主机和从机都是一样的,亦即是说从机收到MODBUS协议包时,该标识原封不动地回传给主机。
MODBUS-协议解析
4.MODBUS协议解析MODBUS协议是应用于电子控制器上的一种通用语言。
通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。
该协议是一个请求/应答协议,采取主从通讯模式,它描述了控制器请求访问其它设备的过程,以及如何回应来自其它设备的请求,以及怎样侦测错误并记录。
它制定了消息域格局和内容的公共格式。
MODBUS协议支持传统的RS-232、RS-422、RS-485和以太网设备。
许多工业设备,包括PLC,DCS,智能仪表等都在使用MODBUS协议作为他们之间的通讯标准。
其主要包含MODBUS TCP、MODBUS RTU与MODBUS ASCII三种。
(1)MODBUS TCP协议该协议是通过以太网为通讯媒介。
具体的数据格式分为两部分:MBAP(报文头)+PDU(帧结构)。
PDU(帧结构)由功能码+数据组成,数据长度由具体功能决定。
功能码定义如下:注:以下所列举内容均在三菱PLC(FX5U-32MT/ES)上测试通过,其中PLC为服务器,上位机为客户端。
(1)线圈读取功能(01H)样例1:读Y0-Y7,Y10-Y17请求:123400000006010100000010响应:1234000000050101025500(2)输入读取功能(02H)样例2:读X0-X7请求:112200000006010200000008响应:11220000000401020100(3)保持寄存器读取功能(03H)样例3:读D0-D3(D0=1,D1=2,D2=3,D3=4)请求:FF EE00000006010300000004响应:FF EE0000000B0103080001000200030004(4)1线圈写入功能(05H)样例4:将Y1设置为0N请求:11220000000601050001FF00(5)1寄存器写入功能(06H)样例5:将D1赋值为9请求:999900000006010600010009(6)多线圈写入功能(0FH)样例6:将Y0,Y2置ON,Y1,Y3置OFF请求:141500000008010F000000040105响应:141500000006010F00000004(7)多寄存器写入功能(10H)样例7:将D0,D1,D2分别赋值1,2,3请求:25260000000D01100000000306000100020003响应:252600000006011000000003附录:三菱PLC(FX5U)功能及地址对应关系表(2)MODBUS RTU协议该协议是通过RS485,RS422,RS232为通讯媒介。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1MODBUS RTU
读寄存器请求序号意义所占字节字节存放格式
1从设备地址1个字节0x00−0xff 2功能码1个字节0x03
3起始寄存器基地址两个字节高字节在前
4寄存器个数两个字节高字节在前
5CRC校验码两个字节低字节在前
读寄存器回应序号意义所占字节字节存放格式1从设备地址1个字节0x00−0xff
2功能码1个字节0x03
3数据长度1个字节寄存器个数×2
4数据寄存器个数×2个字节每个寄存器高字节在前5CRC校验码两个字节低字节在前
写单个寄存器请求序号意义所占字节字节存放格式1从设备地址1个字节0x00−0xff 2功能码1个字节0x06
3起始寄存器地址两个字节高字节在前
4寄存器值两个字节 高字节在前
5CRC校验码 两个字节 低字节在前
写单个寄存器回应序号意义所占字节字节存放格式1从设备地址1个字节0x00−0xff 2功能码1个字节0x10
3起始寄存器地址两个字节高字节在前
4寄存器值两个字节 高字节在前
5CRC校验码 两个字节 低字节在前
1
写多个寄存器请求序号意义所占字节字节存放格式1从设备地址1个字节0x00−0xff
2功能码1个字节0x10
3起始寄存器地址两个字节高字节在前
4寄存器个数两个字节 高字节在前
5数据长度 1个字节 寄存器个数×2
6数据寄存器个数×2个字节每个寄存器高字节在前7CRC校验码 两个字节 低字节在前
写多个寄存器回应序号意义所占字节字节存放格式1从设备地址1个字节0x00−0xff 2功能码1个字节0x10
3起始寄存器地址两个字节高字节在前
4寄存器个数两个字节 高字节在前
5CRC校验码 两个字节 低字节在前
错误返回序号意义所占字节字节存放格式1从设备地址1个字节0x00−0xff
2功能码1个字节请求功能码+0x80 3错误码1个字节 其代号见下面表格4CRC校验码 两个字节 低字节在前
错误代号错误代号意义
0x01不支持该功能码
0x02越界
0x03寄存器数量超出范围
0x04读写错误
2
2MODBUS TCP
读寄存器请求序号意义所占字节字节存放格式1事务处理标识两个字节高字节在前
2协议标识两个字节高字节在前
3长度两个字节高字节在前
4单元标识1个字节0x00−0xff 6功能码1个字节0x03
7起始寄存器基地址两个字节高字节在前
8寄存器个数两个字节高字节在前
•事务处理标识,该标识在主机和从机都是一样的,亦即是说从机收到MODBUS协议包时,该标识原封不动地回传给主机。
•协议标识,0表示MODBUS协议。
•长度,该长度是指紧跟其后的数据长度。
•单元标识,和RTU的地址是一样的。
读寄存器回应序号意义所占字节字节存放格式1事务处理标识两个字节高字节在前
2协议标识两个字节高字节在前
3长度两个字节高字节在前
4单元标识1个字节0x00−0xff
5功能码1个字节0x03
6数据长度1个字节寄存器个数×2
7数据寄存器个数×2个字节每个寄存器高字节在前
写单个寄存器请求序号意义所占字节字节存放格式1事务处理标识两个字节高字节在前
2协议标识两个字节高字节在前
3长度两个字节高字节在前
4单元标识1个字节0x00−0xff 5功能码1个字节0x10
6寄存器地址两个字节高字节在前
7寄存器值两个字节 高字节在前
3
写单个寄存器回应序号意义所占字节字节存放格式1事务处理标识两个字节高字节在前
2协议标识两个字节高字节在前
3长度两个字节高字节在前
4单元标识1个字节0x00−0xff 5功能码1个字节0x10
6寄存器地址两个字节高字节在前
7寄存器值两个字节 高字节在前
写多个寄存器请求序号意义所占字节字节存放格式1事务处理标识两个字节高字节在前
2协议标识两个字节高字节在前
3长度两个字节高字节在前
4单元标识1个字节0x00−0xff
5功能码1个字节0x10
6起始寄存器地址两个字节高字节在前
7寄存器个数两个字节 高字节在前
8数据长度 1个字节 寄存器个数×2
9数据寄存器个数×2个字节每个寄存器高字节在前
写多个寄存器回应序号意义所占字节字节存放格式1事务处理标识两个字节高字节在前
2协议标识两个字节高字节在前
3长度两个字节高字节在前
4单元标识1个字节0x00−0xff 5功能码1个字节0x10
6起始寄存器地址两个字节高字节在前
7寄存器个数两个字节 高字节在前
4
错误返回序号意义所占字节字节存放格式1事务处理标识两个字节高字节在前
2协议标识两个字节高字节在前
3长度两个字节高字节在前
4单元标识1个字节0x00−0xff
5功能码1个字节请求功能码+0x80 6错误码1个字节 其代号见上面表格
5。