Modbus协议规范V1.01

目录

Modbus协议介绍 (1)

主从机状态图及编程 (2)

存储的数据结构及地址分配 (12)

具体帧格式描述 (13)

具体功能代码描述 (14)

后续待完善问题 (30)

参考文献 (30)

附录 (30)

Modbus协议介绍

Modbus串行链路协议是一个主-从协议。在同一时刻,只有一个主节点连接于总线,一个或多个子节点(最大编号为247 ) 连接于同一个串行总线。Modbus通信总是由主节点发起。子节点在没有收到来自主节点的请求时,不会发送数据。子节点之间也不会互相通信。如果从机之间要求通信,只能通过主机进行转送传输。本协议不支持该模式,即不容许从机间通信(以后可以进行改进)。主节点在同一时刻只会发起一个Modbus事务处理。

Modbus协议有两只两种串行传输模式:RTU 模式和ASCII 模式。RTU模式在相同的波特率下比ASCII 模式有更高的吞吐率。

本协议采用RTU模式。

主机向从机请求有两种请求模式:广播模式和单播模式。广播模式下从机不返回响应。单播模式下主机发送请求,被寻址从机在处理该请求后返回响应。

占用的硬件资源

从机:串行通信口1个、8位或16位定时器1个、RTC或秒定时器1个。

主机:串行通信口1个、8位或16位定时器2个、RTC或秒定时器1个。

帧的简单描述

Modbus协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。在特定总线或网络上的Modbus协议映射能够在应用数据单元(ADU)上引入一些附加域。本协议无附加域。

应用数据单元(ADU)

协议数据单元(PDU)

图 1 通用Modbus协议帧

地址域包含要寻址的从机地址,也可为广播地址。

功能代码表示从机要执行何种操作,数据段为操作提供数据。

差错校验码可以提高通信的可靠性。一般为CRC校验。

通信模式:

查询—回应周期Modbus没有握手机制,主机直接发送操作代码,从机立刻回应。

(1)查询

查询消息中的功能代码告之被选中的从机要执行何种功能。数据段包含了从机要执行功能的任何附加信息。例如功能代码03是要求从机读保持寄存器并返回它们的内容。数据段必须包含要告之从机的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从机提供了一种验证消息内容是否正确的方法。

(2)回应

如果从机产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从机收集的数据:像寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主机确认消息内容是否可用。

正常的通信如图2所示。

图2 无差错事务处理

如果从机收到异常信息,则返回从机地址、差错码(设置该原始功能码的最高有效位为逻

图3 异常事务处理

在主机中应有定时控制,如果主机在1秒内没有收到相应从机的响应,则主机再重复发送两次相同请求代码,三次都没有相应响应则报告通信异常(三次收到数据但CRC校验错误也报告通信异常)。

对于主机而言,事先应约定好地址范围,将并地址放到地址池中。如果不知道从机地址范围,则地址池中地址的从1到247都有。对于报告通信异常的地址可以将其从地址池中剔除,以后不再寻址该从机。(需要考虑的一点为在主机在寻址某个从机时刚好该从机故障或断电,无法应答,之后从机恢复,但主机会无法跟该从机通信,因地址池中无该从机地址)。

主从机状态图及编程

主机状态图

图 4 主节点状态图

对上面的状态图的一些解释:

◆状态“空闲”=无等待的请求。这是电源上电后的初始状态。只有在“空闲”状态请

求才能被发送。发送一个请求后,主节点离开“空闲”状态,没有回到“空闲”时不能发送第二个请求。

◆当单播请求发送到一个子节点,主节点将进入"等待应答" 状态,同时一个临界超时定

时启动。这个超时称为“响应超时”。它避免主节点永远处于“等待应答”状态。如果出现响应超时,则再次发送上一次信息。连续三次出现响应超时,则报告通信异常。

响应超时为1s。

◆当收到一个应答时,主节点在处理数据之前检验应答。在某些情况下,检验的结果可

能为错误。如收到来自非期望的子节点的应答,或接收的帧错误。在收到来自非期望子节点的应答时,响应超时继续计时;当检测到帧错时,可以执行一个重试。

◆帧错误包括1) 对每个字符的奇偶校验;2) 对整个帧的CRC校验。

◆在单播方式,响应超时必须设置到足够的长度以使任何子节点都能处理完请求并返回

响应。而广播转换延迟必须有足够的长度以使任何子节点都能只处理完请求而可以接收新的请求。因此,转换延迟应该比响应超时要短。

◆当广播请求发送到串行总线上,没有响应从子节点返回。主节点需要进行延迟以便使

子节点在接收新的请求处理前完成当前请求。该延迟被称作“转换延迟”。因此,主节点在返回“空闲”状态之前,应先到“等待转换延迟”状态。转换延迟为200ms。

◆两次发送请求的时间间隔必须大于T3.5。

◆连续出现三次通信异常则提示与某从机通信错误,并将该从机从地址池中删除。一次

通信成功则将通信异常计数器清零。通信异常包括:响应超时,帧检测错误。

◆如果收到异常功能代码,在上位机应显示相应提示。但该次通信被认为是成功的。

从机状态图

图 5 从机状态图

对上面的状态图的一些解释:

◆状态“空闲”= 没有等待的请求。这是电源上电后的初始状态。在响应完应答后也回

到“空闲”状态。

◆如果子节点在接收到的帧中检测到错误(奇偶校验错误,CRC校验错误,图中表示为

请求数据有错),则没有响应返回到主节点。

◆当收到一个请求时,子节点在处理请求中要求的动作前检验报文包。当检测到错误时

(注意跟上面的错误相区别,图中表示为处理时出错),必须向主节点发送应答。不同的错误可以发生于:请求的格式错,非法动作,……具体的可能错误见功能代码异常类型介绍。

◆当要求的动作完成后,单播报文要求必须格式化一个应答并发往主节点。如果要求的

动作完成时间超过响应超时,则应发送确认异常码。确认异常码介绍见。

◆如果在广播模式下,要求在收到请求后完成处理的时间在转换延迟时间内。

◆为防止非寻址从机在接收中断中停留过长时间,从机每次进入接收中断先判断是否寻

