modbus标准协议.doc

上传人:文库蛋蛋多 文档编号:4138042 上传时间:2023-04-07 格式:DOC 页数:22 大小:38.50KB
返回 下载 相关 举报
modbus标准协议.doc_第1页
第1页 / 共22页
modbus标准协议.doc_第2页
第2页 / 共22页
modbus标准协议.doc_第3页
第3页 / 共22页
modbus标准协议.doc_第4页
第4页 / 共22页
modbus标准协议.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《modbus标准协议.doc》由会员分享,可在线阅读,更多相关《modbus标准协议.doc(22页珍藏版)》请在三一办公上搜索。

1、modbus标准协议篇一:Modbus标准通讯协议格式 Modbus通讯协议 Modbus协议 Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化 (Schneider Automation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。此协议支持传统的RS-232、RS-422、RS-485和以太网设备。许多工业设备,包括PLC,DCS,智能仪表等都在使用Modbus协议作为他们之间的通讯标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。 当在网络上通信时,Modbus协议决定了每个控制器须要知道它们的设备地址,识别按地址

2、发来的消息,决定要产生何种行动。如果需要回应,控制器将生成应答并使用Modbus协议发送给询问方。 Modbus协议包括ASCII、RTU、TCP等,并没有规定物理层。此协议定义了控制器能够认识和使用的消息结构,而不管它们是经过何种网络进行通信的。标准的Modicon控制器使用RS232C实现串行的Modbus。Modbus的ASCII、RTU协议规定了消息、数据的结构、命令和就答的方式,数据通讯采用Maser/Slave方式,Master端发出数据请求消息,Slave端接收到正确消息后就可以发送数据到Master端以响应请求;Master端也可以直接发消息修改Slave端的数据,实现双向读写

3、。 Modbus协议需要对数据进行校验,串行协议中除有奇偶校验外,ASCII模式采用LRC校验,RTU模式采用16位CRC校验,但TCP模式没有额外规定校验,因为TCP协议是一个面向连接的可靠协议。另外,Modbus采用主从方式定时收发数据,在实际使用中如果某Slave站点断开后(如故障或关机),Master端可以诊断出来,而当故障修复后,网络又可自动接通。因此,Modbus协议的可靠性较好。 下面我来简单的给大家介绍一下,对于Modbus的ASCII、RTU和TCP协议来说,其中TCP和RTU协议非常类似,我们只要把RTU协议的两个字节的校验码去掉,然后在RTU协议的开始加上5个0和一个6并

4、通过TCP/IP网络协议发送出去即可。所以在这里我仅介绍一下Modbus的ASCII和RTU协议。 下表是ASCII协议和RTU协议进行的比较: 协议 开始标记 结束标记 校验 传输效率 程序处理 ASCII :(冒号) CR,LF LRC 低 直观,简单,易调试 RTU 无 无 CRC 高 不直观,稍复杂 通过比较可以看到,ASCII协议和RTU协议相比拥有开始和结束标记,因此在进行程序处理时能更加方便,而且由于传输的都是可见的ASCII字符,所以进行调试时就更加的直观,另外它的LRC校验也比较容易。但是因为它传输的都是可见的ASCII字符,RTU传输的数据每一个字节ASCII都要用两个字节

5、来传输,比如RTU传输一个十六进制数 0xF9,ASCII就需要传输F9的ASCII码0x39和0x46两个字节,这样它的传输的效率就比较低。所以一般来说,如果所需要传输的数据量较小可以考虑使用ASCII协议,如果所需传输的数据量比较大,最好能使用RTU协议。 下面对两种协议的校验进行一下介绍。 1、LRC校验 LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。 LRC校验比较简单,它在ASCII协议中使用,检测了消息域中除开始的冒号及结束的回车换行号外的内容

6、。它仅仅是把每一个需要传输的数据按字节叠加后取反加1即可。下面是它的VC代码: BYTE GetCheckCode(const char * pSendBuf, int nEnd)/获得校验码 BYTE byLrc = 0; char pBuf4;int nData = 0; for(i=1; i<end; i+=2) /i初始为1,避开“开始标记”冒号 /每两个需要发送的ASCII码转化为一个十六进制数 pBuf 0 = pSendBuf i; pBuf 1 = pSendBuf i+1; pBuf 2 = '0' sscanf(pBuf,%x,& nData)

7、; byLrc += nData; byLrc = byLrc; byLrc +; return byLrc; 2、CRC校验 CRC域是两个字节,包含一16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。 CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。 CRC产生过程中,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取

8、出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。最终寄存器中的值,是消息中所有的字节都执行之后的CRC值。 CRC添加到消息中时,低字节先加入,然后高字节。下面是它的VC代码: WORD GetCheckCode(const char * pSendBuf, int nEnd)/获得校验码 WORD wCrc = WORD(0xFFFF);篇二:modbus协议标准(转 载于:wWw.xLTkwj.cOM 小 龙 文档网:modbus标准协议)新版 目 录 一概述.2 二功

9、能码分类.5 三地址分配及功能码使用.6 3.1 开关量输出.6 3.2 开关量输入.6 3.3 模拟量输入.7 3.4 设备标识信息.7 3.5 模拟输出及系统参数.7 3.6 系统参数.20 四功能码描述.23 4.1 01(0x01)读线圈.23 4.2 02(0x02)读离散量输入.24 4.3 03(0x03)读保持寄存器.27 4.4 04(0x04)读输入寄存器.29 4.5 05(0x05)写单个线圈.31 4.6 06(0x06)写单个寄存器.33 4.7 15(0x0F)写多个线圈.35 4.8 16(0x10)写多个保持寄存器.37 4.9 43/14(0x2B/0x0E

10、)读设备标识.39 4.10 65(0x41)读标定参数及相关系统参数.41 4.11 66(0x42)写多个标定参数及相关系统参数.41 五Modbus异常响应.42 六Modbus协议在串行链路上的实现规范.43 6.1 Modbus主/从协议原理.43 6.2 Modbus寻址规则.43 6.3 Modbus帧描述.43 6.4 主站/从站状态图.446.4.1 主站状态图.446.4.2 从站状态图.45 6.5 串行传输模式.466.5.1 Modbus报文RTU帧.476.5.2 CRC校验.48一概述 此次Modbus RTU通讯协议标准的制定参照GB/T 195822008基于

11、Modbus协议的工业自动化网络规范。协议中规定了功能码的使用和数据地址的分配,Modbus通讯协议的实现请参照GB/T 195822008基于Modbus协议的工业自动化网络规范。 GB/T 195822008分为三部分: 第1部分:Modbus应用协议; 第2部分:Modbus协议在串行链路上的实现指南; 第3部分:Modbus协议在TCP/IP上的实现指南。 第1部分描述了Modbus事物处理;第2部分提供了有助于开发者在串行链路上实现Modbus应用层的参考信息;第3部分提供了有助于开发者在TCP/IP上实现Modbus应用层的参考信息。 GB/T 195822008包括两个通信规程中

12、使用的Modbus应用层协议和服务规范: 串行链路上的Modbus 基于TIA/EIA标准:232E和485A; TCP/IP上的Modbus基于IETF标准:RFC793和RFC791。 Modbus是一种请求/应答协议,并提供功能码规定的服务。协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上的Modbus协议映射能够在数据单元(ADU)上引入一些附加字段,如图1.1所示。 ADU PDU 图1.1 通用Modbus通讯帧 在一个正确接收的Modbus ADU中,如果不出现与请求的Modbus功能有关的差错,那么设备至上位机的相应数据字段包括所要求的数据。如果出现

13、与所要求的Modbus功能有关的差错,那么该字段包括一个异常码。当设备对上位机响应时,它使用功能码字段来只是正常(无差错)响应(见图1.2)或出现某中差错(异常响应,见图1.3)。 图1.2 Modbus事务处理(无差错)对于正常响应,设备仅复制原始功能码。对于异常响应,设备将请求PDU中的原始功能的最高有效位设置逻辑1后返回。 图1.3 Modbus事务处理(异常响应) 注意:需要超时管理,以免无期限的等待可能不会出现的应答。 串行通讯链路上Modbus ADU的长度最大为256字节,则Modbus PDU=256-设备地址(1字节)-CRC(2字节)=253字节。 Modbus事务处理:

14、图1.4是Modbus事务处理状态图,描述了在设备上Modbus事务处理的一般过程。一旦设备处理请求,就使用相应的Modbus事务处理生成Modbus响应。根据处理结果,可以建立两种类型的响应: 一个正常的Modbus响应:响应功能码=请求功能码。 一个异常的Modbus响应: 1)用来为上位机提供处理过程中与所发现的差错相关的信息; 2)异常功能码=请求功能码+0x80; 3)提供一个异常码来指示差错原因。图1.4 Modbus事务处理的状态图 注:MB(Modbus Protocol) Modbus协议。二功能码分类 本协议中规定了11种功能码,其功能如表2.1所示: 表2.1 功能码分类

