ModbusRtu通信协议(3,16号命令)_第1页
ModbusRtu通信协议(3,16号命令)_第2页
ModbusRtu通信协议(3,16号命令)_第3页
ModbusRtu通信协议(3,16号命令)_第4页
ModbusRtu通信协议(3,16号命令)_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、modbus rtu通信协议(3, 16号命令)1、读取保持寄存器(单个和多个,以字为最小单位) 发送命令帧:设 备地址功 能码地 址ii地 址l数据量ii数 据量lcrc iicrc lad3holdstartdatanumcrcrdrohc高位c低位帧长度:8个字节设备地址:1247功能码:3h数据地址:065535 具体范围与相关设备有关 数 量:165535 具体范围与相关设备有关 校验码:crc16校验返冋命令帧:设 备地址j匕匕厶冃数据量数据1数 据ncrc hcrc lad3返回数据的data(1crcrdrlii字节数nn)c高位c低位帧长度:5+n个字节 设备地址:1247功

2、能码:3h数据量:实际的读取数据数量数 据:返回数据的意义a=holdstar tn= datanum 1vw a (vb a)vwa (vb a+1)vw a+n (vb a+n)vwa+n (vb a+n+1)data(1)data (2)data(n-l)data(n)校验码:crc16校验命令有误:1)没有任何返冋2)返回异议帧设 备地址功 能码错误信息crc iicrc lad83一个字节的crcrdrlh错误信息c咼位c低位2、设置保持寄存器(多个,以字为最小单位) 发送命令帧:备地址能码地 址h地 址l数 据量h数 据量l数 据字 节数具 体数 据crchcrcladdro10

3、hholdstartdatanumb ytn1bytncrc 高位crc 低位帧 长 度:9 + bytn个字节设备地址:1247功能码:10h数据地址:065535 具体范围与相关设备有关 数量:1122具体范围与相关设备有关字 节数:设置的字节个数bytn二datanumx2 数 据:具体的字节数据校验码:crc16校验返回命令帧:设 备地址功 能码地jll: h地 址l数据量h数 据量lcrc hcrc lad10iloldstartdatanumcrcrdrlhc高位c低位帧t度:8个字节设备地址:1247功能码:10h数据地址:065535 具休范围与相关设备有关 数 量:1122具

4、体范围与相关设备有关校验码:crc16校验 命令有误:1) 没有任何返冋2) 返回异议帧地 址功 能码错误信息crc iicr 1ad90一个字节的crcrdrlh错误信息c咼位c低位八、一点总结编写通信相关的程序,其实协议和开发语言并不重要,重要的是对通信双方的通信设备 的特点,性能要有充分了解,这样才能开发出可靠,高效的通信程序摘要modbus协议由于其具有开放性、透明性、成本低、易于开发等特点,已成为当今工业 领域通信协议的首选。木文介绍了一种基于modbus通信协议的eview触摸屏与常用的51 单片机的通信方法。该方法通过c51编程实现modbus通信,在51系列单片机上具有通用 性

5、,有一定的借鉴作用。关键词触扌英屏单片机modbus |办议工业控制中经常需要观察系统的运行状态或者修改运行参数。触摸屏能够直观、牛动 地显示运行参数和运行状态,而凡通过触摸屏画面可以直接修改系统运行参数,人机交互 性好。单片机广泛应用于工控领域屮,与触摸屏配合,可组成良好的人机交互环境。触摸屏与单片机通信,需要根据触摸屏采用的通信协议为单-片机编写相应的通信程序。 modbus协议是美国mod icon公司推出的,一种有效支持控制器之间以及控制器经由网络(如 以太网)与其他设备之间进行通信的协议。木文以stc89c51单片机和人机电子有限公司的 eview触摸屏为例,介绍其通信程序的开发过程