址本机,不是则快速退出中断。具体流程图见接收中断流程图。

◆更为具体的程序流程图见附录。

从机事务处理流程图

图6 从机事务处理流程图

对上面的状态图的一些解释:

◆只有从机在奇偶校验、CRC校验通过了才进行该处理请求处理,为确保操作的正确进

行,对该处理进行了一些判断,出现异常则响应相应的异常代码。

◆根据处理结果,可以建立两种类型响应:

●正常响应:

响应功能码= 请求功能码

●异常响应(参见第6.14节):

用来为客户机提供处理过程中与被发现的差错相关的信息;

响应功能码= 请求功能码+ 0x80;

提供一个异常码来指示差错原因。

◆在实际的从机事务处理中,确认操作码是在接收完一帧后马上判断的,从确认信息以后

都是在相应功能代码处理中进行判断的。

传输模式及定时控制

/

图7 传输模式状态图

上面状态图的一些解释:

◆“空闲”是没有发送和接收报文要处理的正常状态。

◆当总线没有活动的传输的时间间隔达3.5 个字符长时,通信链路被认为在―空闲‖ 态。

◆当总线空闲时,在总线上检测到的任何传输的字符被识别为帧起始。总线变为“活动”

状态。然后,当总线上没有字符传输的时间间个达到t3.5后,被识别为帧结束。

◆检测到帧结束后,完成CRC 计算和检验。然后,分析地址域以确定帧是否发往此设备,

如果不是,则丢弃此帧。为了减少接收处理时间,地址域在一接收到就分析,而不需要等到整个帧结束。这样,CRC 计算只需要在帧寻址到该节点(包括广播帧) 时进行。

◆开始到“空闲”的t3.5 的定时控制不使用定时器来实现,因单片机上电初始化占用时间

大于t3.5。

◆在发送时,其t3.5定时由接收程序来保证,因为只有在大于t3.5时才判断为帧结束,即

使马上发送也可以保证两帧之间的t3.5定时要求。

◆对于从机,为减少在接收中断的停留时间,地址域可以在帧开始就分析,如果不是寻找

本机,将地址匹配标志位清零,以后每次进入接收中断都马上退出。当检测到帧结束时才将地址匹配标志位置位。这样,CRC 计算只需要在帧寻址到该节点(包括广播帧) 时进行。

具体流程图

接收中断程序流程图

图8 接收中断流程图

上面程序流程图的一些说明:

◆主程序初始化时,地址匹配标志位、帧启动标志位都是置位的。T3.5超时表示帧结束,

此时关闭T1.5和T3.5定时,地址匹配标志位、帧启动标志位置位,以便下次进入接收中断对帧地址是否匹配和是否开启定时器判断。接收计数器也应在帧结束时清零。

◆为减少在接收中断的停留时间,开始就对帧的地址进行判断,如果不是寻找本机,将地

址匹配标志位清零,以后每次进入接收中断都马上退出。当检测到帧结束时才将地址匹配标志位置位,准备对下一帧的地址进行判断。这样,只有被寻址的从机才在接收中断中停留较长时间。

◆为节约定时器,可以将T1.5和T3.5的定时采用同一个定时器,其基本定时时间为1.75

个字节时间。

◆定时器在帧启动时开启,T3.5超时中断中将其关闭。

◆当广播时,只是将广播标志位置位,等待T3.5超时中断将帧完成标志位置位,在帧处

理中处理广播。

T3.5、T1.5定时中断程序流程图

图9 定时器中断流程图

上面程序流程图的一些说明:

◆定时器只采用一个。一次基本定时为1.75个字节时间,根据接收到的字节计数器的值

区别T1.5和T3.5,正常帧的在T1.5和T3.5时接收计数器的值应该是相同的。如果帧内两个字节的时间间隔超过T1.5,则在T1.5和T3.5时接收计数器的值肯定是不一样的,此时将丢弃帧标志位置位。

◆T3.5超时时,应将定时器关闭,否则处理完该帧在没有接受新的帧也会进入定时中断

修改一些全局变量。帧长度就是此时的接收字节计数器的值。地址匹配标志位、帧启动标志位、接收字节计数器清零,为开始下一帧的接收做准备。

主机帧处理

中断及T3.5、T1.5定时主机与从机相同,见图8、图9。

在主机中还有响应超时控制,需要共用实时时钟(RTC)或定时器来实现。

图10 主机帧处理流程图

上面状态图的一些解释:

◆ 本程序流程图为主机的全部流程图,在具体实现是可以将帧动作前的相应检查作为一个

函数来实现。发送部分为一个函数。

◆ 执行帧的动作前应检查是否满足:1)帧内字节间时间小于T1.5,2)CRC 校验是否正

确,3)功能代码是否超限。

◆ 功能代码范围应包括表2所示的正常代码及相应高位置1的异常代码。 ◆ 上述检查正确后,根据要求从机响应数据的要求来处理接收数据。具体实现要根据需要

来编写。需要注意的一点是从机可能会返回异常代码,故每个功能代码处理时要求有异常代码的判断。

◆ 如果上述检查错误,则推出处理程序,等待超时中断处理。 ◆ 在发送时,需要判断是广播模式还是单播模式,广播模式下要求开转换延时计数器并关

闭接收中断,而单播模式不需要。

◆ 接收处理时,广播模式从机没有数据响应,故没有广播模式的处理。

超时定时中断及延迟超时中断处理

图11 超时中断处理 图12 延迟超时中断处理

从机帧处理流程图:

中断及T3.5、T1.5定时主机与从机相同,见图8、图9。

图13 从机帧处理流程图

上面状态图的一些解释:

◆执行帧的动作前应检查是否满足:1)帧内字节间时间小于T1.5,2)CRC校验是否正

确,3)功能代码是否超限。

◆上述检查正确后,在根据功能代码执行各个操作前还应检查操作的寄存器地址范围是否

超限。如果超限则返回地址异常代码。

◆所有检查正确并在相应操作成功执行完成后发送响应。如果完成操作时间大于响应超

时,则响应确认异常代码。

◆在广播模式下,从机不响应,且执行广播的动作要求在转换延迟(200ms)内完成。◆

