组态王及modbus通信课程设计_第1页
组态王及modbus通信课程设计_第2页
组态王及modbus通信课程设计_第3页
组态王及modbus通信课程设计_第4页
组态王及modbus通信课程设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、测控网络课程设计一、实践要求本次实践以开发DCS测控系统为最终目的,要求掌握DCS测控系统的工作原理,学习组态王工控组态软件的使用方法,根据要求完成工程组态;掌握MODBUS通信协议的原理,开发具有MODBUS通讯功能的智能仪表,最终完成和组态工程之间的通讯。二、实践内容分为两大部分:1、组态王基本操作 2、 MODBUS通讯具体内容:(1) 熟悉组态王软件安装,基本开发环境,采用构建简单的工程(采用仿真数据和设备,工程应包含PID功能),计划时间1天;(2) 根据罐区工艺的要求,完成相应的组态工程,实现对原油储罐的监控,计划时间2天;(3) 掌握MODBUS通讯协议的工作原理,在MSP430

2、F5438单片机上编程实现MODBUS客户端服务程序,要求通过串行口将现场的温度、泵状态、流量等参数上传到上位机上,计划时间3天。(4) 在单片机上编程实现流量、温度上下限及仪表地址和波特率等参数设置功能,同时能从上位机对仪表参数进行设置,计划时间2天。(5) 优化设计,要求当出现通讯错误时在上位机和单片机上都要做出相应的反应,计划时间0.5天。(6) 上位机采用高级语言编程,实现对现场智能仪表的控制。 熟悉现场总线测控网络系统,搭建PROFIBUS网络,实现对ET200S和S7-200的控制。组态王部分一、设计要求根据罐区工艺的要求,完成相应的组态工程,实现对原油储罐的监控。1、罐区工艺流程

3、图2- 储油罐进口电动阀;3- 储油罐排污电动阀;4- 储油罐出口电动阀;5- 泵图1:罐区工艺流程图2、具体要求(1)监测各罐的液位(0-20m)/ (0-1m)/温度(0-100度)(现场仪表4-20mA输出)。(2)根据各罐液位控制各罐出口电动阀(H>16m, 关进口阀,选择最低液位的罐进油;H<2m,关出口阀,选择最高液位的罐出油),手动遥控排污阀。液位H>15.5m高报警, H>17m高高报警; 液位H<2m低报警, H<1.5m低低报警。 界位>1m高报警, 界位>1.5m高高报警; 界位<0.5m低报警, H<0.2m低

4、低报警;(3)启动泵组设置出入口流量(100M3/h,200M3/h,250M3/h)二、设计内容(一)组态数据库: 数据库-数据词典(二)组态画面画面1:工艺流程总画面对画面的基本说明:主要功能:对油罐液位的监测。泵总开关控制进口的3个泵的总开和总关;泵总关闭控制出口的3个泵的总关和总开;当同时按下泵提示和某一个泵的按钮,显示该泵的详细信息; 液位报警和界位报警时记录相应的报警事件;液位实时和历史曲线记录油罐液位的变化情况。画面2:各泵弹出式放大画面(包括参状态/型号等),点击总画面上的泵弹出此画面1、编写事件命令语言:当同时按下泵提示和某一个泵的按钮,显示该泵的参数信息。2、弹出画面画面3

5、:液位/界位报警画面报警设置:低低、低、高、高高报警值设置:液位报警画面:画面4:液位/温度/界位各一个实时趋势图和历史趋势图实时趋势图: 选择工具箱中的 工具,在画面上绘制一实时趋势曲线窗口。在曲线定义选项卡中选择要实时反映的变量。历史趋势图: 对于要以历史趋势曲线形式显示的变量,必须设置变量的记录属性。在“定义变量”对话框中单击“记录和安全区”属性页,将不记录改为数据变化记录,变化灵敏为:0。在工程浏览器窗口左侧的“工程目录显示区”中双击“系统配置”中的“历史数据记录”选项,弹出“历史记录配置”对话框。实时和历史趋势图:画面4:报表画面(液位,温度,界位)报表分为实时数据报表和历史数据报表