6、。1系统结构实现触摸屏与单片机的通信,主要是解决通信协议的问题。木文使用开放的modbus通 信协议,以触摸屏作主站,单片机作从站。eview触摸屏木身支持modbus通信协议,如果 单片机也支持modbus协议,就可以进行通信了。eview触摸屏支持rs-232和rs-485两种 通信接口。在工业控制领域,由于rs-485具有可靠性高、传输距离远、抗干扰能力强等优 点,所以在木系统中触摸屏与单片机通信采用rs-485连接,传输速率设置为9600 kbps。 rs-485信号传输是一种半双工的传输方式,单片机通过一个rs-232/rs-485无源转换器把 232信号转换成485信号,连接到ev

7、iew触摸屏上。图1为该系统的原理图。2 4 68txdheader 4x2已3ltx45【mirxd图1系统原理图44 圭#hd1gnduedrearovccmax郦rx485 1单片机控制系统采用stc89c51系列单片机,其内部集成max810/stc810专用复位电路 (原有外部复位可继续保留,与intel 8051引脚兼容),具有抗干扰能力强、加密性强、高 抗静电(esd)、超低功耗等特点,而且价格低廉。在本系统小,触摸屏是上位机,单片机是 下位机。2 modbus 协议2. 1 modbus协议简介modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互z间、 控

8、制器经由网络(如以太网)与其他设备z间可以通信。它已经成为一种通用工业标准。不 同厂商生产的控制设备可以通过它连成工业网络,集中监控。modbus协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进 行通信的。它描述了一控制器请求访问其他设备的过程如何回应来讯其他设备的请求,以 及怎样侦测错误并记录;制定了消息域格局和内容的公共格式。当在某一 modbus网络上通信时,此协议决定了每个控制器需要知道它们的设备地址, 识别按地址发来的消息,以及决定要产生何种行动。如果需要回应,则控制器将生成反馈 信息并用modbus协议发出。在其他网络上,包含了 modhus协议的消息转换为在此