存储的数据结构及地址分配

采用独立的存储地址,即每个块的数据与其他数据块的地址是分离的。数据分为四个块,分

图14 数据结构及存储地址分配

其中,开关量的输入只是输入量,即它是只读的。开关量输出为可读可写,读表示现在当前开关量输出的状态,写为开关量的输出。输入寄存器为模拟量的输入,保持寄存器读为各配置变量的寄存器的值,写则对各变量进行配置。

◆输入寄存器的地址0x0180--0x01A0为16路模拟量的原始的采集值。每个地址对应两个

字节数据,每路模拟量的占用两个地址,其采样值为32位(高位不足用0填充),高16位占用第一个地址,低16位占用第二个地址,每个地址的数据也是高位在前。例如,某路模拟量的采集值为0x123456,则发送为0x00,0x12,0x34,0x56。在软件中保证每次模拟量的地址是偶数,如果出现奇数(不管是起始地址还是地址个数),则响应数据地址异常代码。

◆保持寄存器地址分配为:0x0100—0x010F为16路模拟量通道配置,每路模拟量对应一

个地址,可以对该地址写表示配置该通道,读则返回该通道现有配置值。

其余应用可以根据具体需要自定义地址。

具体帧格式描述

单个字符传输:1个起始位(0),8个数据位,1个奇偶校验位(用停止位填充),1个停止位(1)。

图15 单字节比特流

帧格式:

图16 帧格式

地址、功能代码、数据的发送都采取大端模式,当一个数据大余两个字节时,都是高位在前,低位在后。CRC校验码是低位在前,高位在后。

地址:

地址0 保留为广播地址。

主机没有地址。每个从机分配一个地址(范围1--247),该地址必须在Modbus串行总线上唯一。在该串行总线上最多可以挂载247个从机。

功能代码:

Modbus包括三类功能代码:公共的,用户自定义的及保留的。

在本协议中只采用部分公共功能代码。具体的见P14的具体功能代码描述。

CRC(循环冗余校验)校验:

为保证帧的可靠传输,采用CRC校验。

CRC 域检验整个帧的内容。不管报文有无奇偶校验,均执行此检验。(奇偶校验为一个字节的内部的校验,一般为单片机内部硬件完成)。

每次发送节点在发送前将将该帧的所有字节进行CRC计算,将16位结果放到该帧的结尾(低位在前),接收节点在接收到该帧后对除CRC校验码的所有字节进行CRC计算,再将该结果与接收帧中的CRC码进行比较,如果一致则传输无误,进行接收处理。如果不一致则什么也不做,等待接收下一帧数据。

具体的CRC校验原理及算法见附录。

帧间定时控制:

每一帧之间的时间间隔应大于T3.5(3.5个字符时间)。如果小于T3.5,则认为还是上一帧的数据。只有在总线空闲时间大于T3.5时,才判定该帧结束,可以对该帧进行处理。

帧内的两个字符之间的间隔应小于T1.5(1.5个字符时间)。如果大于T1.5,则该帧被认为不完整帧,应该被接收节点丢弃,但此时接收节点还是继续接收该帧的数据,直到出现T3.5超时才将该帧丢弃,并准备接收下一帧数据。

帧 1 帧2 帧3

4.5个字符

图17 帧间定时控制

具体功能代码描述

表2 功能代码表

01 (0x01)读线圈

在一个远程设备中,使用该功能码读取线圈的1至2000连续状态。请求PDU详细说明了起始地址,即指定的第一个线圈地址和线圈编号。从零开始寻址线圈。因此寻址线圈1-16为0-15。

根据数据域的每个比特将响应报文中的线圈分成为一个线圈。指示状态为1= ON 和0= OFF。第一个数据字节的LSB(最低有效位)包括在询问中寻址的输出。其它线圈依次类推,一直到这个字节的高位端为止,并在后续字节中从低位到高位的顺序。

如果返回的输出数量不是八的倍数,将用零填充最后数据字节中的剩余比特(一直到字节的高位端)。字节数量域说明了数据的完整字节数。

响应PDU

*N =输出数量/8,如果余数不等于0,那么N = N+1 错误

将输出27-20的状态表示为十六进制字节值CD ,或二进制1100 1101。输出27是这个字节的MSB ,输出20是LSB 。

通常,将一个字节内的比特表示为MSB 位于左侧,LSB 位于右侧。第一字节的输出从左至右为27至20。下一个字节的输出从左到右为35至28。当串行发射比特时,从LSB 向MSB 传输: 20 . . . 27、28 . . . 35等等。

在最后的数据字节中,将输出状态38-36表示为十六进制字节值05,或二进制0000 0101。输出38是左侧第六个比特位置,输出36是这个字节的LSB 。用零填充五个剩余高位比特。

注:用零填充五个剩余比特(一直到高位端)。

图18 读线圈状态图

02 (0x02)读离散量输入

在一个远程设备中,使用该功能码读取离散量输入的1至2000连续状态。请求PDU 详细说明了起始地址,即指定的第一个输入地址和输入编号。从零开始寻址输入。因此寻址输入1-16为0-15。

根据数据域的每个比特将响应报文中的离散量输入分成为一个输入。指示状态为1= ON 和0= OFF

。第一个数据字节的LSB (最低有效位)包括在询问中寻址的输入。其它输入依次类推,一直到这个字节的高位端为止,并在后续字节中从低位到高位的顺序。

如果返回的输入数量不是八的倍数,将用零填充最后数据字节中的剩余比特(一直到字节的高位端)。字节数量域说明了数据的完整字节数。

请求PDU

响应PDU

*N=输出数量/8,如果余数不等于0,那么N = N+1

这是一个请求读取离散量输入197-218的实例:

将离散量输入状态204-197表示为十六进制字节值AC,或二进制1010 1100。输入204是这个字节的MSB,输入197是这个字节的LSB。

将离散量输入状态218-213表示为十六进制字节值35,或二进制0011 0101。输入218位于左侧第3比特,输入213是LSB。

注:用零填充2个剩余比特(一直到高位端)。

图19:读离散量输入的状态图

03 (0x03)读保持寄存器