6、。(3)优化设置1、组态操作权限优先级分 1999 级,1 级最低999 级最高。每个操作者的优先级别只有一个。系统安全区共有64 个,用户在进行配置时。每个用户可选择除“无”以外的多个安全区,即一个用户可有多个安全区权限。设置油罐用户组,将管理员、操作员看成用户,并设置管理员优先级最高,并设置相应的密码。 配置 运行现象 登陆界面2、通过链接切换画面增加报警画面、趋势图、报表画面,通过右侧链接(4)画面命令语言变量说明:g1、g2、g3、g4代表每个油罐的液位,in代表泵总开,out代表泵总关,in1、in2、in3、in4代表每个油罐的入口阀门,out1、out2、out3、out4代表每

7、个油罐的出口阀门,clear1、clear2、clear3、clear4代表手动排污阀。bengin1,2,3和bengout1,2,3代表进口泵和出口泵。num代表泵输入总流量的比num=bengin1*1 + bengin2*2 + bengin3*2.5;num1代表泵输出总流量的比num1=bengout1*1 + bengout2*2 + bengout3*2.5;设置每个油罐跟液位相关的系数值xishu1=0.25;xishu2=0.2;xishu3=0.15;xishu4=0.3;if(in=1 && num>0)如果油罐1液位最低,增加油罐1的液位if(g

8、1<=g2 && g1<=g3 && g1<=g4 && g1<16)in1=1;in2=0;in3=0;in4=0;g1=g1+num*xishu1; else 如果油罐2液位最低,增加油罐2的液位if(g2<g1 && g2<=g3 && g2<=g4 && g2<16)in1=0;in2=1;in3=0;in4=0;g2=g2+xishu2*num;else如果油罐3液位最低,增加油罐3的液位if(g3<g1 && g3&l

9、t;g2 && g3<=g4 && g3<16)in1=0;in2=0;in3=1;in4=0;g3=g3+xishu3*num;else如果油罐4液位最低,增加油罐4的液位if(g4<g1 && g4<g2 && g4<g3 && g4<16)in1=0;in2=0;in3=0;in4=1;g4=g4+xishu4*num;if(out=1 && num1>0)如果油罐1液位最高,降低油罐1的液位if(g1>=g2 && g1>

10、=g3 && g1>=g4 && g1>2)out1=1;out2=0;out3=0;out4=0;g1=g1-xishu1*num1;else如果油罐2液位最高,降低油罐2的液位if(g2>=g1 && g2>=g3 && g2>=g4 && g2>2)out1=0;out2=1;out3=0;out4=0;g2=g2-xishu2*num1;else如果油罐3液位最高,降低油罐3的液位if(g3>=g1 && g3>=g2 && g

11、3>=g4 && g3>2)out1=0;out2=0;out3=1;out4=0;g3=g3-xishu3*num1;else如果油罐4液位最高,降低油罐4的液位if(g4>=g1 && g4>=g2 && g4>=g3 && g4>2)out1=0;out2=0;out3=0;out4=1;g4=g4-xishu4*num1;if(clear1=1 | clear2=1 | clear3=1 | clear4=1)手动排污g1=g1-clear1*0.1;g2=g2-clear2*0.1;g

12、3=g3-clear3*0.1;g4=g4-clear4*0.1;/jiewei1=jiewei1-0.1*clear1;/jiewei2=jiewei2-0.1*clear2;/jiewei3=jiewei3-0.1*clear3;/jiewei4=jiewei4-0.1*clear4;如果液位大于16,关闭相应的进口阀if(g1>=16)in1=0;if(g2>=16)in2=0;if(g3>=16)in3=0;if(g4>=16)in4=0;如果液位小于2,关闭相应出口阀if(g1<=2)out1=0;if(g2<=2)out2=0;if(g3<

13、=2)out3=0;if(g4<=2)out4=0;if(num=0)in1=0;in2=0;in3=0;in4=0;if(num1=0)out1=0;out2=0;out3=0;out4=0;(5)运行总画面(6)与PLC通信设置在工程浏览器中选择设备com1新建,如下图,配置com口跟PLC连接。设置bengin1,2,3和bengout1,2,3分别与Q0.0等相联系,可观察到PLC输出指示灯会随着这些变量的改变和改变。三、组态王部分总结组态王是组态王软件是一种通用的工业监控软件,它融过程控制设计、现场操作以及工厂资源管理于一体,将一个企业内部的各种生产系统和应用以及信息交流汇集在

