modbus通讯协议介绍.doc

modbus通讯协议介绍.doc

ID:55797802

大小:144.00 KB

页数:12页

时间:2020-03-01

上传者:U-7604
modbus通讯协议介绍.doc_第1页
modbus通讯协议介绍.doc_第2页
modbus通讯协议介绍.doc_第3页
modbus通讯协议介绍.doc_第4页
modbus通讯协议介绍.doc_第5页
资源描述:

《modbus通讯协议介绍.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

Modbus逼尬偽終ModBus通讯协议分为RTU协议和ASCII协议,我公司的多种仪表都采用ModBusRTU通讯协议,如:CD194E多功能电力仪表、K系列可编程数显表、可编程数显报警表、LP低压保护系列等。一、通讯规约当通讯命令发送至仪器时,符合相应地址码的设备接通讯命令,并除去地址码,读取信息,如果没有出错,则执行相应的任务;然示把执行结杲返送给发送者。返送的信息屮包括地址码、执行动作的功能码、执行动作后结果的数据以及错谋校验码。如果出错就不发送任何信息。1.信息帧结构地址码功能码数据区错误校验码8位|8位NX8位16位地址码:地址码是信息帧的第■字节(8位),从0到255。这个字节表明由用八设置地址的从机将接收由主机发送来的信息。每个从机都必须有唯一的地址码,并且只有符合地址码的从机才能响应回送。当从机回送信息时,相当的地址码表明该信息来自于何处。功能码:主机发送的功能码告诉从机执行什么任务。表1-1列出的功能码都有具体的含义及操作。代码含义Mi03|读取数据读取N个保持寄存器的值04读取数据读取N个输入寄存器的值数据区:数据区包含需耍从机执行什么动作或由从机采集的返送信息。这些信息可以是数值、参考地址等等。例如,功能码告诉从机读取寄存器的值,则数据区必需包含耍读取寄存器的起始地址及读取长度。对于不同的从机,地址和数据信息都不相同。错误校验码:丄机或从机可用校验码进行判别接收信息是否出错。有时,由丁•电子噪声或其它一些干扰,倍息在传输过程屮会发生细微的变化,错误校验码保证了丄机或从机対在传送过程屮出错的信息不起作用。这样增加了系统的安全和效率。错误校验采用CRC-16校验方法。注:信息帧的格式都棊本相同:地址码、功能码、数据区和错谋校验码。2.错误校验冗余循环码(CRC)包含2个字节,即16位二进制。CRC码由发送设备计算,放置于发送信息的尾部。接收信息的设备再重新计算接收到信息的CRC码,比较计算得到的CRC码是否与接收到的相符,如果两者不相符,则表明出错。CRC码的计算方法是,先预置16位寄存器全为1。再逐步把每8位数据信息进行处理。在进行CRC码计算时只用8位数据位,起始位及停止位,如有育偶校验位的话也包括奇偶校验位,都不参与CRC码计算。在计算CRC码时,8位数据9寄存器的数据相异或,得到的结杲向低位移一字节,用0填补最高位。再检查最低位,如果最低位为1,把寄存器的内容打预置数相异或,如果最低位为0,不进行异或运算。 这个过程一直重复8次。第8次移位后,下一个8位再与现在寄存器的内容相相异或,这个过程与以上一样重复8次。当所有的数据信息处理完示,最示寄存器的内容即为CRC码值。CRC码屮的数据发送、接收时低字节在前。计算CRC码的步骤为:•预置16位寄存器为十六进制FFFF(即全为1)。称此寄存器为CRC寄存器;•把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器;•把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位;•如果最低位为0:履第3步(再次移位);如果最低位为1:CRC寄存器与多项式A00K1010000000000(X)1)进行异或;•重复步骤3和4,宜到右移8次,这样整个8位数据全部进行了处理;•重复步骤2到步骤5,进行下一个8位数据的处理;•最后得到的CRC寄存器即为CRC码。1.功能码()3、04,读取点和返回值仪表采用ModbusRTU通讯规约,利用通讯命令,可以进行读取点(“保持寄存器”)或返冋值(“输入寄存器”)的操作。保持和输入寄存器都是16位(2字节)值,并且高位在前。这样用于仪表的读取点和返回值都是2字节。从机响应的命令格式是从机地址、功能码、数据区及CRC码。数据区屮的寄存器数据都是每两个字节高字节在前。二、编程举例下面是一个用VC编写的ModBusRTU通讯的例子1、通讯口设置DCBdeb;hCom=CrealeFile(uCOM1GENERIC_READIGENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);if(hCom==INVALID_HANDLE_VALUE){MessageBox("createfileerror,error'*);)BOOLerror=SetupComm(hCom,1024,1024);if(!error)MessageBox("setupcommerror"); error=GetCommState(hCom,&deb);if(!error)MessageBox("getcommslate,error,');deb.BaudRate=4800;dcb.ByteSize=8;dcb.Parity=EVENPARITY;//NOPARITY;dcb.StopBits=ONESTOPBIT;error=SetCommState(hCom,&dcb);2、CRC校验码计算UINTcrcvoidcalccrc(BYTEcrcbuf){BYTEi;crc=crcAcrcbuf;for(i=0;i<8;i++){BYTETT;TT=crc&1;crc=crc»1;crc=crc&0x7fff;if(TT==l)crc=crcA0xa001;crc=crc&Oxffff;})3、数据发送zxaddul;//读取地址为1的巡检表数据zxnum=10;//读取十个通道的数据writebuf2[0]=zxaddr;writebuf2[l]=4;writebuf2[2]=0;writebuf2[3]=0; writebuf2[4]=0;wrilebul2[5]=zxnum;crc=0xffff;calccrc(writebuf2[0]);calccrc(writebuf2111);calccrc(writebuf2[2]);calccrc(wrilebuf2[3]);calccrc(writebuf2[4]);calccrc(writebuf2[5]);writebuf2[6]=crc&Oxff;//加入校验wrilebuf2[7]=crc/0x100;WriteFile(hCom,writebuf2,8,&comnum,NULL);4、读取数据ReadFile(hCom,writebuf,5+zxnum*2,&comnum,NULL);//读取zxnum个通道数据对增加错谋处理程序,如地址码错谋、CRC码错祝判断、通讯故障处理等。1、网络节点数网络节点数与所选RS-485芯片驱动能力和接收器的输入阻抗有关,如75LBC184标称最大值为64点,SP485R标称最大值为40()点。实际使用时,因线缆长度、线径、网络分布、传输速率不同,实际节点数均达不到理论值°例如75LBC184运用在500m分布的RS-485网络上节点数超过50或速率大于9.6kb/s时,工作可靠性明显下降。通常推荐节点数KRS-485芯片最人值的70%选取,传输速率在1200〜9600b/s之间选取。通信距离1km以内,从通信效率、节点数、通信距离等综合考虑选用4800b/s最佳。通信距离1km以上时,应考虑通过増加屮继模块或降低速率的方法提高数据传输川幕性o2、节点与主干距离理论上讲,RS-485节点与主干之间距离(T头,也称引出线)越短越好。T头小于10m的节点采用T型,连接对网络匹配并无太人影响,可放心使用,但对于节点间距非常小(小于Im,如LED模块组合屏)应采用星型连接,若采用T型或串珠型连接就不能正常工作。RS-485是一种半双工结构通信总线,大多用于一对多点的通信系统,因此主机(PC)应置于一端,不耍置于中间而形成主干的T型分布。3、总线稳态控制(握手信号)大多数使用者选择在数据发送前1ms将收发控制端TC置成高电平,使总线进入稳泄的发送状态后才发送数据;数据发送完毕再延迟1ms后置TC端成低电平,使可靠发送完毕后才转入接收状态。据测试使用TC端的延时有4个机器周期已满足耍求;4、为保证数据传输质量,对每个字节进行校验的同时,应尽量减少特征字和校验字惯用的数据包格式由引导码、长度码、地址码、命令码、数据、校验码、尾码组成,每个数据包长度达20〜30字节。在RS-485系统屮这样的协议不太简练。推荐用户使用MODBUS协议,该协议己广泛应用于水利、水 文、电力等行业设备及系统的国际标准屮。5、RS-485接口电路的电源、接地对于由MCU结合RS-485微系统组建的测控网络,应优先采用各微系统独立供电力案,最好不耍采用一台人电源给微系统并联供电,同吋电源线(交直流)不能与RS-485信号线共用同一股多芯电缆。RS-485信号线宜选用截面积().75mm2以丄双绞线而不是平直线。同时屏蔽线耍接地。6、光电隔离在某些工业控制领域,由于现场情况十分复杂,各个节点之间存在很高的共模电压。虽然RS-485接口采用的是差分传输方式,具有一定的抗共模干扰的能力,但当共模电床超过RS-485接收器的极限接收电压,即大于+12V或小于一7V时,接收器就再也无法正常工作了,严重时甚至会烧毁芯片和仪器设备。解决此类问题的方法是通过DC-DC将系统电源和RS-485收发器的电源隔离;通过光耦将信号隔离,彻底消除共模电压的影响。7、RS-485系统的常见故障及处理方法RS-485是一种低成本、易操作的通信系统,但是稳肚性弱同时相互牵制性强,通常有一个节点出现故障会导致系统整体或局部的瘫痪,而H.又难以判断。故向读者介绍一些维护RS-485的常用方法。1、若出现系统完全瘫痪,大多因为某节点芯片的VA、VB对电源击穿,使用万用表测VA、VB间差模电压为零,而对地的共模电压大于3V,此时町通过测共模电斥大小來排杏,共模电压越大说明离故障点越近,反之越远:2、总线连续儿个节点不能止常工作。一般是山英中的一个节点故障导致的。一个节点故障会导致邻近的2〜3个节点(一般为后续)无法通信,因此将其逐一与总线脱离,如某节点脱离后总线能恢复正常,说明该节点故障;3、集中供电的RS-485系统在上电时常常出现部分节点不止常,但每次又不完全一-样。这是山于对RS-485的收发控制端TC设计不合理,造成微系统上电吋节点收发状态混乱从而导致总线堵塞。改进的方法是将各微系统加装电源开关然后分别上电;4、系统基本止常但偶尔会出现通信失败。-般是山于网络施工不合理导致系统町靠性处于临界状态,®好改变走线或增加中继模块。应急方法之一是将出现失败的节点更换成性能更优异的芯片;5、因MCU故障导致TC端处于长发状态而将总线拉死一片。提醍读者不要忘记对TC端的检杳。尽管RS-485规定差模电压大于200mV即能止帘工作。但实际测量:-•个运行良好的系统其差模电压一•般在1.2V左右(因网络分布、速率的差异有可能使差模电压在0.8-1.5V范围内)。6、最后还有一点常见的问题就是:波特率、校验的设置婆一致;地址码不耍重复。Modbus遏猶简令一、Modbus协议简介Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它己经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集屮监控。 此协议过义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果冋应來口其它设备的请求,以及怎样侦测错谋并记录。它制泄了消息域格局和内容的公共格式。当在一Modbus网络上通信时,此协议决足了每个控制器须耍知道它们的设备地址,识别按地址发來的消息,决定耍产生何种行动。如果需耍回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错谋检测的方法。1、在Modbus网络上转输标准的Modbusn是使用一RS-232C兼容串行接口,它泄义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。控制器能直接或经由Modem组网。控制器通信使用主一从技术,即仅一设备(主设备)能初始化传输(査询)。萇它设备(从设备)根据主设备查询提供的数据作出相应反应。典型的主设备:主机和可编程仪表。典型的从设备:可编稈控制器。主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返冋一消息作为冋应,如果是以广播方式查询的,则不作任何冋应。Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有耍发送的数据、一错误检测域。从设备冋应消息也由Modbus协议构成,包括确认耍行动的域、任何耍返冋的数据、和一错谋检测域° 如果在消息接收过程屮发生一借谋,或从设备不能执行英命令,从设备将建立一借谋消息并把它作为冋应发送出去。2、在英它类型网络上转输在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。提供的多个内部通道可允许同时发生的传输进程。在消息位,Modbus协议仍提供了主一从原则,尽管网络通信方法是“对等”。如杲一控制器发送一消息,它只是作为主设备,并期望从从设备得到冋应。同样,当控制器接收到一消息,它将篷立一从设备冋应格式并返冋给发送的控制器。3、查询一冋应周期设备地址功能代码_数_—据一2苣3错误检测从设备的回应消息图1主一从查询一回应周期表(1)査询杳询消息屮的功能代码告之被选屮的从设备耍执行何种功能。数据段包含了从设备耍执行功能的任何附加信息。例如功能代码03是耍求从设备读保持寄存器并返冋它们的内容。数据段必须包含耍告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错谋检测域为从设备提供了一种验证消息内容是否止确的方法。(2)回应如果从设备产生一止常的冋应,在冋应消息屮的功能代码是在査询消息屮的功能代码的冋应。数据段包。括了从设备收集的数据:象寄存器值或状态。如果有借谋发生,功能代码将被修改以用丁指出冋应消息是错误的,同时数据段包含了描述此错谋信息的代码C错谋检测域允许丄设备确认消息内容是否可用。二、两种传输方式控制器能设置为两种传输模式(ASCII或RTU)中的任何一种在标准的Modbus网络通信。用八选择想耍的模式,包括串「I通信参数(波特率、校验方式等),在配置每个控制器的时候,在一个Modbus网络上的所有设 备都必须选择相同的传输模式和串口参数。ASCH模式••地址功能代码数据数量数据1•••数据nLRC高字节LRC低字冋车换行RTU模式地址功能代码数据数量数据1•••数据nCRC低字节CRC高字节所选的ASCII或RTU方式仅适用于标准的Modbus网络,它眾义了在这些网络丄连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。在英它网络上(象MAP和ModbusPlus)Modbus消息被转成与串行传输无关的帧。1、ASCII模式当控制器设为在Modbus网络上以ASCn(美国标准信息交换代码)模式通信,在消息屮的每个8Bit字节都作为两个ASCII字符发送。这种方式的主耍优点是字符发送的时间间隔可达到1秒而不产生错误。代码系统•十六进制,ASCH字符0...9,A...F•消息屮的每个asch字符都是一个十六进制字符组成每个字节的位•1个起始位•7个数据位,最小的有效位先发送•1个奇偶校验位,无校验则无•1个停止位(有校验时),2个Bit(无校验时)错谋检测域•LRC(纵向兀长检测)2、RTU模式当控制器设为在Modbus网络上以RTU(远程终端单元)模式通信,在消息中的每个8Bit字节包含两个4Bit的十六进制字符。这种方式的主耍优点是:在同样的波特率下,可比ASCII方式传送更多的数据。代码系统•8位二进制,十六进制数A...F•消息屮的每个8位域都是一个两个十六进制字符组成每个字节的位•1个起始位•8个数据位,最小的有效位先发送•1个奇偶校验位,无校验则无 •1个停止位(有校验时,2个Bil(无校验时)错谋检测域•CRC(循环冗反检测)三、Modbus消息帧两种传输模式屮(ASCII或RTU),传输设备以将Modbus消息转为有起点和终点的帧,这就允许接收的设备在消息起始处开始工作,读地址分配信息,判断哪-个设备被选屮(广播方式则传给所有设备),判知I何时信息已完成。部分的消息也能侦测到并且错谋能设置为返冋结果。1、ASCII帧使用ASCH模式,消息以冒号(:)翔:(ASCH码3AH)开始,以回车换行符结束(ASCU码()DH,0AH)。其它域可以使用的传输字符是十六进制的0...9A..F。网络丄的设备不断侦测":”字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)來判断是否发给自己的。消息屮字符间发送的时间间隔最长不能超过1秒,否则接收的设备将认为传输错谋。一个典型消息帧如下所示:起始位设备地址功能代码数据LRC校验结束符1个字符2个字符2个字符n个字符2个字符2个字符图2ASCII消息帧3、地址域消息帧的地址域包含两个字符(ASCII)或8Bil(RTU)o可能的从设备地址是0...247(|-进制)。单个设备的地址范閑是1...247。主设备通过将耍联络的从设备的地址放入消息屮的地址域来选通从设备。当从设备发送冋应消息时,它把自己的地址放入回应的地址域屮,以便主设备知道是哪-个设备作出回应。地址0是用作广播地址,以使所有的从设备都能认识。当Modbus协议用于更高水准的网络,广播可能不允许或以其它方式代替。4、如何处理功能域消息帧屮的功能代码域包含了两个字符(ASCII)或8Bits(RTU)o可能的代码范閑是十进制的1...255。当然,有些代码是适用于所有控制器,有此是应用于某种控制器,还有些保留以备后用。当消息从主设备发往从设备时,功能代码域将告之从设备需耍执行哪些行为。例如去读取输入的开关状态,读一组寄存器的数据内容,读从设备的诊断状态,允许调入、记录、校验在从设备屮的程序等。当从设备冋应时,它使用功能代码域來指示是止常冋应(无谋)还是有某种错谋发生(称作异议冋应)。对止常回应,从设备仅冋应相应的功能代码。对异议冋应,从设备返冋一等同于止常代码的代码,但最重要的位置为逻辑lo例如:一从主设备发往从设备的消息耍求读一组保持寄存器,将产生如下功能代码:00000011(十六进制03H) 对正常冋应,从设备仅冋应同样的功能代码。对异议冋应,它返冋:I0000011(十六进制83H)除功能代码因异议错谋作了修改外,从设备将一独特的代码放到冋应消息的数据域屮,这能告诉主设备发生了什么错误。主设备应用程序得到异议的冋应后,典型的处理过程是重发消息,或者诊断发给从设备的消息并报告给操作员。5、数据域数据域是由两个十六进制数集合构成的,范则OO...FFo根据网络传输模式,这可以是由一对ASCD字符组成或由一RTU字符组成。从丄设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代码所逹义的所为。这包括了彖不连续的寄存器地址,耍处理项的数目,域屮实际数据字节数。例如,如果主设备需耍从设备读取一组保持寄存器(功能代码03),数据域指定了起始寄存器以及耍读的寄存器数量。如果主设备写一组从设备的寄存器(功能代码10十六进制),数据域则指明了耍写的起始寄存器以及耍写的寄存器数量,数据域的数据字节数,耍写入寄存器的数据。如杲没有借谋发生,从从设备返冋的数据域包含请求的数据。如杲有错谋发生,此域包含一异议代码,主设备应用程序可以用來判断采取下一步行动。在某种消息屮数据域可以是不存在的(0K度)。例如,主设备耍求从设备冋应通信事件记录(功能代码0B十六进制),从设备不需任何附加的信息。6、错谋检测域标准的Modbus网络有两种错误检测方法。借谋检测域的内容视所选的检测方法而过。ASCII当选用Ascn模式作字符帧,错谋检测域包含两个Ascn字符。这是使用lrc(纵向冗长检测)方法对消息内容计算得出的,不包括开始的冒号符及冋车换行符。LRC字符附加在冋车换行符前面。RTU当选用RTU模式作字符帧,错谋检测域包含一16Bits值(用两个8位的字符來实现)。错谋检测域的内容是通过对消息内容进行循环冗长检测方法得出的。CRC域附加在消息的最后,添加时先是低字节然后是高字节。故CRC的高位字节是发送消息的最后一个字节。7、字符的连续传输当消息在标准的Modbus系列网络传输时,每个字符或字节以如下方式发送(从左到右):最低有效位…最高有效位使用ASCII字符帧时,位的序列是:有奇偶校验启始位1234567奇偶位停止位无奇偶校验 启始位1234567停止位停止位使用RTU字符帧吋,位的序列是:有奇偶校验启始位12345678奇偶位停止位无奇偶校验启始位1234567*停止位停止位四、错误检测方法标准的Modbus串行网络采用两种借误检测方法。奇偶校验对每个字符都可用,帧检测(LRC或CRC)应用于整个消息。它们都是在消息发送前由主设备产生的,从设备在接收过程中检测每个字符和整个消息帧。用户要给主设备配置一预先疋义的超时时间间隔,这个时间间隔要足够长,以使任何从设备都能作为正常反应。如果从设备测到一传输错谋,消息将不会接收,也不会向主设备作出冋应。这样超时事件将触发主设备来处理错误。发往不存在的从设备的地址也会产生超时。1、奇偶校验用户可以配置控制器是奇或偶校验,或无校验。这将决肚了每个字符屮的奇偶校验位是如何设置的如果指定了奇或偶校验,“1”的位数将算到每个字符的位数屮(ASCII模式7个数据位,RTU屮8个数据位)。例如RTU字符帧屮包含以下8个数据位:11000101整个“1”的数目是4个。如杲便用了偶校验,帧的奇偶校验位将是0,使得整个“1”的个数仍是4个。如果使用了奇校验,帧的奇偶校验位将是1,使得整个“1”的个数是5个。如杲没有指圧奇偶校验位,传输时就没有校验位,也不进行校验检测。代替一附加的停止位填充至耍传输的字符帧中。2、LRC检测使用ASCII模式,消息包括了一皋于LRC方法的错谋检测域。LRC域检测了消息域中除开始的冒号及结束的冋车换行号外的内容。LRC域是一个包含一个8位二进制值的字节。LRC值由传输设备来计算并放到消息帧屮,接收设备在接收消息的过稈中计算LRC,并将它和接收到消息屮LRC域屮的值比较,如果两值不等,说明有错谋。LRC方法是将消息屮的8Bil的字节连续累加,丢弃了进位。LRC简单函数如下:staticunsignedcharLRC(auchMsg,usDataLen)unsignedchar*auchMsg;/*耍进行计算的消息*/unsignedshortusDataLen;/*LRC耍处理的字节的数量*/{unsignedcharuchLRC=0;/*LRC字节初始化*/while(usDataLen—)/*传送消息*/uchLRC+=*auchMsg++;/*累加*/ return((unsignedchar)(-((char_uchLRC)));}3、CRC检测使用RTU模式,消息包括了一基于CRC方法的错谋检测域。CRC域检测了整个消息的内容。CRC域是两个字节,包含一16位的二进制值。它由传输设备计算后加入到消息屮。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有谋。CRC是先调入一值是全T的16位寄存器,然后调用一过程将消息屮连续的8位字节各当前寄存器中的值进行处理。仅每个字符屮的8Bi[数据对CRC有效,起始位和停止位以及奇偶校验位均无效。CRC产生过程屮,每个8位字符都单独和寄存器内容相或(OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,贝怀进行°整个过程耍重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。最终寄存器中的值,是消息屮所有的字节祁执行之后的CRC值。CRC添加到消息中时,低字节先加入,然后高字节。CRC简单函数如下:unsignedshortCRC16(puchMsg,usDataLen)unsignedchar*puchMsg;/*耍进彳亍CRC校验的消息*/unsignedshortusDataLen;/*消息屮字节数*/{unsignedcharuchCRCHi=OxFF;/*高CRC字节初始化unsignedcharuchCRCLo=OxFF;/*低CRC字节初始化*/unsignedulndex;/*CRC循环屮的索引*/while(usDataLen—)/*传输消息缓冲区*/{ulndex=uchCRCHiA*puchMsgg++;/*计算CRC*/uchCRCHi=uchCRCLoAauchCRCHi[ulndex);uchCRCLo=auchCRCLo[uIndex];}retum(uchCRCHi«8IuchCRCLo);)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