15、表 篇三:Modbus 通讯协议的原理和标准 Modbus 通讯协议的原理和标准 工业控制已从单机控制走向集中监控、集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便。Modbus 就是工业控制器的网络协议中的一种。 一、 Modbus 协议简介 Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的

16、过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。 当在一 Modbus 网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用 Modbus 协议发出。在其它网络上,包含了 Modbus 协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。 1、在 Modbus 网络上转输 标准的 Modbus 口是使用一 RS-232C 兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能直

17、接或经由 Modem 组网。 控制器通信使用主从技术,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据做出相应反应。典型的主设备:主机和可编程仪表。典型的从设备:可编程控制器。 主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。Modbus 协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。 从设备回应消息也由 Modbus 协议构成, 包括确认要行动的域、 任何要返回的数据、 和一错误检测域。如果在消息接收过程中发生一错误,或从设

18、备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。 2、在其它类型网络上转输 在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。提供的多个内部通道可允许同时发生的传输进程。 在消息位,Modbus 协议仍提供了主从原则,尽管网络通信方法是“对等”。如果一控制器发送一消息,它只是作为主设备,并期望从从设备得到回应。同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器。 3、查询回应周期 (1)查询 查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功

19、能的任何附加信息。例如功能代码 03 是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。(2)回应 如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:象寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。 二、 两种传输方式 控制器能设置为两种传输模式(ASCII 或 RTU)中的任何一种在标准的 Modbus 网