在一个远程设备中,使用该功能码读取保持寄存器连续块的内容。请求PDU说明了起始寄存器地址和寄存器数量。起始寻址寄存器是从0x0100开始。

将响应报文中的寄存器数据分成每个寄存器有两字节,在每个字节中直接地调整二进制内容。

对于每个寄存器,第一个字节包括高位比特,并且第二个字节包括低位比特。

*N=寄存器的数量

错误

将寄存器0x108的内容表示为两个十六进制字节值02 2B,或十进制555。将寄存器0x109-0x10A的内容分别表示为十六进制00 00和00 64,或十进制0和100。

图20:读保持寄存器的状态图

modbus_通讯协议_实例

上海安标电子有限公司 ——PC39A接地电阻仪通信协议 通信协议: 波特率:9600数据位:8校验位:无停止位:1 上位机(计算机): 字节号 1 2 3 4 5 6 7 8 意义ID Command 数据地址V alue CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,读:3或4,写:6 3 数据地址:2个字节,寄存器地址,读从100开始,写从200开始 4 V alue:2个字节,读:个数(以整型为单位),写:命令/ 数据(以整型为单位) 5 CRC:计算出CRC 下位机(PC39A): 读数据,若正确 字节号 1 2 3 3+N (N=个数*2) 3+N+1 3+N+2 意义ID Command=3 / 4 数据个数数据CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,收到的上位机命令 3数据个数:1个字节,返回数据个数(以字节为单位) 4 V alue:N个字节,是返回上位机的数据 5 CRC:计算出CRC 写命令,若正确 返回收到的数据: 若错误 字节号 1 2 3 4 5 意义ID Command 数据CRC 注:1 ID:1个字节,由单机来定(0~255) 2 Command:1个字节,收到的上位机命令或上0x80, 如收到3,返回0x83 3数据:1个字节,错误的指令 错误指令 1:表示command不存在 2:表示数据地址超限 4 CRC:计算出CRC

例如读PC39A 电流数据: 机器地址为12,电流的数据地址100,数据为15.45(A) (一个整型数据) 主机: ID Command 数据地址 V alue CRC 16进制 0x0c 0x03 0x0064 0x0001 CRC_H CRC_L 10进制 12 3 100 1 CRC_H CRC_L 从机返回 如正确: ID Command 数据个数(以字节为单位) V alue CRC 16进制 0x0c 0x03 0x002 0x0609 CRC_H CRC_L 10进制 12 3 2 1545 CRC_H CRC_L 如错误: ID Command 数据 CRC 16进制 0x0c 0x83 0x02 CRC_H CRC_L 10进制 12 131 2 CRC_H CRC_L 例如发PC39A 启动命令: 机器地址为12,命令的地址200,数据为25000(25000表示启动) 主机: ID Command 数据地址 V alue CRC 16进制 0x0c 0x06 0x00c8 0x61a8 CRC_H CRC_L 10进制 12 6 200 25000 CRC_H CRC_L 从机返回 如正确: ID Command 数据地址 V alue CRC 16进制 0x0c 0x06 0x00c8 0x61a8 CRC_H CRC_L 10进制 12 6 200 25000 CRC_H CRC_L 如错误: ID Command 数据 CRC 16进制 0x0c 0x86 0x02 CRC_H CRC_L 10进制 12 134 2 CRC_H CRC_L 0011 10000110 错误码0x83 功能码0x06错误码0x86

单独传感器标准MODBUS485通讯协议

A、读取数据(标准modbus协议) 地址默认为0x01,可以更改 1、读取数据 主机呼: 0103 00 0000 01 840A 从机答: 0103 02 XX XX XX XX 上面02,XX等均为一个字节。数据为两个字节,高位字节在前。每帧的开头和结尾至少有3。5个字节时间的间隔. 2。读设备地址 0020 CRC (4个字节)(读取:00 20 0068) 00 20 Adress CRC (5个字节) 3.写设备地址 00 10 Adress CRC (5个字节)(地址设为01:00 10 01 BD C0) 00 10CRC?(4个字节)(返回:00 1000 7C) 说明: 1.读写地址命令的地址位必须是00。 2。Adress为1个字节,范围为0-255。 用户在为主机编程时,除了站号(地址)和CRC校验码之外,其它字节的字符均采用上面的内容不变。主机格式中的读取点数为01。从机回答帧中的功能码(03)和读单元字节数(01)不变。

计算CRC码的步骤: 1、预置16位寄存器为十六进制FFFF(即全为1)。称此寄存器为CRC寄存器; 2、把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器; 3、把寄存器的内容右移一位(朝低位),用0填补最高位,并检查右移后的移出位; 4、如果最低位为0:重复第3步(再次移位) 如果最低位为1:CRC寄存器与多项式A001(10100000 0000 0001)进行异或; 5、重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理; 6、重复步骤2到步骤5,进行下一步8位数据的处理; 7、最后得到的CRC寄存器即为CRC码; 8、将CRC结果放入信息帧时,将高低位交换,低位在前。 //************************************************************************************************ //**名称:CRC16 //**说明:CRC效验函数 //**形参:*p效验帧的指针帧长 datalen //**返回值:效验字 //************************************************************************************************ unsignedint CRC16(unsigned char * p, uint16 datalen ) { unsigned char CRC16Lo,CRC16Hi,CL,CH,SaveHi,SaveLo; int i,Flag; CRC16Lo =0xFF; CRC16Hi= 0xFF; CL = 0x01; CH= 0xA0; for(i=0;i>= 1 ; //高位右移一位,低位右移一位if ((SaveHi &0x01) ==0x01) //如果高位字节最后一位为1 CRC16Lo|=0x80 ; //则低位字节右移后前面补1否则自动补0 if ((SaveLo&0x01) ==0x01) //如果LSB为1,则与多项式码进行异或 { CRC16Hi^= CH;CRC16Lo ^= CL;} } }

Modbus协议中文版(比较完善)