9、网络上 使用的帧或包结构。2. 2 modbus rtu通信数据传输模式当控制器设备基于modbus协议以rtu模式通信时,消息中的每个字节包含2个4位的 十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ascii方式传送更多的 数据。编码采用8位二进制,| 六进制数09和af;消息屮每个8位域都是由2个十六进 制字符组成。组织结构如下:地址位数据位奇偶校絵位停止位错误检测1位8(41位或无校验1位crc2.3 modbus rtu消息帧结构modbus rtu消息帧结构如下:地址码功能代码数据区错误校验码8位8位nx8位16位(1)地址码地址码为通信传送的第一个字节。这个宁节表明,

10、由用户设定地址码的从机将接收由 主机发送来的信息。每个从机都有具有唯一的地址码,只有符合地址码的从机才能响应冋 送,且响应冋送均以各自的地址码开始。主机发送的地址码则表明将发送到的从机地址, 而从机发送的地址码表明冋送的从机地址。地址0用作广播地址,以使所有的从设备都能 认识。功能代码功能代码为通信传送的第二个字节。modbus通信规约定义可能的代码范国是i进制的 1255。当然,有些代码适用于所有控制器,有些仅适用于某种控制器,还有些保留以备 后用。主机发送请求,通过功能码告诉从机执行什么动作;从机响应请求,从机发送的功能 码与从主机发送來的功能码一样,表明从机已响应主机进行操作。如果从机发

11、送的功能码 的最高位为1,则表明从机没有响应操作或发送出错,主设备应用程序得到片议的冋应后, 典型的处理是重发消息。表1列出了常用modbus支持的部分功能码。表1常用modbus支持的部分功能码功能码名称作用01读取线圈状态取得组逻拥线圈的当前状态 (on/off)02读取输人状态取得一组开艾输入的半前状态 (on/ofe)03读取保持寄存器在一个或多个保持寄存器中取 得当前的二进制值04读取输入寄存器在一个或多个输入寄存器中取 碍当前的二进制(ft以读取线圈状态为例说明。主站发送命令:设备地址命令号01起始寄存器地址高 8位低8位读取的寄存器数高8位低8位crc校验的低8位高8位。从站响应

12、: 设备地址命令号01返回的字节个数数据1数据2数据n crc校验的低8 位高8位o(3) 数据区数据区根据功能码的不同而不同。数据区包含需要从机执行什么动作,或由从机采集 的返送信息。这些信息可以是实际数值、设置点、主机发送给从机或从机发送给主机的地 址等。例如,功能码告诉从机读取寄存器的值,则数据区必须包含要读取寄存器的起始地 址及读取长度。对于不同的从机,地址和数据信息都不相同。(4) 错误校验码主机或从机可用校验码判别接收信息是否出错。错误检测域包含一个16位的值(用2 个8位的字符來实现)o错误检测域的内容是通过对消息内容进行“循环兀余检测”得出的。 crc域附加在消息的最后,添加时

13、先是低字节然后是高字节,故crc的高位字节是发送消息 的最后一个宁节。错误校验采用crc-16校验方法。3软件编程下面是采用c51编写的软件,主要包括crc校验和终端接收及波特率设置等。由于篇 幅冇限,英他程序略。(1)波特率设置/功能:串口初始化波特率为9 600 bps方式1void lnit_com( void) '、tmod = 0x20;pc on = 0x00:sc() = 0x50:th1 = oxfd;tl1 = oxfd;tri = 1;ea = 1:es 1;(2) crc校验函数uim c'rc16( uchar * pushmsg unsigiicd s

14、hort usdatalcn) !uchar uchcrchi0xee; uchar uchcrclo oxff; uint ulndex;while (usdatalen ):/ crc字廿初始化 /低crc字节初始化/crc循环中的索引 /传输消息缓冲区ulndcx=uchcrciii * push msg + + ;/计算 crc?uchcrchi = uchcrclo auchcrchi ulndcxj ; uch('r(、lo = auchcrclo uindex,;return (uchcrchivv 8 1 uchcrclo);(3)发送函数和判断函数void send(

15、 uchar rrbuf. int sendcount) <uchar icrchicrclojk = 0;uehar sendbuf 32 ;usdatalen = sendcount 2 ;sendbuflo = reccbuf _()_ : sendbuf 1 = reccbuf 1 . ; send- buf_2=sendcount 5 ;for(j = 3 ;j-csendcount 2 ;j4- ) sendbufcjl = rrbuf; k_:k+ + ;k = 0;crcdata = crc16(scndbuf usdatal.en):crchi = crcdata 25

16、6:crclo= crcdata % 256 ;send buf 1 sendcou n t 2 = crchi;sendbuf., sendcount 1 crclo;for(i = 0;i<sendcount ;i+ 4-) sbu f = scndbuflij ; while( ti=0);tl = 0;void read() svvitch( start.adress) case 0x0002: send(&wri2bid0 5end(、oi】nt) : break;case 0x0003: send( rbufl sendcount) ;break:start adrc

17、ss= startadress rcccbuf3_ ; if ( recebufol = = oxoo) tscndcount = 52 * (recebucj * 256 i rccebuft52):rea(l():else sbuf = 0x0a; whilc( tl= =0):tl = 0; >(5) 串口中断函数/实现crc数据信息的分析处理void commlntprocc) interrupt i if(ri) ri = 0 ; recebufl rccccountj = sbuf;rccecount + - : usdatalcn = rcccl?ount 一 2: swi

18、tch (recebuf 1 j)cae 0x01 ; if( rccccoi】n【> =jo rececount = 0; readbit( ) ; > break ; case 0x02 : iff rececount > 8)recccouni = 0;rcadhir(): i breakscase 0x03 : if< rececount* = 8)i recec'ount = 0:crc_data(): break;case 0x04 : if(rccccounl> = 8)rececount = 0 ;crc_data( ) : break;c

19、ase 0x05 : if(rececount> = 8)彳 rccccount = 0; wrirbit(): / break;case 0x06 : if( rccc(?ount,> = 8)< recec'ount = 0: writebyte(); break;default : if(rece('ount> = 8) rccccount 0: sbuf =0x55: whilc(tl=0);ti = 0i 由于modhus协议具有开放性和透明性等特点,而51系列单片机技术成熟、开发成本 低,二者的结合将继续成为各类通信系统设计的首选。本设计方法

20、已经应用于触摸屏与单 片机通信设计,并取得了较好效果。这种方法对于编制类似的通信软件有一定的借鉴作用, 部分程序可以宜接移植。错误检测与修正(errorcheck & correct)在数字数据通信111,由发送器发送的数据信号祯(frame)在经由网络传到接收器后, 由于多种原因可能导致错误位(biterrors)的出现,因此必须由接收器采取一定的措施探测出所有的错误位,并进而采取一定的措施予以修止。一、错误检测的基本原理(principle of error check)发送器向所发送的数据信号祯添加错误检验码(check bits),并取该错误检测码 作为该被传输数据信号的函数;

21、接收器根据该函数的定义进行同样的计算,然后将两个结 果进行比较:如杲结杲相同,则认为无错误位;否则认为该数据祯存在有错误位。一般说来,错误检测可能出现三种结果:在所传输的数据祯中未探测到,也不存在错误位;所传输的数据祯中有一个或多个被探测到的错谋位,但不存在未探测到的错课位; 被传输的数据祯屮冇一个或多个没冇被探测到的错误位。显然我们希望尽可能好地选择该检测函数,使检测结果可靠,即:所有的错误最好 都能被检测出来;如检测出现无错结果,则应不再存在任何未被检测出来的错误。实际釆用的错误检测方法主要冇两类:奇偶校验(parity)和crc循环冗余校验 (cyclic redundancy chec

22、k) <>二、奇偶校验(parity)1. 单向奇偶校验单向奇偶校验(row parity)由于一次只采用单个校验位,因此又称为单个位奇偶 校验(single bit parity)。发送器在数据祯每个字符的信号位后添一个奇偶校验位, 接收器对该奇偶校验位进行检查。典型的例子是面向ascii码的数据信号祯的传输,由于 asctt码是七位码,因此用第八个位码作为奇偶校验位。单向奇偶校验又分为奇校验(odd parity)和偶校验(even parity),发送器通过 校验位对所传输信号值的校验方法如下:奇校验保证所传输每个字符的8个位中1的总数 为奇数;偶校验则保证每个字符的8个位屮

23、1的总数为偶数。显然,如果被传输字符的7个信号位中同时有奇数个(例如1、3、5、7)位出现错误, 均可以被检测出来;但如果同时冇偶数个(例如2、4、6)位出现错误,单向奇偶校验是检查 不出来的。般在同步传输方式中常采用奇校验,而在异步传输方式中常采用偶校验。2. 双向奇偶校验为了提高奇偶校验的检错能力,可采用双向奇偶校验 (row andcolumnparity), 也 又称为 双向冗 余校验(vertical and longitudinal redundancy checks)o图1.4给出了由5个ascii码字符数据信号及其双向偶校验位组成的典型传输矩阵 (其中:前五行各字符的偶校验位组

24、成的校验位列(最右边一列),最下面一行由各列信号位 的偶校验位组成),该矩阵右下角的校验位则可按行或按列取校验位。传输方向校验位列<10110111v11010111<0011101010001011<0 101111110001110校验位行图1. 4典型双向偶校验传输矩阵显然,如果被传输的字符信号矩阵中同时在偶数个行中的偶数个相同的列中出现错 误,双向奇偶校验也是检查不出來的。三、crc 循环兀余校验(cyclic redundancy check)1. crc循环冗余校验的基木原理发送器和接收器约定选择同一个ft! n+l个位组成的二进制位列p作为校验列,发送 器在数据

25、祯的k个位信号后添加n个位(n<k)组成的fcs祯检验列 (frame check sequence),以保证新组成的全部信号列值可以被预定的校验二进制位 列p的值对二取模整除;接收器检验所接收到数据信号列值(含有数据信号祯和fcs祯检验 列)是否能被校验列p对二取模整除,如果不能,则存在传输错误位。p被称为crc循环冗 余校验列,正确选择p可以提高crc冗余校验的能力。(注:对二取模的四则运算指参与运算的两个二进制数各位z间凡涉及加减运算时均 进行 xor 异或运算,即:1 xor 1=0, 0 xor 0=0, 1 xor 0=1)可以证明,只要数据祯信号列m和校验列p是确定的,则可

26、以唯一确定fcs祯检验 列(也称为crc冗余检验值)的各个位。fcs帧检验列可由下列方法求得:在m后添加n个零后对二取模整除以p所得的余 数。例如:如要传输的m二7位列为1011101,选定的p校验二进制位列为10101(共有n+1二5 位),对应的fcs帧校验列即为用1011101 0000(共有m+n=7+4=ll位)对二取模整除以 10101后的余数0111(共有n二4位)。因此,发送方应发送的全部数据列为lolllololllo接 收方将收到的11位数据对二取模整除以p校验二进制位列10101,如余数非0,则认为有 传输错误位。2. crc循环冗余校验标准多项式p(x)为了表示方便,实

27、用时发送器和接收器共同约定选择的校验二进制位列p常被表示 为具有二进制系数(1或0)的crc标准校验多项式p (x)。(1) crc循环冗余校验常用的标准多项式p(x)常用的crc循环兀余校验标准多项式如下:crc(16 位)二x16+x15+x2+1crc(ccttt)二x16+x12 +x5+1crc(32 位)二x32+x26+x23+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1以crc(16位)多项式为例,其对应校验二进制位列为 1100000000000 ololo注意:这儿列出的标准校验多项式p(x)都含有(x+1)的多项式因子;各多项式的系数 均为二进制数

28、,所涉及的四则运算仍遵循对二取模的运算规则。(2) crc循环冗余校验标准多项式p(x)的检错能力crc循环冗余校验具有比奇偶校验强得多的检错能力。可以证明:它可以检测出所有 的单个位错、儿乎所有的双个位错、低于p(x)对应二进制校验列位数的所有连续位错、大 于或等于p(x)对应二进制校验列位数的绝大多数连续位错。但是,当传输中发生的错误多项式e(x)能被校验多项式p(x)对二取模整除时,它就 不可能被p (x)探测岀来,例如当e (x)=p (x)时o四、错误修止(error correction)对数据信号祯传输过程中的位错进行修正的方法主要有两种:由发送器提供错误修正码,然后由接收器自己

29、修正错误; 在接收器发现接收到的错误祯屮有位错误时,通知发送器重新发送数据信号祯。前一种方法中的错误修正码需耍发送器由被传送数据信号祯计算得到,然后添加到数据祯的后面,其长度几乎等于数据位数,导致效率降低50%,实际采用不多;一般采用后 一种较为有效的重发送方法。下面为crc的计算过程:1. 设置crc寄存器,并给其赋值ffff(hex)。2. 将数据的第一个8-bit字符与16位crc寄存器的低8位进行异或,并把结果存 入crc寄存器。3. crc寄存器向右移一位,msb补零,移出并检查lsb。4. 如果lsb为0,重复第三步;若lsb为1, crc寄存器与多项式码相异或。5. 重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。6. 重复第2至第5步直到所有数据全部处理完成。7. 最终crc寄存器的内容即为crc值。int crcl6(char *ptr, int count)int crc = while(-countcrc =0, i;>

温馨提示

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

评论

0/150

提交评论