版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘要工业控制已从单机控制走向集中监控、 集散控制, 如今已进入网络时代, 工业控 制器连网也为网络管理提供了方便。 Modbus 就是工业控制器的网络协议中的一种。 Modbus 协议是应用于电子控制器上的一种通用语言。 通过此协议, 控制器相互之间、 控制器经由网络 (例如以太网) 和其它设备之间可以通信。 它已经成为一通用工业标 准。 有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构, 而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程, 如果回应来自其它设备的请求, 以及怎样 侦测错误并记录。它制定了消息域格
2、局和容的公共格式。 当在一 Modbus 网络上通 信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息, 决定要产生何种行动。 如果需要回应, 控制器将生成反馈信息并用 Modbus 协议发出。 在其它网络上, 包含了 Modbus 协议的消息转换为在此网络上使用的帧或包结构。 这 种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。Modbus 通信协议作为所有 Mdicon 可编程控制器普遍采用的工业通信协议,具有标准开放、价格低廉的优点。目前 ,该协议已经作为现场总线的一种 ,成为智能仪表、总线控制等领域事实上的行业标准之一。关键词: Modbus 协
3、议;串行通信; LRC 校验; CRC 校验目录摘要1第1章 概论3第2章 Modbus协议的两种传输模式 62.1.1 ASCII 模式62.2.1 ASCII 帧 72.2.2 RTU 帧7第3章 ModBus协议的消息帧 133.1 ASCII模式的帧 133.2 RTU模式的消息帧 133.3 地址域 143.5数据域 153.6错误检测域 163.7 字符的连续传输 16第4章错误检测方法 174.1奇偶校验174.2 LRC 检测175.1 LRC纵向冗余校验 20把LRC放入信息中 205.2 CRC循环冗余校验215.2.1 把CRC值放入信息中 215.2.2 CRC 生成2
4、2字节表23参考文献29致30第 1 章 概论Modbus 协议是应用于电子控制器上的一种通用语言。它是 Modicon 公司于 1978年发明的一种用于电子控制器进行控制和通讯的通讯协议。通过此协议, 控制器之间、控制器经由网络(例如以太网)和其它设备之间可以通信。在进入网络时代的今天, 工业控制器连网也为网络管理提供了方便。 它的开放性、 可扩充性和标准化使它成为 一个通用工业标准。 有了它,不同厂商生产的控制设备可以简单可靠地连成工业网络, 进行系统的集中监控,从而使它成为最流行的协议之一。ModBus 可以应用在支持 ModBus 协议的 PLC 和 PLC 之间、 PLC 和个人计算
5、机 之间、计算机和计算机之间、 Modbus 可编程控制器之间可相互通讯,也可与不同网 络上的其他设备进行通讯, 支撑网络有 Modicon 的 Modbus 和 Modbus+ 工业网络。 网 络信息存取可由控制器置的端口,网络适配器以及 Modicon 提供的模块选件和网关 等设备实现,对OEM(机械设备制造商)来说,Modicon可为合作伙伴提供现有的程序, 可使 Modbus+ 网络紧密地集成到他们的产品设计中去。Modicon 的各种控制器使用的公共语言被称为 Modbus 协议,该协议定义了控制 器能识别和使用的信息结构。 当在 Modbus 网络上进行通讯时, 协议能使每一台控制
6、 器知道它本身的设备地址,并识别对它寻址的数据, 决定应起作用的类型, 取出包含在信息中的数据和资料等,控制器也可组织回答信息, 并使用 Modbus 协议将此信息传送出去。在其他网络上使用时,数据包和数据帧中也包含着 Modbus 协议。如, Modbus+ 或 MAP 网络控制器中有相应的应用程序库和驱动程序,实现嵌入式Modbus 协议信息与此网络中用子节点设备间通讯的特殊信息帧的数据转换。该转换也可扩展,处理节点地址,路由,和每一个特殊网络的错误检查方法。如 包含在 Modbus 协议中的设备地址, 在信息发送前就转换成节点地址, 错误检查区也 用于数据包,与每个网络的协议一致,最后一
7、点是需用 Modbus 协议,写入嵌入的信 息,定义应处理的动作。图 1 说明了采用不同通讯技术的多层网络中设备的互连方法。 在信息交换中, 嵌 入到每个网络数据包中的 Modbus 协议,提供了设备间能够交换数据的公共的语言。I MODBUS f230 I'编程器MODBUS PIUSAPMG-9H4 IW4A/BIIMD IAND IBMB6 IHOST'MMI IS985IIMODBUiMODBUSP230 I 编程器4 个 Modus设备或网图1: Modbus协议应用示意图Modbus上的数据传输Modicon控制器上的标准 Modbus端口是使用一个 RS-232兼
8、容的串行接口,定 义了连接器,接线电缆,信号等级,传输波特率,和奇偶校验,控制器可直接或通过 调制解调器(以后简称 Modems)接入总线(网络)。控制器通讯使用主从技术,即主机 能起动数据传输,称查询。而其它设备(从机)应返回对查询作出的响应,或处理查询所要求的动作。典应的主机设备应包括主处理器和编程器。典应的从机包括可编程控制器。主机可对各从机寻址,发出广播信息,从机返回信息作为对查询的响应。从机对于主机的广播查询,无响应返回Modbus协议报据设备地址,请求功能代码,发送数据,错误校验码,建立了主机查询格式,从机的响应信息也用Modbus协议组织,它包括确认动作的代码, 返回数据和错误校
9、验码。 若在接收信息时出现一个错误或从机不能执行要求的动作时,从机会组织一个错误信息。并向主机发送作为响应。在其它总线上传输数据。除标准的Modbus功能外,有些 Modcon控制器置端口或总线适配器,在Modbus+总线上实现通讯或使用网络适配器,在MAP网络上通讯。在这些总线上,控制器间采用对等的技术进行通讯,即任意一个控制器可向其它控制器启动数据传送。因此,一台控制器既可作为从机,也可作为主机,常提供多重的部通道, 允许并列处理主机和从机传输数据,在信息级,尽管网络通讯方法是对等的,但 Modbus协议仍采用主从方式,若一台控制器作为主机设备发送一个信息,则可从一 台从机设备返回一个响应
10、,类似,当一台控制器接受信息时,它就组织一个从机设备的响应信息,并返回至原发送信息的控制器。查询响应周期:主机查询信息从机响应信息图2:主从查询响应周期数据字节中包含从机查询中的功能代码为被寻址的从机设备应执行的动作类型。须执行功能的各附加信息,如功能代码03将查询从机,并读保持寄存器。并用寄存器的容作响应。该数据区必须含有告之从机读取寄存器的起始地址及数量,错误校验区的一些信息,为从机提供一种校验方法,以保证信息容的完整性。从机正常响应时,响应功能码是查询功能码的应答,数据字节包含从机采集的数据,如寄存器值或状态。如出现错误,则修改功能码,指明为错误响应。并在数据字 节中含有一个代码,来说明
11、错误,错误检查区允许主机确认有效的信息容。第 2 章 Modbus 协议的两种传输模式2.1 ASCII 与 RTU 模式控制器可使用 ASCII 或 RTU 通讯模式,在标准 Modbus 上通讯。在配置每台控 制器时,用户须选择通讯模式以及串行口的通讯参数。( 波特率,奇偶校验等 ) ,在Modbus 总线上的所有设备应具有相同的通讯模式和串行通讯参数。选择 ASCII 或 RTU 模式用于标准的 Modbus 总线。它定义了总线上串行传输信 息区的“位”的含义,决定信息打包及解码方法。如在 MAP 和 Modbus+ 总线上时, Modbus 信息以帧的方式出现,并与串行传输无关, 如请
12、求读保持寄存器可以在 Modbus+ 上的两个控制器之间处理,而与使用的控制器 的 Modbus 端口无关。2.1.1 ASCII 模式当控制器以 ASCII 模式在 Modbus 总线上进行通讯时, 一个信息中的每 8 位字节 作为 2 个 ASCII 字符传输的,这种模式的主要优点是允许字符之间的时间间隔长达IS,也不会出现错误。ASCII 码每一个字节的格式: 编码系统: 16 进制, ASCII 字符 0-9,A-F 数据位: 1 起始位 7 位数据,低位先送 奇/偶校验时 1 位;无奇偶校验时 0 位(LRC)1 位带校验 1停止位;无校验 2止位 错误校验区: 纵向冗余校验2.1.
13、2 ASCII RTU 模式控制器以 RTU 模式在 Modbus 总线上进行通讯时,信息中的每 8 位字节分成 2 个 4 位 16 进制的字符,该模式的主要优点是在相同波特率下其传输的字符的密度高 于 ASCII 模式,每个信息必须连续传输。RTU 模式中每个字节的格式: 编码系统: 8 位二进制,十六进制 0-9 , A-F 数据位: 1 起始位 8 位数据,低位先送 奇/偶校验时 1 位;无奇偶校验时 0 位停止位1位(带校验);停止位2位(无校验)带校验时1位停止位;无校验时 2位停止位错误校验区:循环冗余校验(CRC)2.2 Modbus信息帧何论是ASCII模式还是RTU模式,M
14、odbus信息以帧的方式传输,每帧有确定 的起始点和结束点, 使接收设备在信息的起点开始读地址,并确定要寻址的设备(广播时对全部设备),以及信息传输的结束时间。可检测部分信息,错误可作为一种结 果设定。对MAP或Modbus+协议可对信息帧的起始和结束点标记进行处理,也可管理发送至目的地的信息,此时,信息传输中Modbus数据帧的目的地址已无关紧要,因为Modbus+地址已由发送者或它的网络适配器把它转换成网络节点地址和路由。2.2.1 ASCII 帧在ASCII模式中,以(:)号(ASCII3AH)表示信息开始,以回撤一换行键(CRLF)(ASCII OD 和OAH)表示信息结束。对其它的区
15、,允许发送的字符为 16进制字符0-9,A-F。网络中设备连续检测并接 收一个冒号(:)时,每台设备对地址区解码,找出要寻址的设备。字符之间的最大间隔为1S,若大于1S,则接收设备认为出现了一个错误。典型的信息帧见下表开始地址功能数据纵向冗余检查结束1字符2字符2字符n字符2字符2字符图3 ASCII信息帧例外:对于 584和984A/B/X 控制器,一个 ASCII信息可在LRC区后正常终止,而 不需发送CRLF字符,此时出现IS的时间间隔,控制器也将认为是正常中断。2.2.2 RTU 帧RTU模式中,信息开始至少需要有3.5个字符的静止时间,依据使用的波特率,很容易计算这个静止的时间(如下
16、图中的T1-T2-T3-T4)。接着,第一个区的数据为设备地址。网络上的设备连续监测网络上的信息,包括静止时间。当接收第一个地址数据时,每台设备立即对它解码,以决定是否是自己的地址。发送完最后一个字符号后,也有一个3.5个字符的静止时间,然后才能发送一个新的信息。整个信息必须连续发送。如果在发送帧信息期间,出现大于1.5个字符的静止时间时,则接收设备刷新不完整的信息,并假设下一个地址数据。同样一个信息后,立即发送的一个新信息,(若无3。5个字符的静止时间)这将会产生一个错误。是因为合并信息的CRC校验码无效而产生的错误。开始地址功能数据校验终止T1-T2-T3-T48 B位S8 B位SNX 8
17、 B 位 S16B 位 ST1-T2-T3T-4图4 RTU信息帧2.3 Modbus信息帧设置地址设置信息地址包括 2个字符(ASCII)或8位(RTU),有效的从机设备地址围0-247,(十进制),各从机设备的寻址围为1-247。主机把从机地址放入信息帧的地址区,并向从机寻址。从机响应时,把自己的地址放入响应信息的地址区,让主机识别已作出响应的从机地址。地址0为于广播地址,所有从机均能识别。当Modbus协议用于高级网络时,则不允许广播或其它方式替代。如Modbus+使用令牌循环,自动更新共享的数据库。功能码设置信息帧功能代码包括字符 (ASCII)或8位(RTU)。有效码围1-225(十
18、进制),其中 有些代码适用全部型号的 Modicon控制器,而有些代码仅适用于某些型号的控制器。 还有一些代码留作将来使用,有关功能代替码的设置将在第2章说明。当主机向从句发送信息时, 功能代码向从机说明应执行的动作。 如读一组离散式 线圈或输入信号的ON/OFF状态,读一组寄存器的数据,读从机的诊断状态,写线圈(或寄存器),允许下截、记录、确认从机的程序等。当从机响应主机时,功能代 码可说明从机正常响应或出现错误(即不正常响应),正常响应时,从句简单返回原始功能代码;不正常响应时,从机返回与原始代码相等效的一个码,并把最高有效位设定为“ 1”。如,主机要求从机读一组保持寄存器时,则发送信息的
19、功能码为:0000 0011 (十六进制 03)若从机正确接收请求的动作信息后, 则返回相同的代码值作为正常响应。 发现错 时,则返回一个不正常响信息:1000 0011( 十六进制 83) 从机对功能代码作为了修改,此外,还把一个特殊码放入响应信息的数据区中, 告诉主机出现的错误类型和不正常响应的原因。 主机设备的应用程序负责处理不正常 响应,典型处理过程是主机把对信息的测试和诊断送给从机,并通知操作者。数据区的容数据区有 2 个 16 进制的数据位,数据围为 00-FF(16 进制 ),根据网络串行传输 的方式,数据区可由一对 ASCII 字符组成或由一个 RTU 字符组成。主机向从机设备
20、发送的信息数据中包含了从机执行主机功能代码中规定的请求 动作,如离散量寄存器地址,处理对象的数目,以及实际的数据字节数等。举例说明,若主机请求从机读一组寄存器(功能代码03),该数据规定了寄存器的起始地址,以及寄存器的数量。又如,主机要在一从机中写一组寄存器, (则功能 代码为 10H )。该数据区规定了要写入寄存区的起始地址,寄存器的数量,数据的字 节数,以及要写入到寄存器的数据。若无错误出现, 从机向主机的响应信息中包含了请求数据, 若有错误出现, 则数 据中有一个不正常代码,使主机能判断并作出下一步的动作。数据区的长度可为“零”以表示某类信息,如,主机要求-从机响应它的通讯事件记录(功能
21、代码 OBH )。此时,从机不需要其他附加的信息,功能代码只规定了该 动作。2.3.3 串行传送信息在标准的 Modbus 上传送的信息中,每个字符或字节,按由左向右的次序传送:最低有效位: ( LSB )最高有效位: ( MSB )ASCII 数据帧位序:带奇偶校Stan1234567ParStop无奇偶校Stan134567SlopSlopstart1234567aParSlopStart123斗61aSlop图5 ASCII位序234错误校验方法标准的Modbus串行通讯网络采用两种错误校验方法,奇偶校验(奇或偶)可用于校验每一个字符,信息帧校验(LRC或CRC)适用整个信息的校验,字符
22、校验和信息帧校验均由主机设备产生,并在传送前加到信息中去。从机设备在接收信息过程中校 验每个字符和整个信息。主机可由用户设置的一个预定时间间隔,确定是否放弃传送信息。 该间隔应有足够的时间来满足从机的正常响应。若主机检测到传输错误时,则传输的信息无效。 从机不再向主机返回响应信息。此时,主机会产生一个超时信息,并允许主机程序处理该错误信号。注意:主机向实际并未存在的从机发送信息时也会引起超时出错信号。在MAP或Modbus+等其它网骆上使用时,采用比Modbus更高一级的数据帧校验方法。在这些网络中,不再运用Modbus中的LRC或CRC校验方法。当出现发送错误时, 网络中的通讯协议通知发送设
23、备有错误出现,并允许根据设置的情况, 重试或放弃信息发送。 若信息已发送, 但从机设备未作响应, 则主机通过程序检查后发出 一个超时错误。a. 奇偶校验 用户可设置奇偶校验或无校验,以此决定每个字符发送时的奇偶校验位的状态。何论是奇或偶校验,它均会计算每个字符数据中值为“1”的位数, ASCII 方式为位数据; RTU 方式为 8位数据。并根据“ 1”的位数值 (奇数或偶数 )来设定为 “0”或“1” 如一个 RTU 数据帧中 8 位数据位为:1100 0101在该帧中,值为“ 1”的总位数为 4,即偶数。如采用奇校验方式时,则“ 1”的总位数为奇数,即 5。发送信息时,计算奇偶位,并加到数据
24、帧中,接收设备统计位值为“1”的数量,若与该设备要求的不一致时产生一个错误。 在 Modbus 总线上的所有设备必须采用相 同的奇偶校验方式。注意:奇偶校验只能检测到数据帧在传输过程中丢失奇数 “位”时才产生的错误。 如采用奇数校验方式时,一个包含3 个“ 1”位的数据丢失 2个“ 1”位时,其结果仍然是奇数。若无奇偶校验方式时,传输中不作实际的校验,应附加一个停止位。b. LRC 校验ASCII 方式时,数据中包含错误校验码,采用 LRC 校验方法时, LRC 校验信息 以冒号“ :”开始,以 CRLF 字符作为结束。它忽略了单个字符数据的奇偶校验的方 法。LRC 校验码为 1 个字节, 8
25、 位二进制值,由发送设备计算 LRC 值。接收设备在 接收信息时计算 LRC 校验码。并与收到的 LRC 的实际值进行比较,若二者不一致, 亦产生一个错误。在梯形图中, CKSM 函数可计算数据信息中 LRC 的校验。用于主计算机时请查 阅附录 C 中的一个实例,它详细说明 LRC 的校验的过程。错误校验方法c. CRC 校验RTU 方式时,采用 CRC 方法计算错误校验码, CRC 校验传送的全部数据。它忽 略信息中单个字符数据的奇偶校验方法。CRC 码为 2 个字节, 16 位的二进制值。 由发送设备计算 CRC 值,并把它附到信 息中去。接收设备在接收信息过程中再次计算 CRC 值并与
26、CRC 的实际值进行比较, 若二者不一致,亦产生一个错误,校验开始时,把 16 位寄存器的各位都置为“ 1”, 然后把信息中的相邻 2 个 8 位字节数据放到当前寄存器中处理,只有每个字符的 8 位数据用于 CRC 处理。起始位,停止位和校验位不参与 CRC 计算。CRC 校验时,每个 8 位数据与该寄存器的容进行异或运算,然后向最低有效位(LSB)方向移位,用零填入最高有效位(MSB)后,再对LSB检查,若LSB=1,则寄存器与预置的固定值异或,若 LSB=0 ,不作异或运算。重复上述处理过程,直至移位 8 次,最后一次 (第 8 次 )移位后,下一个 8 位字节 数据与寄存器的当前值异或,
27、 再重复上述过程。 全部处理完信息中的数据字节后, 最 终得到的寄存器值为 CRC 值。CRC 值附加到信息时,低位在先,高位在后。在梯形图中,CKSM 函数计算信息中的 CRC 值。用于主计算机时, 可查阅附录 C 中的一个实例, 它详细说明了 CRC 的校验。第3章 ModBus协议的消息帧两种传输模式中(ASCII或RTU),传输设备以将 Modbus消息转为有起点和终 点的帧,这就允许接收的设备在消息起始处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给所有设备),判知何时信息已完成。部分的消息也能侦测到并且错误能设置为返回结果。3.1 ASCII模式的帧当控制器设为在
28、ModBus网络上以ASCII模式通信,在消息中的每个 8Bit字节 都作为两个ASCII字符发送。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。设备迪址LIC校验结束符1个孚符2个字符2阿表3-1信息帧结构:地址 功能代码 数据数量 数据1 .数据n LRC高字节LRC低字节 回车 换 行。如表3-1所示,使用ASCII模式,消息以冒号(:)字符(ASCII码3AH )作为 起始位,以回车换行符(ASCII码ODH, 0AH )作为结束符。传输过程中,网络上的 设备不断侦测“:”字符,当有一个冒号接收到时,每个设备就解码下个位的地址域, 来判断是否发给自己的。与地址域一致的设
29、备继续接受其它域,直至接受到回车换行符。除起始位和结束符外,其它地址域可以使用的传输字符是十六进制的09,AF ,当然也要用 ASCII码表示字符。3.2 RTU模式的消息帧当控制器设为RTU模式时,消息帧中的每个8Bit字节包含两个4Bit的十六进制 字符。这种模式与 ASCII模式相比在同样的波特率下,可比 ASCII模式传送更多的 数据。表3-2 RTU模式的消息帧地址功能代码 数据数量 数据1 .数据n CRC高字节CRC低字节CRC摊S3:tifSBir16Bit表3-2 RTU模式的消息帧该模式下消息发送至少要以3.5个字符时间的停顿间隔开始。传输过程中,网络设备不断侦测网络总线,
30、包括停顿间隔时间。当第一个域(地址域)接收到,相应的 设备就对接下来的传输字符进行解码,一旦有至少3. 5个字符时间的停顿就表示该消息的结束。在RTU模式中整个消息帧必须作为一连续的流转输,如果在帧完成之前有超过1.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3. 5个字符时间接着前个消息开始,接收的设备将认为它是前一消息的延续。如果在传输过程中有以上两种情况发生的 话,必然会导致 CRC校验产生一个错误消息,反馈给发送方设备。在其它网络上(象 MAP和Modbus Plus)Modbus消息被转成与串行传输无关的 帧。3.
31、3地址域消息帧的地址域包含两个字符(ASCII )或8Bit( RTU )。可能的从设备地址是0.247 (十进制)。单个设备的地址围是1.247。主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。地址0是用作广播地址,以使所有的从设备都能认识。当Modbus协议用于更高水准的网络,广播可能不允许或以其它方式代替。消息帧中的功能代码域包含了两个字符(ASCII )或8Bits( RTU )。可能的代码围是十进制的1.255。当然,有些代码是适用于所有控制器,有此是应用于某种控制器,还有些
32、保留以备后用。当消息从主设备发往从设备时,功能代码域将告之从设备需要执行哪些行为。例如去读取输入的开关状态,读一组寄存器的数据容, 读从设备的诊断状态, 允许调入、 记录、校验在从设备中的程序等。当从设备回应时, 它使用功能代码域来指示是正常回应(无误 )还是有某种错误发生(称作异议回应) 。对正常回应,从设备仅回应相应的功能代码。对异议回应,从 设备返回一等同于正常代码的代码,但最重要的位置为逻辑1。例如: 一从主设备发往从设备的消息要求读一组保持寄存器,将产生如下功能代码:0 0 0 0 0 0 1 1 (十六进制 03H) 对正常回应,从设备仅回应同样的功能代码。对异议回应,它返回:1
33、0 0 0 0 0 1 1 (十六进制 83H) 除功能代码因异议错误作了修改外, 从设备将一独特的代码放到回应消息的数据 域中,这能告诉主设备发生了什么错误。主设备应用程序得到异议的回应后, 典型的处理过程是重发消息, 或者诊断发给 从设备的消息并报告给操作员。3.5 数据域数据域是由两个十六进制数集合构成的,围OO.FF。根据网络传输模式,这可以是由一对 ASCII 字符组成或由一 RTU 字符组成。从主设备发给从设备消息的数据域包含附加的信息: 从设备必须用于进行执行由 功能代码所定义的所为。 这包括了象不连续的寄存器地址, 要处理项的数目, 域中实 际数据字节数。例如,如果主设备需要从
34、设备读取一组保持寄存器(功能代码03),数据域指定了起始寄存器以及要读的寄存器数量。 如果主设备写一组从设备的寄存器 (功能代码 10 十六进制),数据域则指明了要写的起始寄存器以及要写的寄存器数量,数据域的 数据字节数,要写入寄存器的数据。如果没有错误发生,从从设备返回的数据域包含请求的数据。如果有错误发生, 此域包含一异议代码,主设备应用程序可以用来判断采取下一步行动。在某种消息中数据域可以是不存在的( 0 长度)。例如,主设备要求从设备回应 通信事件记录(功能代码 0B 十六进制),从设备不需任何附加的信息。3.6 错误检测域标准的 Modbus 网络有两种错误检测方法。 错误检测域的容
35、视所选的检测方法而ASCII 检测方法:当选用 ASCII 模式作字符帧,错误检测域包含两个 ASCII 字符。这是使用 LRC (纵向冗长检测)方法对消息容计算得出的,不包括开始的冒号符及回车换行符。 LRC 字符附加在回车换行符前面。RTU 检测方法:当选用 RTU 模式作字符帧, 错误检测域包含一 16Bits 值(用两个 8 位的字符来实 现 )。错误检测域的容是通过对消息容进行循环冗长检测方法得出的。CRC 域附加在消息的最后,添加时先是低字节然后是高字节。故 CRC 的高位字节是发送消息的最 后一个字节。3.7 字符的连续传输当消息在标准的 Modbus 系列网络传输时,每个字符或
36、字节以如下方式发送(从 左到右):最低有效位 .最高有效位使用 ASCII 字符帧时,位的序列是:有奇偶校验启始位 1 2 3 4 5 6 7 奇偶位 停止位无奇偶校验启始位 1 2 3 4 5 6 7 停止位 停止位使用 RTU 字符帧时,位的序列是:有奇偶校验启始位 1 2 3 4 5 6 7 8 奇偶位 停止位无奇偶校验启始位 1 2 3 4 5 6 7 8 停止位 停止位第 4 章 错误检测方法标准的 Modbus 串行网络采用两种错误检测方法。奇偶校验对每个字符都可用, 帧检测( LRC 或 CRC )应用于整个消息。它们都是在消息发送前由主设备产生的, 从设备在接收过程中检测每个字
37、符和整个消息帧。用户要给主设备配置一预先定义的超时时间间隔, 这个时间间隔要足够长, 以使 任何从设备都能作为正常反应。 如果从设备测到一传输错误, 消息将不会接收, 也不 会向主设备作出回应。 这样超时事件将触发主设备来处理错误。 发往不存在的从设备 的地址也会产生超时。4.1 奇偶校验 用户可以配置控制器是奇或偶校验, 或无校验。 这将决定了每个字符中的奇偶校 验位是如何设置的。如果指定了奇或偶校验, “1”的位数将算到每个字符的位数中( ASCII 模式 7 个 数据位, RTU 中 8 个数据位)。例如 RTU 字符帧中包含以下 8 个数据位:1 1 0 0 0 1 0 1整个“ 1”
38、的数目是 4个。如果便用了偶校验,帧的奇偶校验位将是0,便得整个“ 1的”个数仍是 4 个。如果便用了奇校验,帧的奇偶校验位将是1,便得整个 “1的”个数是 5 个。如果没有指定奇偶校验位, 传输时就没有校验位, 也不进行校验检测。 代替一附 加的停止位填充至要传输的字符帧中。4.2 LRC 检测LRC 错误校验用于 ASCII 模式。这个错误校验是一个 8 位二进制数,可作为 2 个 ASCII 十六进制字节传送。把十六进制字符转换成二进制,加上无循环进位的二 进制字符和二进制补码结果生成 LRC 错误校验(参见图) 。这个 LRC 在接收设备进 行核验,并与被传送的 LRC 进行比较,冒号
39、(: )、回车符号( CR )、换行字符( LF ) 和置入他任何非 ASCII 十六进制字符在运算时忽略不计。使用 ASCII 模式,消息包括了一基于 LRC 方法的错误检测域。 LRC 域检测了 LRC 域是一个包含一个 8 位二进制值的字节。 LRC 值由传输设备来计算并放到消息 帧中,接收设备在接收消息的过程中计算LRC ,并将它和接收到消息中 LRC 域中的值比较,如果两值不等,说明有错误。LRC 方法是将消息中的 8Bit 的字节连续累加,丢弃了进位。4.3 CRC 检测使用 RTU 模式,消息包括了一基于 CRC 方法的错误检测域。 CRC 域检测了整 个消息的容。CRC 域是两
40、个字节,包含一 16 位的二进制值。它由传输设备计算后加入到消息 中。接收设备重新计算收到消息的CRC ,并与接收到的 CRC 域中的值比较,如果两值不同,则有误。CRC 是先调入一值是全 “ 1的” 16 位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。仅每个字符中的 8Bit 数据对 CRC 有效,起始 位和停止位以及奇偶校验位均无效。生成 CRC-16 校验字节的步骤如下: 装如一个 16 位寄存器,所有数位均为 1。 该 16位寄存器的高位字节与开始 8位字节进行 “异或 ”运算。运算结果放入这 个 16 位寄存器。 把这个 16 寄存器向右移一位。 若向右(
41、标记位)移出的数位是1,则生成多项式00001和这个寄存器进行 异或”运算;若向右移出的数位是0,则返回。 重复和,直至移出8位。 另外 8 位与该十六位寄存器进行 “异或”运算。 重复,直至该报文所有字节均与16位寄存器进行 异或”运算,并移位8次。 这个 16位寄存器的容即 2字节 CRC 错误校验,被加到报文的最高有效位。另外,在某些非 ModBus 通信协议中也经常使用 CRC16 作为校验手段,而且产生了一些CRC16的变种,他们是使用CRC16多项式Xf 16+Xf 15+Xf 2+1,单首次装 入的16位寄存器为0000;使用CRC16的反序Xf 16+Xf 14+Xf 1 +
42、1,首次装入寄存器 值为 0000 或 FFFFH 。CRC产生过程中,每个 8位字符都单独和寄存器容相或(OR),结果向最低有效位方向移动,最高有效位以 0 填充。 LSB 被提取出来检测,如果 LSB 为 1 ,寄存 器单独和预置的值或一下,如果 LSB 为 0,则不进行。整个过程要重复 8次。在最 后一位(第 8 位) 完成后,下一个 8 位字节又单独和寄存器的当前值相或。最终寄存 器中的值,是消息中所有的字节都执行之后的 CRC 值。CRC 添加到消息中时,低字节先加入,然后高字节。ASCII可打印字符便于故障检测,而且对于用高级语言(如Fortan)编程的主计算机及主 PC 很适宜。
43、 RTU 则适用于机器语言编程的计算机和 PC 主机。用 RTU 模式传输的数据是 8 位二进制字符。 如欲转换为 ASCII 模式,则每个 RTU 字符首先应分为高位和低位两部分, 这两部分各含 4 位,然后转换成十六进制等量值。 用以构成报文的 ASCII 字符都是十六进制字符。 ASCII 模式使用的字符虽是 RTU 模 式的两倍,但 ASCII 数据的译玛和处理更为容易一些,此外,用 RTU 模式时报文字 符必须以连续数据流的形式传送,用ASCII模式,字符之间可产生长达1s的间隔,以适应速度较快的机器。第5章 modbus协议校验码生成5.1 LRC纵向冗余校验纵向冗余校验区为 1个
44、字节,8位二进制数据,由发送设备计算LRC值,并把计算值附到信息中。接收设备在接收信息时,重新计算LRC值,并把计算值与 LRC区中接收的实际值进行比较,若两者不相同,则产生一个错误。信息中的相邻2个8位字节相加,丢弃进位,然后进行二进制补码,运算计算出LRC值。LRC是一个8位数据区,因此每加一个新字符, 会产生大于十进制 255的数值而谥出,因为没有第 9位,自动放弃进位。产生LRC的过程:相加信息中的全部字节,包括起始“:”号和结束符 CRLF.并把结果送入 8位数据区,放弃进位。由FFH减去最终的数据值,产生的补码。加“1”产生二进制补码。把LRC放入信息中发送8位LRC(2个ASCI
45、I字符)时,先送高位字符,后送低位字符,如:LRC值为 61H(0110 0001):ColoAddFunDataDataDataDataDataLRCLRCCRnrcCountHiLo6 1表6.1 LRC 字符顺序例:用一个C语言功能码产生 LRC值。该功能码用2个自变量:unsigned char *auchMsg ;生成LRC值,把指针指向含有二进制数据的缓冲器 un sig ned short usDataLen ; 缓冲器中的字节数。该功能返回LRC作为一种类型“ unsigned char”。5.1.2 LRC产生的功能static un sig ned char LRC(auc
46、hMsg, usDataLe n)unsigned char *auchMsg ; /* 按信息的字节计算LRC*/unsigned short usDataLen ; /* 按信息的字节计算 LRC*/unsigned char uchLRC = 0 ; /* 初始化 LRC 字符 */while (usDataLen )/*通过数据缓冲器 */uchLRC += *auchMsg+ ; /* 加缓冲器字节无进位 */return (unsigned char)( - (char)uchLRC) ; /* 返回二进制补码 */5.2 CRC 循环冗余校验循环冗余校验 CRC 区为 2 字节,
47、含一个 16 位二进制数据。 由发送设备计算 CRC 值,并把计算值附在信息中,接收设备在接收信息时,重新计算CRC 值,并把计算值与接收的在 CRC 区中实际值进行比较,若两者不相同,则产生一个错误。CRC 开始时先把寄存器的 16位全部置成“ 1”,然后把相邻 2个 8位字节的数据 放入当前寄存器中,只有每个字符的 8位数据用作产生 CRC,起始位,停止位和奇 偶校验位不加到 CRC 中。产生 CRC 期间, 每 8 位数据与寄存器中值进行异或运算, 其结果向右移一位 (向LSB方向),并用“ 0”填入MSB,检测LSB,若LSB为“ 1 ”则与预置的固定值异 或,若 LSB 为“ 0”则
48、不作异或运算。重复上述处过程,直至移位 8 次,完成第 8 次移位后,下一个 8 位数据,与该寄 存器的当前值异或, 在所有信息处理完后, 寄存器中的最终值为 CRC 值。 产生 CRC 的过程:1. 把16位CR(寄存器置成FFFFH.2. 第一个8位数据与CR(寄存器低8位进行异或运算,把结果放入 CR(寄存器。3. CR(寄存器向右移一位, MS填零,检查LSB.4. (若LSB为0):重复3,再右移一位。(若LSB为1):CRC寄存器与Aool H 进行异或运算5. 重复 3和4直至完成 8次移位,完成 8位字节的处理。6. 重复 2至 5步,处理下一个 8位数据,直至全部字节处理完毕
49、。7. CR(寄存器的最终值为 CR(值。8. 把CR(值放入信息时,高8位和低8位应分开放置。5.2.1 把CR值放入信息中发送信息中的 16 位 CRC 值时,先送低 8位,后送高 8位。若 CRC 值为 1241(0001 0010 0100 0001):AddrFuncData CountDataDataDataDataCRC LoCRCHi4112表6.2 CRC字节顺序各种可能的CRC值,按两列装入,一列在16位CRC的高8位区,为(0-256的)CRC 值另一类为低8位区,为CRC的低位值。用这种方法得到的 CRC其执行速度快于计 算缓冲器中每个新字符得到一个新CRC值的方法。注
50、意:该功能部交换 CRC中的高/低字节,返回的 CRC值 中,其字节已交换。 因此,由功能码返回的CRC值,能直接放在信息中传送。5.2.2 CRC 生成例:功能取2个自变量:unsigned char *puchMsg ;为生成CRC值,把指针指向含有二进制的数据的缓冲器un sig ned short usDataLen ; 缓冲器中的字节数。该功能返回 CRC作为一种类型"unsigned short ”。5.2.3 CRC产生的功能un sig ned short CRC16(puchMsg, usDataLe n)unsigned char *puchMsg ; /* 按信
51、息的字节数计算 CRC */un sig ned short usDataLe n ; /* qua ntity of bytes in message */unsigned char uchCRCHi = 0xFF ; /* 初始化高字节 */unsigned char uchCRCLo = 0xFF ; /* 初始化低字节 */unsigned ulndex ; /* 把 CRC 表 */while (usDataLen )/*通过数据缓冲器 */ulndex = uchCRCHi A *puchMsgg+ ; /* 计算 CRC */uchCRCHi = uchCRCLo a auchC
52、RCHiul ndex;uchCRCLo = auchCRCLoul ndex;return (uchCRCHi << 8 | uchCRCLo) ;5.2.4 字节表a.高位字节表/* Table of CRC values for high - order byte */static unsigned char auchCRCHi = 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,0x40, 0x01, 0xC0, 0x80, 0x41, 0x00
53、, 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, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0
54、x40, 0x00, 0xC1, 0x81,0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 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,
55、 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, 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,0x40, 0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 元旦返乡营销方案(3篇)
- 扶贫攻坚领域应急预案(3篇)
- 水景喷泉管道施工方案(3篇)
- 执纪审查应急演练预案(3篇)
- 旅游营销传播方案(3篇)
- 维修配件供应链优化-第3篇
- 深圳西部港口保安服务公司发展战略研究:基于港口特色与市场需求的探索
- 淮安经济开发区管委会人力资源开发:现状、问题与策略转型
- 淡水鱼鱼鳞去除方法的多维探究与创新实践
- 淀粉基分散剂助力多壁碳纳米管分散:制备、原理与应用新探
- 智研咨询发布:2026年中国生活垃圾转运站行业竞争格局及发展前景研究报告
- 山东青州第一中学2025-2026学年高三普通部二轮专题复习模拟考试(四)语文试题(含答案)
- 2025-2030港口码头运营服务行业供求状况研究投资项目规划
- 《危险化学品安全法》与《危化品安全管理条例》条款对照表
- 高新科技行业研发账服务协议
- 【新教材】人教版小学三年级音乐下册4.3《紧缩与放大》《珠峰脚下乐声扬》教学课件
- 董事长司机考勤制度
- 我国电力行业反垄断法律规制的困境与突破:基于市场与法治的双重视角
- GB/T 1220-2007不锈钢棒
- 三级动火可证
- 《健康睡眠》课件
评论
0/150
提交评论