GB/T ××××—×××× 前言 -----------串行链路和TCP/IP上的MODBUS标准介绍 该标准包括两个通信规程中使用的MODBUS应用层协议和服务规范: ·串行链路上的MODBUS MODBUS串行链路取决于TIA/EIA标准:232-F和485-A。 ·TCP/IP上的MODBUS MODBUS TCP/IP取决于IETF标准:RFC793和RFC791有关。 串行链路和TCP/IP上的MODBUS是根据相应ISO层模型说明的两个通信规程。 下图强调指出了该标准的主要部分。绿色方框表示规范。灰色方框表示已有的国际标准(TIA/EIA和IETF标准)。 Modbus 协议规范 45页 MODBUS应用层MODBUS报文传输在TCP/IP 上的实现指南49页 在TCP/IP上的MODBUS映射 TCP IETF RFC 793 MODBUS报文IP IETF RFC 791 传输在串行链路 上的实现指南 45页 串行链路主站/从站以太网II/802.3 IEEE 802.2 TIA/EIA-232-F TIA/EI A-485-A 以太网物理层 MODBUS标准分为三部分。第一部分(“Modbus协议规范”)描述了MODBUS事物处理。第二部分(“MODBUS报文传输在TCP/IP上的实现指南”)提供了一个有助于开发者实现TCP/IP上的MODBUS应用层的参考信息。第三部分(“MODBUS报文传 输在串行链路上的实现指南”)提供了一个有助于开发者实现串行链路上的MODBUS 应用层的参考信息。

GB/T ××××—××××第一部分:Modbus协议 1

modbus协议及modbus_RTU的C51程序

查看完整版本: [-- modbus协议及modbus RTU的C51程序--] 电子工程师之家-> 51单片机论坛-> modbus协议及modbus RTU的C51程序[打印本页]登录-> 注册-> 回复主 题-> 发表主题 一线工人2007-11-15 21:44 modbus协议及modbus RTU的C51程序 完整的程序请下载[attachment=1488] Modbus通讯协议 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的ASCII和RTU协议。

Modbus 通讯协议的原理和标准

Modbus 通讯协议的原理和标准 工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便。Modbus 就是工业控制器的网络协议中的一种。 一、Modbus 协议简介 Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。 当在一Modbus 网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus 协议发出。在其它网络上,包含了Modbus 协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。 1、在Modbus 网络上转输 标准的Modbus 口是使用一RS-232C 兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能直接或经由Modem 组网。 控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据做出相应反应。典型的主设备:主机和可编程仪表。典型的从设备:可编程控制器。 主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。Modbus 协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。 从设备回应消息也由Modbus 协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。 2、在其它类型网络上转输 在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。提供的多个内部通道可允许同时发生的传输进程。 在消息位,Modbus 协议仍提供了主—从原则,尽管网络通信方法是“对等”。如果一控制器发送一消息,它只是作为主设备,并期望从从设备得到回应。同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器。 3、查询—回应周期 (1)查询 查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03 是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。

MODBUS协议说明文档

MODBUS通讯协议说明 1、概述 Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。 本文档通信协议说明详细地描述了MODBUS设备的输入和输出命令、信息和数据,以便第三方使用和开发。 1.1通信协议的作用 使信息和数据在上位机(主站)和MODBUS设备之间有效地传递,允许访问MODBUS设备的所有测量数据。 MODBUS设备可以实时采集现场各种数据值,具备一个RS485通讯口,能满足MODBUS监控系统的要求。 MODBUS设备通信协议采用MODBUS RTU协议,本协议规定了应用系统中主机与MODBUS 设备之间,在应用层的通信协议,它在应用系统中所处的位置如下图所示: 本协议所处的位置 从机: 1.2 物理接口: 连接上位机的主通信口,采用标准串行RS485通讯口,使用压接底座。 信息传输方式为异步方式,主要配置参数,一般默认:起始位1位,数据位8位,停止位1位,无校验,数据传输缺省速率为9600b/s 2、MODBU通信协议详述 2.1 协议基本规则 以下规则确定在回路控制器和其他串行通信回路中设备的通信规则。 1)所有回路通信应遵照主/从方式。在这种方式下,信息和数据在单个主站和从站(监控设备)之间传递。 2)主站将初始化和控制所有在通信回路上传递的信息。 3)无论如何都不能从一个从站开始通信。 4)所有环路上的通信都以“打包”方式发生。一个包裹就是一个简单的字符串(每个字符串8位),一个包裹中最多可含255个字节。组成这个包裹的字节构成标准异步串行数据,并按8位数据位,1位停止位,无校验位的方式传递。串行数据流由类似于RS232C中使用的设备产生。 5)所有回路上的传送均分为两种打包方式: A) 主/从传送 B) 从/主传送 6)若主站或任何从站接收到含有未知命令的包裹,则该包裹将被忽略,且接收站不予响应。

基于Modbus协议实现单片机与PLC之间的通讯

基于Modbus协议实现单片机与PLC之间的通讯 来源:PLC&FA 作者:蔡晓燕赵兴群万遂人董鹏云 关键词:可编程控制器 Modbus 通讯协议 1 引言 HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。它有字母、汉字、图形和图片等不同的显示,界面简单友好。配有长寿命的薄膜按钮键盘,操作简单。它一般采用具有集成度高、速度快、高可靠且价格低等优点的单片机[1]作为其核心控制器,以实现实时快速处理。PLC和单片机结合不仅可以提PLC的数据处理能力,还可以给用户带来友好简洁的界面。本文以Modbus通讯协议为例,详细讨论了一个人机系统中,如何用C51实现单片机和PLC之间通讯的实例。 2 Modbus通讯协议[4] Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。 Modbus协议提供了主—从原则,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。主设备查询的格式:设备地址(或广播,此时不需要回应)、功能代码、所有要发送的数据、和一错误检测域。从设备回应消息包括确认地址、功能码、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。 控制器能设置为两种传输模式:ASCII和RTU,在同样的波特率下,RTU可比ASCII方式传送更多的数据,所以采用KTU模式。 (1) 典型的RTU消息帧 典型的RTU消息帧如表1所示。

