Modbus通信协议_第1页
Modbus通信协议_第2页
免费预览已结束,剩余7页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MODBUSMODBUS 通信协议、前言本规约用于保护装置与监控系统通讯,信道采用RS232/RS422/485或电流环,协议采用Modbus。二、报文类型及格式信息传输:为异步方式,并以字节为单位。在主站和从站之间传递的通讯信息是 的字格式:波特率:19200表2.1字格式(串行数据)11位二进制起始位1位数据位8位奇偶校验位无奇偶校验停止位2位:通讯数据(信息帧)格式:注:1个字节由8位二进制数组成(既8 bit)。2、ModBus是Modicon公司的注册商标。3、 “从机”在本文件中既为保护模块。通讯信息传输过程:当命令由主机发送至从机时, 符合相应地址码的从机处理命令,根据功能码作相

2、应任务。如果CRC校验无误,则执行相应的任务,然后把执行结果(数据)返送给主机。如果CRC校验出错就不返回任何信息。如果接收正确,但不能处理,返回异常报文。1.地址码:地址码是通讯信息帧的第一字节,从0到255。每个从机有唯一的地址码,并且只有符合地址码的从机才能响应回送信息。0 xFF为广播地址。2.功能码:功能码是通讯信息帧的第二个字节。ModBus通讯规约可定义的功能码范围为1127。3.数据区:数据区可以是数据(如:开关量输入/输出、模拟量输入/输出、寄存器等等)、参考地地址码功能码数据区错误校检1字节1字节N字节16位CRC码(冗余循环码)数据格式:数据长度:表2.211位址等。均为

3、二进制数。数据区的最大长度不能超过256。4.错误校验码(CRC校验):用校验码判别接收信息是否正确。MODBUS通讯协议的CRC(冗余循环码)包含2个字节,即16位二进制数。生成多项式A001(1010 0000 0000 0001)。功能码:0 x03描述:读从机多个保持寄存器二进制数据。不支持广播命令。(地址4XXXX)查询查询信息指定要读取的寄存器开始地址和寄存器数量。寄存器地址从0开始。查询报文格式:主机发送发送的信息举例从机地址11发送至地址为17的从机功能码03读保持寄存器数据起始地址高00起始地址为起始地址低6B40108-40110数据数目高00读取寄存器数目数据数目低03C

4、RC码由主机计算得到CRC码响应保持寄存器数据在响应帧中按寄存器/2字节排列。高字节在前,低字节在后。每次可读取125个寄存器。响应报文格式:从机响应返回的信息举例从机地址11来自从机17功能码03读保持寄存器数据字节数6共6字节数据1高0240108数据1低2B数据2高0040109数据2低00数据3高0040110数据3低64CRC码由从机计算得到CRC码功能码:0 x10描述:主机对从机多个保持寄存器置数。当从机地址为0时,表示广播方式,所有相连的从机同时被置数。写写信息指定要写的寄存器开始地址和寄存器数量,写每个寄存器的内容。寄存器地址从0开始。(4xxxx)写报文格式:主机发送发送的

5、信息举例从机地址11发送至地址为17的从机功能码0 x10与保持奇存器起始地址高00起始地址为40108起始地址低6B数据数目高00写寄存器数目数据数目低03字节数06与奇存器数目x2第1个寄存器高CC置数:第1个寄存器高第1个寄存器低dd置数:第1个寄存器低O O O O O O O最后1丨寄存器冋aa置数:最后1个寄存器高最后1个寄存器低bb置数:最后1个寄存器低CRC码由主机计算得到CRC码响应正常响应是反送查询信息。高字节在前,低字节在后。 响应报文格式:功能码0 x10与保持奇存器起始地址高00起始地址为40108起始地址低6B数据数目高00写寄存器数目数据数目低03CRC码由主机计

6、算得到CRC码通讯错误信息及数据的处理:当检测到除了CRC码出错以外的错误时,必须向主机回送信息,功能码的最高位置为1,即从机返送给主机的功能码是在主机发送的功能码的基础上加128。以下的这些代码表明有意外的错误发生。异常响应1.接收正确,可以处理,正常响应。2.接收时出错,不响应。3.校验码出错,不响应。4.接收正确,不能处理。异常响应。异常响应用两字节区分:功能域-最高位置1,例如: 数据域-返回异常代码。格式0 x80。从机响应返回的信息举例从机地址11来自从机17功能码810 x01与0 x80异常代码02非法数据地址CRC码由从机计算得到CRC码异常代码:0 x01-非法功能码,不能

7、被处理。0 x02-非法数据地址。0 x03-非法数据。0 x04-从机试图执行命令时,发生不可恢复的错误。0 x05-确认。从机接受命令,要执行较长的时间。0 x06-从机忙。0 x07-否认。从机不接受命令。0 x08-读取数据时,校验错。 错误校验码(CRC校验):主机或从机可用校验码进行判别接收信息是否正确。由于电子噪声或一些其它干扰,信息在传输过程中有时会发生错误,错误校验码(CRC)可以检验主机或从机在通讯数据传送过程中的信息是否有误,错误的数据可以放弃(无论是发送还是接收),这样增加了系统的安全和效率。MODBUS通讯协议的CRC(冗余循环码)包含2个字节,即16位二进制数。CR