14、一起,实现最优化管理,操作方便,界面美观。组态王软件结构由工程管理器、工程浏览器及运行系统三部分构成。通过这次课程设计,我们学会了如何建立一个组态王工程,如何设计界面,编写命令语言、以及报警事件、趋势曲线和报表的相关制作,权限的设置,以及与实际设备的简单通信,通过本次实习,我想在以后工作中,我们会更好的应用此例软件,完成工业监控。智能仪表部分一、MODBUS ASCII和MODBUS RTU通讯协议简介Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过

15、何种网络进行通信的。它描述了控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。两种串行传输模式:RTU 模式和 ASCII 模式。RTU传输模式:当设备使用RTU (Remote Terminal Unit) 模式在Modbus 串行链路通信, 报文中每个8位字节含有两个4 位十六进制字符。这种模式的主要优点是较高的数据密度,在相同的波特率下比ASCII 模式有更高的吞吐率。每个报文必须以连续的字符流传送。RTU 模式每个字节( 11 位 ) 的格式为 :编码系统: 8位二进制,报文中每个8 位字节含有两个4 位十六进制字符(

16、09, AF。)Bits per Byte: 1 起始位,8 数据位,首先发送最低有效位,1 位作为奇偶校验,1停止位。ASCII传输模式当 Modbus 串行链路的设备被配置为使用ASCII (American Standard Code for Information Interchange) 模式通信时, 报文中的每个 8 位子节以两个ASCII 字符发送。ASCII 模式每个字节( 10 位 ) 的格式为 :编码系统: 十六进制,ASCII 字符 0-9,A-F。报文中每个ASCII 字符含有1 十六进制字符。Bits per Byte: 1 起始位,7 数据位,首先发送最低有效位,1

17、 位奇偶校验,1 停止位。03读保持寄存器上位机发送数据格式:“ : ” ADDRESS 03 ADDRH ADDRL NUMH NUML LRC 0X0D 0X0A正确时变频器返回数据格式:“ : “ ADDRESS 03 BYTECOUNT DATA1 DATA2 DATA3 DATAN LRC 0D 0A06 写单个保持寄存器值上位机发送数据格式:“ : “ ADDRESS 06 ADDRH ADDRL DATAH DATAL LRC 0X0D 0X0A正确时变频器返回数据格式:“ : “ ADDRESS 06 ADDRH ADDRL DATAH DATAL LRC 0X0D 0X0A二

18、、MODBUS ASCII编程以及与组态王通信1、变量定义unsigned char ERR21= " Input LRC ERROR!" /出错时显示字符unsigned char RX32; /单片机接受数据数组unsigned char TX32; /03功能时单片机发送数据数组unsigned char TX632; /06功能时单片机发送数据数组unsigned char Buf10; /存储数据的数组unsigned int flag; / 上位机发送数据标志位unsigned int flag1; /单片机应答数据标志位unsigned int flow; /

19、 流量值unsigned int temperature; /温度值unsigned char LRC; /上位机发送数据校验码unsigned char LRCt; /单片机应答数据校验码2、通过UART中断完成上位机给单片机发送编程思路: 通过UART中断,实现上位机给单片机发送数据,当单片机接受到:,表示上位机要向单片机发送指令,相应标志位置1,当再次发生中断时,就开始接受数据,同时存入RX32的数组里,直到接收到回车换行符,则发送命令结束。此时发送标志位置1,进入应答程序。#pragma vector=USCI_A1_VECTOR_interrupt void USCI_A1_ISR(