RTU消息帧的地址域包含8bit。可能的从设备地址是0...127(十进制)。其中地址0是用作广播地址,以使所有的从设备都能认识。主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。 RTU消息帧中的功能代码域包含了8bits,当消息从主设备发往从设备时,功能代码域将告之从设备需要执行哪些行为;当从设备回应时,它使用功能代码域来指示是正常回应(无误)还是有某种错误发生(称作异议回应,一般是将功能码的最高位由0改为1)。 从主设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代 码所定义的行为。这包括了像不连续的寄存器地址,要处理项的数目,域中实际数据字节数。如果没有错误发生,从从设备返回的数据域包含请求的数据。如果有错误发生,此域包含一异议代码,主设备应用程序可以用来判断采取下一步行动。 当选用RTU模式作字符帧时,错误检测域包含一16Bits值(用两个8位的字符来实现)。错误检测域的内容是通过对消息内容进行循环冗长检测(CRC)方法得出的。CRC域附加在消息的最后,添加时先是低字节然后是高字节。 (2) 所有的Modbus功能码 Modbus的功能码定义如表2所示。

Modbus RTU通讯协议

要实现Modbus RTU通信, 一、需要STEP 7-Micro/WIN32 V3.2以上版本的编程软件,而且须安装STEP 7-Micro/WIN32 V3.2 Instruction Library(指令库)。Modbus RTU功能是通过指令库中预先编好的程序功能块实现的。 Modbus RTU从站指令库只支持CPU上的通信0口(Port0) 基本步骤: 1. 检查Micro/WIN的软件版本,应当是STEP 7-Micro/WIN V3.2以上版本。 2. 检查Micro/WIN的指令树中是否存在Modbus RTU从站指令库(图1),库中应当 包括MBUS_INIT和MBUS_SLAVE两个子程序。 如果没有,须安装Micro/WIN32 V3.2的Instruction Library(指令库)软件包; 1. 西门子编程时使用SM0.1调用子程序MBUS_INIT进行初始化,使用SM0.0调用 MBUS_SLAVE,并指定相应参数。 关于参数的详细说明,可在子程序的局部变量表中找到; 调用Modbus RTU通信指令库图中参数意义如下: a. 模式选择:启动/停止Modbus,1=启动;0=停止 b. 从站地址:Modbus从站地址,取值1~247 c. 波特率:可选1200,2400,4800,9600,19200,38400,57600,115200 d. 奇偶校验:0=无校验;1=奇校验;2=偶校验 e. 延时:附加字符间延时,缺省值为0 f. 最大I/Q位:参与通信的最大I/O点数,S7-200的I/O映像区为128/128, 缺省值为128 g. 最大AI字数:参与通信的最大AI通道数,可为16或32 h. 最大保持寄存器区:参与通信的V存储区字(VW) i. 保持寄存器区起始地址:以&VBx指定(间接寻址方式) j. 初始化完成标志:成功初始化后置1

Modbus标准通讯协议格式

Modbus通讯协议 Modbus协议 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网络协议发送出去即可。所以在这里我仅介绍一下

什么是ModBusRTU通讯协议

什么是ModBusRTU通讯协议 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 网络协议发送出去即可。 (一)、通讯传送方式: 通讯传送分为独立的信息头,和发送的编码数据。以下的通讯传送方式定义也与ModBusRTU通讯规约相兼容: 初始结构= ≥4字节的时间 地址码= 1 字节 功能码= 1 字节 数据区= N 字节 错误校检= 16位CRC码

MODBUS协议解析

MODBUS协议解析 Modbus是OSI模型第7层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。目前,可以通过下列三种方式实现Modbus通信: 以太网上的TCP/IP; 各种介质(有线:EIA/TIA-232-F、EIA-422、EIA/TIA-485-A;光纤、无线等)上的异步串行传输; Modbus PLUS,一种高速令牌传递网络。 作为中国国家标准的“基于Modbus协议的工业自动化网络规范”在描述Modbus应用协议的基础上,提供了Modbus应用协议在串行链路和TCP/IP上的实现指南。 Modbus 通信线 Modbus数据单元 Modbus协议定义了一个与基础通信层无关的简单协议数据单元(PDU),特定总线或网络上的Modbus协议映射能够在应用数据单元(ADU)上引入一些附加域。启动Modbus事务处理的客户机创建Modbus PDU,其中的功能码向服务器指示将执行哪种操作,功能码后面是含有请求和响应参数的数据域。 通用Modbus帧 当Modbus应用在串行链路上时,Modbus ADU的地址域只含有从站地址,而差错校验码是根据报文内容执行“冗余校验”计算的结果,根据使用的传输模式(RTU或ASCII)采用不同的计算方法。 串行链路上的Modbus帧 当Modbus应用在TCP/IP上时,将使用一种专用报文头——MBAP报文头(Modbus应用协议报文头)来识别Modbus应用数据单元。 TCP/IP上的Modbus帧

Modbus标准功能码 Modbus协议定义了三种功能码: 公共功能码:被确切定义的、唯一的功能码,由Modbus-IDA组织确认、可进行一致性测试且已在MB IETF RFC中归档 用户定义的功能码:用户无需Modbus-IDA组织的任何批准就可以选择和实现的功能码,但是不能保证被选功能码的使用是唯一的 保留功能码:某些公司在传统产品上现行使用的功能码,不作为公共使用。 公共功能码定义如下表所示。 Modbus通信原理 Modbus是一种简单的客户机/服务器型应用协议,其通信遵循以下的过程: 客户端准备请求并向服务器发送请求; 服务器分析并处理客户端的请求,然后向客户端发送结果; 如果出现任何差错,服务器将返回一个异常功能码。 Modbus事务处理 统一的标准 Modbus串行链路、Modbus PLUS和Modbus TCP/IP使用的是一种统一的应用协议,因而使得信息从一个网络传输到另一个网络而不需改变通讯协议成为了可能。 当Modbus在TCP/IP上实施时,用户还可以从IP路由功能中得益,使得分布于世界任何地方的设备之间都可以进行通讯。施耐德电气还提供了全套的网关,用于实现Modbus TCP/IP网络与现有的Modbus PLUS 或Modbus串行链路网络之间的互连。 IANA委员会给施耐德电气公司分配了已为大家熟知的TCP 502端口,以专为Modbus协议保留。由此可见,Modbus协议现在已经成为Internet标准。Modbus和Modbus TCP/IP 也被IEC 61158国际标准承认为一种现场总线,同时它们还是由ITEI管理的中国国家标准。 Modbus拥有著名的TCP端口502 Modbus TCP/IP是唯一个被分配到互联网端口的工业以太网专题">工业以太网协议! 23 -Telnet 远程登录协议 21 -FTP 文件传输协议 161 -SNMP 简单网络管理协议 25 -SMTP 简单邮件传输协议 53 -DNS 域名解析服务