8、C码由发送设备(主机)计算,放置于发送信息帧的尾部。接收信息的设备(从机)再重新计 算接收到信息的CRC,比较计算得到的CRC是否与接收到的相符,如果两者不相符,则 表明出错。在进行CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校 验位,都不参与CRC计算。 CRCCRC 码的计算方法是:1.预置1个16位的寄存器为十六进制FFFF(即全为1);称此寄存器为CRC寄存器;2.把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低8位相异或,把结果放于CRC寄存器;3.把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查最低位;4.如果最低位为

9、0:重复第3步(再次右移一位);如果最低位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;5重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;6.重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;7.最后得到的CRC寄存器内容即为:CRC码。un sig ned short CRC16(puchMsg, usDataLe n)un sig ned char *puchMsg ;/* message to calculate CRC upon */* quantity of bytes in message */while (usDataLen

10、-)/* pass through message buffer*/uln dex = uchCRCHiA*puchMsg+ ;/* calculate the CRC */uchCRCHi = uchCRCLoAauchCRCHiul ndex;uchCRCLo = auchCRCLoulndex ;return (uchCRCHi 8 | uchCRCLo) ;High Order Byte Table/* Table of CRC values for high-order byte */static unsigned char auchCRCHi = 0 x00, 0 xC1, 0 x

11、81, 0 x40, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x01, 0 xC0,0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80, 0 x41,0 x00, 0 xC1, 0 x81, 0 x40, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0,0 x80, 0 x41, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40,0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0,

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

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

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

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

16、,0 x01, 0 xC0, 0 x80, 0 x41, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x00, 0 xC1,0 x81, 0 x40, 0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80, 0 x41,0 x00, 0 xC1, 0 x81, 0 x40, 0 x01, 0 xC0, 0 x80, 0 x41, 0 x01, 0 xC0,0 x80, 0 x41, 0 x00, 0 xC1, 0 x81, 0 x40 ;unsigned short usDataLen ;unsigned char uchCRCHi =

17、 0 xFF ;unsigned char uchCRCLo = 0 xFF ;unsigned uIndex ;/* high CRC byte initialized */ /*low CRC byte initialized */* will index into CRC lookup*/Low Order Byte Table/* Table of CRC values for low-order byte */static char auchCRCLo = 0 x00, 0 xC0, 0 xC1, 0 x01, 0 xC3, 0 x03, 0 x02, 0 xC2, 0 xC6, 0

18、 x06, 0 x07, 0 xC7, 0 x05, 0 xC5, 0 xC4, 0 x04,0 xCC, 0 x0C, 0 x0D, 0 xCD, 0 x0F, 0 xCF, 0 xCE, 0 x0E, 0 x0A, 0 xCA, 0 xCB, 0 x0B, 0 xC9, 0 x09, 0 x08, 0 xC8,0 xD8, 0 x18, 0 x19, 0 xD9, 0 x1B, 0 xDB, 0 xDA, 0 x1A, 0 x1E, 0 xDE, 0 xDF, 0 x1F, 0 xDD, 0 x1D, 0 x1C, 0 xDC,0 x14, 0 xD4, 0 xD5, 0 x15, 0 x

19、D7, 0 x17, 0 x16, 0 xD6, 0 xD2, 0 x12, 0 x13, 0 xD3, 0 x11, 0 xD1, 0 xD0, 0 x10,0 xF0, 0 x30, 0 x31, 0 xF1, 0 x33, 0 xF3, 0 xF2, 0 x32, 0 x36, 0 xF6, 0 xF7, 0 x37, 0 xF5, 0 x35, 0 x34, 0 xF4, 0 x3C,0 xFC, 0 xFD, 0 x3D, 0 xFF, 0 x3F, 0 x3E, 0 xFE, 0 xFA, 0 x3A, 0 x3B, 0 xFB, 0 x39, 0 xF9, 0 xF8, 0 x3

20、8, 0 x28,0 xE8, 0 xE9, 0 x29, 0 xEB, 0 x2B, 0 x2A, 0 xEA, 0 xEE, 0 x2E, 0 x2F, 0 xEF, 0 x2D, 0 xED, 0 xEC, 0 x2C, 0 xE4,0 x24, 0 x25, 0 xE5, 0 x27, 0 xE7, 0 xE6, 0 x26, 0 x22, 0 xE2, 0 xE3, 0 x23, 0 xE1, 0 x21, 0 x20, 0 xE0, 0 xA0,0 x60, 0 x61, 0 xA1, 0 x63, 0 xA3, 0 xA2, 0 x62, 0 x66, 0 xA6, 0 xA7,

21、 0 x67, 0 xA5, 0 x65, 0 x64, 0 xA4, 0 x6C,0 xAC, 0 xAD, 0 x6D, 0 xAF, 0 x6F, 0 x6E, 0 xAE, 0 xAA, 0 x6A, 0 x6B, 0 xAB, 0 x69, 0 xA9, 0 xA8, 0 x68, 0 x78,0 xB8, 0 xB9, 0 x79, 0 xBB, 0 x7B, 0 x7A, 0 xBA, 0 xBE, 0 x7E, 0 x7F, 0 xBF, 0 x7D, 0 xBD, 0 xBC, 0 x7C, 0 xB4,0 x74, 0 x75, 0 xB5, 0 x77, 0 xB7, 0 xB6, 0 x76, 0 x72, 0 xB2, 0 xB3, 0 x73, 0 xB1, 0 x71, 0 x70, 0 xB0, 0 x50,0 x90, 0 x91, 0 x51, 0 x93, 0 x53, 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论