20、络通信。用户选择想要的模式,包括串口通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个 Modbus网络上的所有设备都必须选择相同的传输模式和串口参数。 ASCII 模式 RTU 模式 所选的 ASCII 或 RTU 方式仅适用于标准的 Modbus 网络, 它定义了在这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。 在其它网络上(象 MAP 和 Modbus Plus)Modbus 消息被转成与串行传输无关的帧。 1、ASCII 模式 当控制器设为在 Modbus 网络上以 ASCII(美国标准信息交换代码)模式通信,在消息中的每个 8Bit字节都作

21、为两个 ASCII 字符发送。这种方式的主要优点是字符发送的时间间隔可达到 1 秒而不产生错误。 代码系统 十六进制,ASCII 字符 0.9,A.F 消息中的每个 ASCII 字符都是一个十六进制字符组成每个字节的位 1 个起始位 7 个数据位,最小的有效位先发送 1 个奇偶校验位,无校验则无 CRC 域是两个字节,包含一 16 位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的 CRC,并与接收到的 CRC 域中的值比较,如果两值不同,则有误。 CRC 是先调入一值是全“1”的 16 位寄存器,然后调用一过程将消息中连续的 8 位字节各当前寄存器中的值进行处理。 仅每

22、个字符中的8Bit数据对CRC有效, 起始位和停止位以及奇偶校验位均无效。 CRC 产生过程中,每个 8 位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以 0 填充。LSB 被提取出来检测,如果 LSB 为 1,寄存器单独和预置的值或一下,如果 LSB为 0,则不进行。整个过程要重复 8 次。在最后一位(第 8 位)完成后,下一个 8 位字节又单独和寄存器的当前值相或。最终寄存器中的值,是消息中所有的字节都执行之后的 CRC 值。 CRC 添加到消息中时,低字节先加入,然后高字节。 CRC 简单函数如下: unsigned short CRC16(puchMsg,

23、usDataLen) unsigned char *puchMsg ; /* 要进行 CRC 校验的消息 */ unsigned short usDataLen ; /1, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x0

24、1, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81

25、, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00

26、, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81

27、, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01

28、, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 ; /* CRC 低位字节值表*/ static char auchCRCLo = 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8,

29、 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC,

30、 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1,

31、 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7,

32、 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A,

33、 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 ; ModBus 网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。下表 1 是 ModBus 的功能码定义。 表 1 ModBus 功能码 01 READ COIL STATUS 02 READ I

34、NPUT 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 ModBus 网络只是一个主机,所有通信都由他发出。网络可支持 247 个之多的远程从属控制器,但实际所支持的从机数要由所用通信设备决定。采用这个系统,各 PC 可以和中心主机交换信息而不影响各 PC 执行本身的控制任务。表 2 是 ModBus 各功能码对应的数据类型。 表 2 Modbus 功能与数据类型对应表 (1)ModBus 的传输方式 在 ModBus 系统中有 2 种传输模式可选择。这 2 种传输模式与从机 PC 通信的能力是同等的。选择时应视所用 ModBus 主机而定,每个 ModBus 系统只能使用一种模式,不允许 2 种模式混用。一种模式是 ASCII(美国信息交换码),另一种模式是 RTU(远程终端设备)这两种模式的定义见表 3

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号