基于tcpip协议的Modbus

基于tcp/ip协议的modbus 业以太网与Modbus TCP/IP 一以太网的标准 以太网是一种局域网。早期标准为IEEE802.3,数据链路层使用CSMA/CD,10Mb/s 速度物理层有: (1)10Base5粗同轴电缆,RG-8,一段最长为500m; (2)10Base2细同轴电缆,RG-58,一段最长为185m; (3)10Base T双绞线,UTP或STP,一段最长为100m。 快速以太网为100Mb/s,标准为802.3a,介质为100Base Tx双绞线、100Base Fx光纤。 目前10/100M以太网使用最为普遍,很多企事业用户已实现100M到以太网桌面,确实体验到高速“冲浪”的快感,另外从距离而言,非屏蔽双绞线(UTP)为100m,多模光纤可达2~3km,单模光纤可大于100km。千兆以太网1000Mb/s为802.3z/802.3ab,万兆以太网10Gb/s 为802.3ae,将为新一轮以太网的发展带来新的机遇与冲击。 二工业以太网与商用以太网的区别 什么是工业以太网?技术上,它与IEEE802.3兼容,故从逻辑上可把商用网和工业网看成是一个以太网,而用户可根据现场情况,灵活装配自己的网络部件,但从工业环境的恶劣和抗干扰的要求,设计者希望采用市场上可找到的以太网芯片和媒介,兼顾考虑下述工业现场的特殊要求:首先要考虑高温、潮湿、振动;二是对工业抗电磁干扰和抗辐射有一定要求,如满足EN50081-2、EN50082-2标准,而办公室级别的产品未经这些工业标准测试,表1列出了一些常用工业标准。为改善抗干扰性和降低辐射,工业以太网产品多使用多层线路板或双面电路板,且外壳采用金属如铸铝屏蔽干扰;三是电源要求,因集线器、交换机、收发器多为有源部件,而现场电源的品质又较差,故常采用双路直流电或交流电为其供电,另外考虑方便安装,工业以太网产品多数使用DIN导轨或面板安装;四是通信介质选择,在办公室环境下多数配线使用UTP,而在工业环境下推荐用户使用STP(带屏蔽双绞线)和光纤。

(完整版)MODBUS通讯协议-RTU要点

Modbus 通讯协议 (RTU传输模式)本说明仅做内部参考,详细请参阅英文版本。

第一章Modbus协议简介 Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。 此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。 当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。 协议在一根通讯线上使用应答式连接(半双工),这意味着在一根单独的通讯线上信号沿着相反的两个方向传输。首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,在相反的方向上终端设备发出的应答信号传输给主机。协议只允许在主计算机和终端设备之间,而不允许独立的设备之间的数据交换,这就不会在使它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。 1.1 传输方式 传输方式是一个信息帧内一系列独立的数据结构以及用于传输数据的有限规则,以RTU 模式在Modbus总线上进行通讯时,信息中的每8位字节分成2个4位16进制的字符,每个信息必须连续传输下面定义了与Modebus 协议– RTU方式相兼容的传输方式。 代码系统 ?8位二进制,十六进制数0...9,A...F ?消息中的每个8位域都是一个两个十六进制字符组成 每个字节的位 ?1个起始位 ?8个数据位,最小的有效位先发送 ?1个奇偶校验位,无校验则无 ?1个停止位(有校验时),2个Bit(无校验时) 错误检测域 ?CRC(循环冗长检测)

MODBUS-RTU通讯协议简介

MODBUS-RTU通讯协议简介 2008-10-10 17:27 1.1 Modbus协议简述 ACRXXXE系列仪表使用的是Modbus-RTU通讯协议,MODBUS协议详细定义了校验码、数据序列等,这些都是特定数据交换的必要内容。MODBUS协议在一根通讯线上使用主从应答式连接(半双工),这意味着在一根单独的通讯线上信号沿着相反的两个方向传输。首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,终端设备发出的应答信号以相反的方向传输给主机。 Modbus协议只允许在主机(PC,PLC等)和终端设备之间通讯,而不允许独立的终端设备之间的数据交换,这样各终端设备不会在它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。 1.2 查询—回应周期 1.2.1 查询 查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。 1.2.2 回应 如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:如寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。 1.3 传输方式 传输方式是指一个数据帧内一系列独立的数据结构以及用于传输数据的有限规则,下面定义了与Modbus 协议– RTU方式相兼容的传输方式。 每个字节的位: · 1个起始位 · 8个数据位,最小的有效位先发送 ·无奇偶校验位 · 1个停止位 错误检测(Error checking):CRC(循环冗余校验) 1.4 协议 当数据帧到达终端设备时,它通过一个简单的“端口”进入被寻址到的设备,该设备去掉数据帧的“信封”(数据头),读取数据,如果没有错误,就执行数据所请求的任务,然后,它将自己生成的数据加入到取得的“信封”中,把数据帧返回给发送者。返回的响应数据中包含了以下内容:终端从机地址(Address)、被执行了的命令(Function)、执行命令生成的被请求数据(Data)和一个校验码(Check)。发生任何错误都不会有成功的响应,或者返回一个错误指示帧。 1.4.1 数据帧格式 Address Function Data Check 8-Bits 8-Bits N x 8-Bits 16-Bits 1.4.2 地址(Address)域 地址域在帧的开始部分,由一个字节(8位二进制码)组成,十进制为0~255,

Modbus+RTU+标准通讯协议格式