20、void) while (!(UCA1IFG & UCTXIFG); / 判断是否发送完毕 if(UCA1RXBUF = ':') /:为起始标志,如果开始,标志位flag置位 flag = 1; if(flag=1) /当标志位flag置位说明发送命令开始,开始接受命令数据 RX0 = ':' if(UCA1RXBUF != 0x0D && UCA1RXBUF != 0x0A ) /只要不是回车换行符,就依次将数据存入接受数组RX中,同时计数变量tempnumb加1 tempnumb+; RXtempnumb = UCA1RXBUF ;

21、 if(UCA1RXBUF = 0x0D) /若是回车 tempnumb+; RXtempnumb = 'D' ; if(UCA1RXBUF = 0x0A) /若是换行 tempnumb+; RXtempnumb = 'A' ; flag=0; /接受标志位清零 flag1=1; /发送标志位置1 TTXX(); /调用发送数据函数 3、单片机通过UART中断向上位机发送应答指令编程思路: 先计算上位机发送数据的校验码,如果和发送的校验码相同,单片机再应答。设置寄存器地址0001,存储流量数据;设置寄存器0002,存储温度数据。然后判断是03号功能还是06号功能

22、,若是03号功能,按照相应的格式发送数据,若是06号功能,按照命令更改数据,并返回应答命令。void TTXX()int i; int j; unsigned int b; unsigned int c; unsigned int d; In_LRC(); /计数上位机发送命令校验码 if(RX8='1') /如果地址为寄存器0001,发送流量数据 shitohex(flow); if(RX8='2') /如果地址位寄存器0002,发送温度数据 shitohex(temperature); if(RX3='0' && RX4=&#

23、39;3') /如果是03号功能 if(LRCHi = RXtempnumb-3) &&(LRCLo = RXtempnumb-2) /如果上位机发送校验码正确 for(b=0;b<=4;b+) TXb = RXb; temp = asciitohex(RXtempnumb-4); /计算单片机要发送数据的字节数 TX5 = hextoascii(temp*2)>>4)&0x0F); TX6 = hextoascii(temp*2)&0x0F); for(i=0;i<temp*4;i+=2) TX7+i = hextoascii(

24、Bufi); /要发送的数据 TX8+i = hextoascii(Bufi+1); tempnumt = 7+i; /统计数据长度,用于计算校验码 Out_LRC(); /计算单片机发送数据校验码 TX7+i = LRCtHi; TX8+i = LRCtLo; TX9+i = 0x0D; TX10+i = 0x0A; for(j=0;j<=(10+i);j+) /单片机发送数据 while (!(UCA1IFG & UCTXIFG); / 判断是否发送完毕 UCA1TXBUF=TXj; else /如果校验码不正确,返回错误代码 Input LRC ERROR!只能通过串口调试

25、看到 ERR19='8' ERR20=TX4; for(d=0;d<=20;d+) while (!(UCA1IFG & UCTXIFG); / 判断是否发送完毕 UCA1TXBUF=ERRd ; else if(RX3='0' && RX4='6') /如果是06号功能 for(c=0;c<=tempnumb;c+) TX6c = RXc; while (!(UCA1IFG & UCTXIFG); / 判断是否发送完毕 UCA1TXBUF=TX6c; selflow(TX610); /设置流量值 se

26、ltemp(TX611); /设置温度值 flag1=0; /单片机发送标志位清零 tempnumb=0; /上位机发送数据计算值清零 4、辅助模块部分(1)、LRC校验模块编程思路 :LRC 的计算, 对报文中的所有的连续8 位字节相加,忽略任何进位,然后求出其二进制补码。unsigned char *auchMsg; 指向含有用于生成LRC 的二进制数据报文缓冲区的指针,unsigned short usDataLen; 报文缓冲区的字节数.unsigned char MODBUS_LRC(unsigned char *auchMsg, unsigned short usDataLen)u

27、nsigned char uchLRC = 0 ; / LRC 初始化while (usDataLen-) / 完成整个报文缓冲区uchLRC += *auchMsg+ ; /缓冲区字节相加,无进位return (unsigned char)(-(char)uchLRC) ; / 返回二进制补码(2)发送和应答校验码计数程序void In_LRC()unsigned int a;for(a=1;a<(tempnumb-3);a+=2) tempRX(a-1)/2 = (asciitohex(RXa)<<4) | asciitohex(RXa+1);LRC=MODBUS_LRC

28、(&tempRX0,(tempnumb-4)/2); /进行LRC效验计算LRCHi = hextoascii(LRC>>4)&0x0F);LRCLo = hextoascii(LRC&0x0F);void Out_LRC()unsigned int c;for(c=1;c<tempnumt;c+=2) tempTX(c-1)/2 = (asciitohex(TXc)<<4); tempTX(c-1)/2 = (asciitohex(TXc)<<4) | asciitohex(TXc+1);LRCt=MODBUS_LRC(&am

29、p;tempTX0,(tempnumt-1)/2); /进行LRC效验计算LRCtHi = hextoascii(LRCt>>4)&0x0F);LRCtLo = hextoascii(LRCt&0x0F); (3)进制之间转换程序由于发送和读取的数据是字符,而寄存器中数据多按照十六进制存储,故需要各种进制间的相互转换。/十六进制数转换为ASCII码unsigned char hextoascii(unsigned char hex) if(hex<=0x09) return hex+0x30; else return hex+0x37;/ASCII码转换为十六

30、进制的数unsigned char asciitohex(unsigned char ascii) if(ascii<=0x39) return ascii-0x30; else return ascii-0x37;/十进制转十六进制,由于组态王通信时会自动将十六进制数转换位十进制数,因此需要在单片机内将十进制数转换位十六进制数,这样组态王读到的就是十进制的数据。unsigned char shitohex(unsigned int shi) int i,b,d,c;int a=0; d=4; char shiliu10; while (shi) /shi代表相应的十进制数 c=shi%

31、16; /每次除以16取余求得相应的十六进制数 shi=shi/16; shiliua = c; a+; for(i=a;i<=4;i+) /得到的数据首位倒置,才是要求的十六进制数 shiliui=0; for(b=0;b<4;b+) d-; Bufb=shiliud; return 0;(4)波特率,流量、温度的设置 /选定流量void selflow(unsigned char selflow)switch(selflow)case '0':flow=100; break;case '1':flow=1799; break; case '

32、;2':flow=5000; break;default:flow=1799; break; /选定温度void seltemp(unsigned char seltemp)switch(seltemp)case '0':temperature=1;break;case '1':temperature=20; break; case '2':temperature=100; break;default:temperature=20; break;/设定波特率void selbps(unsigned char selbps)switch(s

33、elbps) case '0': UCA1CTL1 |= UCSSEL_1; / 时钟源选择 UCA1BR0 = 0x1B; /1200 UCA1BR1 = 0x00; UCA1MCTL = 04; break; case '1': UCA1CTL1 |= UCSSEL_1; / 时钟源选择 UCA1BR0 = 0x0D; /2400 UCA1BR1 = 0; UCA1MCTL = 0X0A; break; case '2': UCA1CTL1 |= UCSSEL_1; / 时钟源选择 UCA1BR0 = 6; /4800 UCA1BR1 = 0

34、; UCA1MCTL = 0x0C; UCA1CTL1 &= UCSWRST; / 使能串口功能 UCA1IE |= UCRXIE; / 使能接收中断 _BIS_SR(GIE); break; case '3': UCA1CTL1 |= UCSSEL_1; / 时钟源选择 UCA1BR0 = 3; /9600 UCA1BR1 = 0; UCA1MCTL = 06; UCA1CTL1 &= UCSWRST; / 使能串口功能 UCA1IE |= UCRXIE; / 使能接收中断 _BIS_SR(GIE); break; default:UCA1CTL1 |= UC

35、SSEL_1; / 时钟源选择 UCA1BR0 = 3; / 32768hz/3=9600 UCA1BR1 = 0; UCA1MCTL = 06; break; 5、实验现象: 测试IO设备界面组态王画面:实现读写功能三、MODBUS RTU编程以及与组态王通信1、变量定义int R_flag=1; / 延时3.5字符标志int R_flag1=0;int R_flag2=1;unsigned char Crc_RX32; /存储上位机发送的字符的数组unsigned char Crc_TX32; /存储单片机应答的字符的数组unsigned int crcnumt; / 统计上位机发送字符数

36、据长度unsigned int crcnumr; /统计单片机应答数据长度unsigned char CRCHi8; /上位机发送数据的校验码高位unsigned char CRCLo8; /上位机发送数据的校验码低位unsigned char CRCtHi8; /单片机发送数据的校验码高位unsigned char CRCtLo8; /单片机应答数据的校验码低位unsigned char Buf10; /测试数据2、设计延时3.5字符控制发送和接受数据的开始和接受 while (1) /接收 起始 结束 判断函数 if(R_flag1=1) if(count_leg=300) /此时间远大于

37、3.5个字符,确保通信的正确 RTU_T(); R_flag = 1; count_leg=0; R_flag1=0; else count_leg=count_leg+1; 3、通过UART中断完成上位机给单片机发送编程思路:通过UART中断完成上位机给单片机发送,当延时大于3.5个字符,R_flag=1,依次将值存入 Crc_RX数组中 ,再判断,若延时大于3.5个字符,则发送结束,R_flag1=1。#pragma vector=USCI_A1_VECTOR_interrupt void USCI_A1_ISR(void) if(R_flag=1) Crc_RXcrcnumr = UCA

38、1RXBUF; crcnumr+; if(crcnumr=8) R_flag1=1; R_flag=0; 4.通过UART中断完成单片机应答上位机首先计算校验码,若校验码正确,计算应答指令每位的值,存入Crc_TX中。void RX_TX() unsigned int b;In_CRC(); /计算上位机发送数据的校验码 if(CRCHi8 = Crc_RXcrcnumr-2)&&(CRCLo8 = Crc_RXcrcnumr-1) /若校验码正确 for(b=0;b<2;b+) Crc_TXb = Crc_RXb; Bytenum(); /计算单片机应答的字节数 Out

39、_CRC(); /计算单片机应答数据的校验码 void RTU_T() /通过该程序将Crc_TX发送到上位机 int i; int j; RX_TX(); for(j=0;j<=200;j+) ; / 延时4毫秒发送开始 for(i=0;i<=(crcnumt+1);i+) while (!(UCA1IFG & UCTXIFG); / 判断是否发送完毕 UCA1TXBUF =Crc_TXi; for(j=0;j<=200;j+) ; / 延时4毫秒发送结束 crcnumr=0; 5、辅助模块(1)CRC校验程序编程思路:1. 将一个16 位寄存器装入十六进制FFFF

40、 (全1). 将之称作CRC 寄存器.2. 将报文的第一个8位字节与16 位CRC 寄存器的低字节异或,结果置于CRC 寄存器.3. 将CRC 寄存器右移1位(向LSB 方向), MSB 充零. 提取并检测LSB.4. (如果LSB 为0): 重复步骤3 (另一次移位).(如果LSB 为1): 对CRC 寄存器异或多项式值0xA001 (1010 0000 0000 0001).5. 重复步骤3 和 4,直到完成8 次移位。当做完此操作后,将完成对8位字节的完整操作。6. 对报文中的下一个字节重复步骤2 到5,继续此操作直至所有报文被处理完毕。7. CRC 寄存器中的最终内容为CRC 值.8.

41、 当放置CRC 值于报文时,如下面描述的那样,高低字节必须交换。数据表: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, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,

42、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, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,

43、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, 0x01, 0xC0,0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,0x01,

44、 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

45、, 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, 0xC1, 0x8

46、1, 0x40, 0x01, 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,

47、 0xC8, 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

48、, 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, 0x6

49、3, 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, 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, 0x4E, 0x

温馨提示

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

评论

0/150

提交评论