HLP_SV Modbus RTU 标准通讯协议格式 通信资料格式 Address Function Data CRC check 8 bits 8 bits N×8bits 16bits 1)Address通讯地址:1-247 2)Function:命令码8-bit命令 01 读线圈状态 上位机发送数据格式: ADDRESS 01 ADDRH ADDRL NUMH NUML CRC 注: ADDR: 00000 --- FFFF(ADDR=线圈地址-1);NUM: 0010-----0040 (NUM为要读线圈状态值的二进制数位数) 正确时变频器返回数据格式: ADDRESS 01 BYTECOUNT DA TA1 DA TA2 DA TA3 DA TAN CRC 注: BYTECOUNT:读取的字数 错误时变频器返回数据格式: ADDRESS 0X81 Errornum CRC 注: Errornum为错误类型代码 如:要检测变频器的输出频率 应发送数据:01 01 00 30 00 10 3D C9(16进制) 变频器返回数据:01 01 02 00 20 B8 24(16进制) 发送数据:0030hex(线圈地址49) 返回的数据位为“0020”(16进制),高位与低位互换,为2000。即输出频率为 303(Max Ref)的50%。关于2000对应50%,具体见图1。

03读保持寄存器 上位机发送数据格式: ADDRESS 03 ADDRH ADDRL NUMH NUML CRC 注:ADDR: 0 --- 0XFFFF;NUM: 0010-----0040 (NUM为要读取数据的字数) ADDR=Parameter Numbe r×10-1 正确时变频器返回数据格式: ADDRESS 03 BYTECOUNT DA TA1 DA TA 2 DA TA 3 DA TAN CRC 注: BYTECOUNT:读取的字节数 错误时变频器返回数据格式: ADDRESS 0X83 Errornum CRC 如:要读变频器参数303的设定值 应发送数据:01 03 0B D5 00 02 95 BC (16进制) Parameter 303(3029)=0BD5HEX 变频器返回数据:“:”01 03 04 00 00 EA 60 B5 7B 返回的数据位为“00 00 EA 60”(16进制)转换为10进制数为60000, 表示303设置值为60.000 ※当参数值为双字时,NUM的值必须等于2。否则无法读取或读取错误。 05 写单个线圈状态 上位机发送数据格式: ADDRESS 05ADDRH ADDRL DA TAH DA TAL CRC 注:ADDR: 0 ---- 0XFFFF(ADDR=线圈地址-1);DATA=0000HEX(OFF) OR FF00(ON) HEX 正确时变频器返回数据格式: ADDRESS 05 DATAH DATAL BYTECOUNT CRC 错误时变频器返回数据格式: ADDRESS 0X85 Errornum CRC 如:要使写参数为写入RAM和EEPROM 应发送数据:01 05 00 40 FF 00 CRC(16进制) 变频器返回数据:01 05 FF 00 00 01 CRC(16进制) 发送数据:0040hex(线圈地址65) 06 写单个保持寄存器值(只能写参数值为单个字的参数) 上位机发送数据格式: ADDRESS 06 ADDRH ADDRL DA TAH DA TAL CRC 注:ADDR: ADDR=Parameter Numbe r×10-1 正确时变频器返回数据格式: ADDRESS 06 ADDRH ADDRL DA TAH DA TAL CRC 错误时变频器返回数据: ADDRESS 0X86 Errornum CRC 如:要对变频器参数101写入1 应发送数据:01 06 00 03 F1 00 01 19 BD(16进制) 变频器返回数据:01 06 03 F1 00 01 19 BD(16进制) PARAMETER 101(1009)=03F1 HEX

很好的威纶通MODBUSRTU通讯协议与变频器通讯案例

很好的威纶通 M O D B U S R T U通讯协议与变频器通讯案例 公司标准化编码 [QQX96QT-XQQB89Q8-NQQJ6Q8-MQM9N]

本文研究的是触摸屏通过MODBUS RTU通讯协议与变频器通讯实现变频器的控制。触摸屏采用威纶通TK6070IP,变频器用汇川MD380通用系列。通过触摸屏编程软件,编辑控制画面实现变频器的启动、停止、速度调节、多段速速度设置,通过宏指令实现工程值与实际值的转换。 一、MODBUS RTU 简介: 为了在自动化系统之间、自动化系统和所连接的分散的现场设备之间进行信息交换,如今串行现场总线被主要用作通讯系统。成千上万的应用已经强烈地证明了通过使用现场总线技术,可以节省多至40%的接线、调试及维护的费用。仅仅使用两根电线就可以传送现场设备的所有相关信息,比如输入和输出数据、参数、诊断数据。过去使用的现场总线往往是制造商的特定现场总线,并且同其它现场总线不兼容。如今使用的现场总线几乎是完全公开和标准化的。这就意味者用户可以以最合理的价格选择最好的产品,而不用依赖于每个独立的制造商。Modbus RTU是一种国际的、开放的现场总线标准。作为一种很容易实现的现场总线协议,在全世界范围内,Modbus得到了成功的应用。应用领域包括生产过程中的自动化、过程控制和楼宇自控。MODBUS RTU通讯协议的报文如图1。 图1 MODBUS RTU 通讯协议的报文功能码如下: 01H 读取线圈状态。从执行机构上读取线圈(单个位)的内容; 02H 读取离散量输入。从执行机构上读取离散量输入(多个位)的内容; 03H 读取保持寄存器。从执行机构上读取保持寄存器(16位字)的内容; 04H 读取输入寄存器。从执行机构上读取输入寄存器(16位字)的内容; 05H 强置单线圈。写数据到执行机构的线圈(单个位)为“通”(“1”)或“断”(“0”); 06H 预置单寄存器。写数据到执行机构的单个保持寄存器(16位字); 0FH 强置多线圈。写数据到执行机构的几个连续线圈(单个位)为“通”(“1”) 或“断”(“0”); 10H 预置多寄存器。写数据到执行机构的几个连续的保持寄存器(16位字)。 二、威纶通编程软件介绍: EB8000软件中MODBUS协议的设备类型为0x、1x、3x、4x、5x、6x,还有 3x_bit,4x_bit,6x_bit,0x_multi_coils等,下面分别说明这些设备类型在MODBUS协议中支持哪些功能码。 0x:是一个可读可写的设备类型,相当于操作PLC的输出点。该设备类型读取位状态的时候,发出的功能码是01H,写位状态的时候发出的功能码是05H。写多个寄存器时发出的功能码是0fH。

相关文档
最新文档