通讯技术-modbus协议中译版_第1页
通讯技术-modbus协议中译版_第2页
通讯技术-modbus协议中译版_第3页
通讯技术-modbus协议中译版_第4页
通讯技术-modbus协议中译版_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

ModbusModbus可编程控制器之间可相互通讯,也可与不同网络上的其他设备进行通讯,支撑网络有Modicon的Modbus和OEM(机械设备制造商)来说,Modicon可为合作伙伴提供现有Modbus+网络紧密地集成到他们的产品设计中去。Modicon的各种控制器使用的公共语言被称为Modbus协议,该协议定义了控制器能识别和使用的信息结构。当在取出包含在信息中的数据和资料等,控制器也可组织回答信息,并使用Modbus协议将此信息传送出去。序库和驱动程序,实现嵌入式Modbus协议信息与此网络中用子节点设备间通讯的特殊信息帧的数据转换。4和AT/HC-和和1:Modbus协议应用示意和 MB+Modbus的数ModiconModbusRS-232兼容的串行接口,定义了连接器,接线电缆,信号等级,传输波特率,和奇偶校验,控制器可直接或通过调制解调器(Modems)接入总线(网络)。控制器通讯使用主从技术,确认动作的代码,返回数据和错误。若在接收信息时出现一个错误或从机不能执行要求的动作时,从机会组织一个在其它总线上传输在MAP网络上通讯。从一台从机设备返回一个响应,类似,当一台控制器接受信息时,它就组织一个从机设备的响应信息,并返回至送信查询响应主主机查询信88从机响应信查询

图2:主从查询响应周响应两种串行传输口的通讯参数。(波特率,奇偶校验等),在Modbus总线上的所有设备应具有相同的通讯模式和串行通讯参数。ASCII模式的主要优点是允许字符之间的时间间隔长达IS,也不会出现错误。ASCII码每一个字节的编码系统:16进制,ASCII字符0-9,A- 1个16进1错误校验区:纵向冗余校验RTU点是在相同波特率下其传输的字符的密度高于ASCII模式,每个信息必须连续传输。ModbusASCII模式还是RTU模式,Modbus信息以帧的方式传输,每帧有确定的起始点和结束点,使接收设备在信息的起点开始读地址,并确定要寻址的设备(广播时对全部设备),以及信息传输的结束时间。可检测部分信息,错误可作为对MAP或Modbus+协议可对信息帧的起始和结束点标记进行处理,也可管理发送至目的地的信息,此时,信息传输中 ASCII在ASCII模式中,以(:)号(ASCII3AH)表示信息开始,以回撤一换行键(CRLF)(ASCIIOD和OAH)表示信息结束1:22n223ASCIIRTU的T1-T2-T3-T4)。接着,第一个区的数据为设备地址。否是自己的地址。发送完最后一个字符号后,也有一个3.5个字符的静止时间,然后才能发送一个新的信息。CRC无效而产生的错误开地功数校终T1-T2-T3-8B8B位N×8B16BT1-T2-T3T-地址设信息地2个字符(ASCII)8位(RTU),有效的从机设备地0-247,(十进制),各从机设备的寻址范围1-247。主功能码设制器,而有些代码仅适用于某些型号的控制器。还有一些代码留作将来使用,有关功能代替码的设置将在第2章说明。返回与原始代码相等效的一个码,并把最高有效位设定为“1”。从机对功能代码作为了修改,此外,还把一个特殊码放入响应信息的数据区中,告诉主机出现的错误类型和不正常响应的原因。主机设备的应用程序负责处理不正常响应,典型处理过程是主机把对信息的测试和诊断送给从机,并通知操作者。数据区的组成或由一个RTU字符组成。错误校束符为CRLF字符。使用RTU方式时,错误为一个16位的值,2个8位字节。错误校验值是对信息内容执行CRC校验结果。CRC串行传送最低有效位:(LSB)最高有效位:(MSB)ASCII数据帧位序5ASCII6RTU位错误校验Modbus串行通讯网络采用两种错误校验方法,奇偶校验(奇或偶)可用于校验每一个字符,信息帧校验(LRC或主机可由用户设置的一个预定时间间隔,确定是否放弃传送信息。该间隔应有足够的时间来满足从机的正常响应。若主机检测到传输错误时,则传输的信息无效。从机不再向主机返回响应信息。此时,主机会产生一个超时信息,并允许主机程序处理该错误信号。注意:主机向实际并未存在的从机发送信息时也会引起超时出错信号。奇偶校1100在Modbus总线上的所有设备必须采用相同的奇偶校验方式。个“12个“1”位时,其结果仍然是奇数。若无奇偶校验方式时,传输中不作实际的校验,应附加一个停LRC的LRC的实际值进行比较,若二者不一致,亦产生一个错误。在梯形图中,CKSMLRCC错误校验CRCCRC2个字节,16CRC值,并把它附到信息中去。接收设备在接收信息过停止位和校验位不参与CRC计算。述过程。全部处理完信息中的数据字节后,最终得到的寄存器值为CRC值。附录C中的一个实例,它详细说明了CRC的校验。第二数据和控制ModbusModbusModbus数字值表Modbus信息中的数据 信息中的所有数据地址以零作为基准,各项数据的第一个数据地址的编号为0Modbus信息中区图7为一个例子,说明了Modbus的查询信息,图8为正常响应的例子,这两例子中的数据均是16进制的,也表示了以ASCLL或RTU方式构成数据帧的方法主机查询是读保持寄存器,被请求的从机地址是06,的数据来自地址从40108至401103个保持寄有器。注意,该信息规定了寄存器的起始地址为0107(006BH)。从机响应返回该功能代码,说明是正常响应,字节数“Bylecount8ASCII方式还是RTU方式,它表明了附在数据区中8位字节的数量。ASCII方式时,字节数为数据中ASCII字符实际数的一半,416ASCII字符表示,因此在数据中应2ASCII字符来表示一8位的字节。如RTU方式时,63H用一个字节( )发送,而用ASCII方式时,发送需2个字节,即ASCII“6”( )。8个位为一个单位计算“字节数”,它忽略了信息帧用(ASCII或RTU)组成的方法。字节数使用方法:当在缓冲区组织响应信息时字节数”区域中的值应与该信息中数据区的字节数相Field8-BitSlave00000000StartingAddress0000StartingAddress0110No.ofRegisters0000ErrorCheckCRLF0000Total8图8说明“字节数”区在一个贡型响应中的应Field8-BitByteCountDataHiDataLoDataHiDataLoDataHiDataLo 0 00000 00000 00000 00002 00100 00000 00000 00006 0110LRC(2chars.) CRLF Total图8:从机采用ASCII/RTU方式响Modbus+数据内在Modbus+网络发送的Modbus信息应需嵌入到LLC逻辑连接控制)级数据帧,Modbus8位字节的数据组成,类似于RTU中的信息组成。制层(HDLC)中进行CRC校验。其余的信息与原标准格式一致,应用软件(控制器中的MSTR或主机中的 图9示例说明了如何将读寄存器值的请求嵌入到+Modbus网络的数据帧中。HDLC前前 工作标记广播地MAC/LLCMAC级目的地 原地址MAC功能字节LLCLLC级输出路由路由器MODBUSMODBUS信息从机地 功能代图9:Modbus+数据内代码名 384484584884M84YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY程序NYNNNN查询NYNNNNYNYNNYYNYNNYYNYNNYYNYNNYYYYYYYYYYYYY报告从机YYYYYY程序NNNYYNNNNYYNNNYNNYNNYNNYNNNNNRead/Write4XNNNNNReadFIFONNNNN0101描查查询信息规定了要读的起始线圈和线圈量,线圈的起始地址为零,1-160-15。例:请求从机设备17读20-56线圈。FieldSlaveAddressStartingAddressHiStartingAddressLoNo.ofPointsHiNo.ofRointsErrorCheck(LRCor—10:读线圈状态-查响若返回的线圈数不是8的倍数,则在最后的数据字节中的剩余位至字节的最全部填零,字节数区说明全部数据的FieldByteErrorCheck(LRCor—11:读线圈状态-响27-20CDH表示,二进制值为MCB27,LSB20。线圈从左(27)向右(20)至28。位数据串行转输从低位到,即20…27,28…35。最后一个数据字节中,56-52线圈的状态为1BH(或二进制 所线圈56至52的状态分别为ON-ON-OFF-ON-ON注意3个剩余位(至最的数)全部填0。0202说查例:请求读从机设备17的10197-10218的输入位状态。FieldSlaveAddressStartingAddressHiStartingAddressLoNo.ofPointsHiNo.ofRointsErrorCheck(LRCor—12:读输入位状态-查询响响应信息中的各输的状态,分别对应于数据区中的每一位值,1=ON;0=OFF,第一个数据字节的LSB为查询中的寻址地址,其他输按顺序在该字节中由低位向排列,直至8个位为止。下一个字节中的8个输入位也是从低位到排列。若返回的输入位数不是8的倍数,则在最后的数据字节中的剩余位直至字节的最全部填零。字节的最,字节FieldSlaveByteData(Inputs10204-Data(Inputs10212-Data(Inputs10218-ErrorCheck(LRCor—图13:读输入位状态-响应10204-1019735H(或二进制)102183位,10213LSB,输10218-10213ON-ON-OFF-ON-OFF-ON2个剩余位需填零。查0-15FieldSlaveStartingAddressStartingAddressNo.ofPointsNo.ofRointsErrorCheck(LRCor—图14:读保持寄存器-响响应信息中的寄存器数据为二进制数据,每个寄存器分别对应2个字节,第一个字节为值数据,第二个字节为低FieldByteDataLo(RegisterDataHi(RegisterDataLo(RegisterDataHi(RegisterDataLo(Register40110)—图15:读寄存器-0附录B列出了由各种型号控制器所支持的最大的参数量查FieldSlaveAddressStartingAddressFieldSlaveAddressStartingAddressHiStartingAddressLoNo.ofPointsHiNo.ofRointsErrorCheck(LRCor—图16:读输入寄存器-响FieldSlave Byte DataHi(Register DataLo(Register30009) ErrorCheck(LRCor 图17:读寄存器-注意:该功能可越过控制器内存的保护状态和线圈的状态。线圈强制状态一直保持有效直至下一个控制逻辑作查处于OFF状态,其它值对线圈无效,不起作用。FieldCoilAddressHiForceDataHiForceDataLoErrorCheck(LRCor—图18:强制单个线圈-响FieldCoilAddressHiForceDataHiForceDataLoErrorCheck(LRCor—图19:强制单个 H值FieldRegisterAddressHiPresetDataHiPresetDataLoErrorCheck(LRCor—图20:预置单个寄存器-响FieldRegisterAddressHiPresetDataHiPresetDataLoErrorCheck(LRCor—图21:预置单个寄存器-8个不正常状态线圈的数据,某些线圈号已在不同型号的控制器中预定义,而其它的线圈由用户编程,作该功能代码为存取该类信息提供了一种简单的方法,不正常线圈的类型是已知的(在功能代码中不需要线圈类型)预定控制器型线设查FieldErrorCheck(LRCor—图22:读不正常状态-响FieldFieldErrorCheck(LRCor—图23:读不正常状态该例子中,线圈数据为6DH(二进制0110,1101),从左到右(最至最低位)的线圈状态分别为:OFF–ON–ON–OFFONONOFFON98481484264至257的状态。11(0BHex)取通讯事件计说(08),(0001)(000A)等可对事件计查例:请求从机设备17的通讯事件计数FieldErrorCheck(LRCor—图 通讯事件计数器—查响正常响应含一个带2个字节的状态字和一个双字节的事件数,若从机还未处理完以前发出的程序值状态字中的各位。均为1 (FFFFH),处理完时,各位值均为0(0000H)。FieldSlaveAddressStatusHiStatusLoEventCountHiErrorCheck(LRCor—图 通讯事件计数器—响FFFFH264计数器清零操作,或通电)的信息量,该值与由诊断功能代码(08),总线信息数子功能代码(11,0BH)返回的值相同。事件数据区包0-64个字节。每个字Modbus送出的一个状态,或子机接收操作的一个状态。由子机把事件送到顺序排列的区域。字节0为的事件,最大新的确字节刷新该区域的最老的字节。查例:请求从机设备17通讯事件记FieldErrorCheck(LRCor—图26:通讯事件记录—查响2220-644个区的数据的总长度。FieldByteCountStatusHIStatusLoEventCountHiMessageCountHiMessageCountLoEvent0EventErrorCheck(LRCor—通讯事件记录—响0000H2640108H)289(0121H)。最近的通讯事件在Event0字节中。数值20H表示该从机已最后进入了只听状态(ListenOnlyMode)。Event100H表示该从机接收了一个通讯再起动事件(CommunicationsRestart,响应事事件字节从机Modbus接收事件从机接收查询信息时,事件字节的类型,并在处理前。该事件字节的类型。把高7位置1定义这事件,如果相应条件“真”(true)1,字节中各位的含义如下。 1Modbus发送事 (1-(10从机进入只听模当从机进入只听模式时这类事件字节,事件由04H数据定义,如下 2从机初始化通讯再(ContinueonError)(StoponError)。若从机配置成“错误时0010203040506070(0X类型)ONOFFB查010OFF1710201913H)为2个字节,CD01H(二进 00000001)相应线圈的二进制位排列如下 传送的第一个字节CDH对应线圈为27-20, LSB对应线圈20,传送的第二个字节为01H,对应的线圈为29-28,LSB为继圈28,其余未使用的位均填“0。FieldCoilAddressHiCoilAddresstyofCoilsHityofCoilsByteForceDataHi(Coils27-20)ForceDataLo(Coils29-28)ErrorCheck(LRCorCRC)—28:强制多个线-响FieldCoilAddressHiCoilAddresstyofCoilsHityofCoilsErrorCheck(LRCor—图29:强制个多个圈16(10Hex)预置多说)注意:该功能代码可越过控制器的内存保护,在寄存器中的预置值一直保持有效,只能由控制器的下一个逻辑来处B查217240002000AH0102HFieldNameStartingAddressHiNo.ofRegistersHiNo.ofRegistersLoByteCountDataHiDataLoDataHiDataErrorCheck(LRCor—图30:预置多个寄存响FieldStartingAddressHiNo.ofRegistersHiNo.ofRegistersLoErrorCheck(LRCor—图31:预置多个寄存器—响17(11Hex)报告从机说查17IDFieldErrorCheck(LRCor—32ID—查响图33报告从机ID—响应ID总ModiconSlave0Micro123894744AH)J347ModbusPIB74,其他情况字节数为4。4 SlaveID(2 (0OFFFF Bit0=Bit1=(0OFF1Bit2,3=控制器类型:Bit20Bit30Bit21Bit30指示Bits4-15=J347正确建立,PIB70个字节 5,6 起始 执行11-74PIB(2),PIB (16倍数 (16的倍数 RAM DX请求 RAM 50XX 50XX RAM RAM RAM 5849 ID(0OFFFF4K01K (ByteBit15=Bit14=Bit13=1Bit12=2Bit11=Bit10=(0OFF1ON)Bit9=单次扫描状态(0=OFF,1=ON)Bit816/24-bit(024-bit节点,116-bit节点ByteBit7(MSBofbyte7)=ON1ON,0)Bit6=RUN运行指示器状态(0=ON,1=OFF)Bit5=(0ON1Bit4BatteryOK0OK1=OK)电Bits3-0= (ByteBit15MSB)=(可控停止)Bit14=未用Bit13Bit12=不合法的外设Bit11Bit10Bit9=RAMBit8=ByteBit7(MSB)=Bit6=实时时钟错误Bit5CPU诊断失败Bit4=无效的Bit3=无效节点类型Bit2=逻辑检查出错Bit1=备用检查出错Bit0=不合法配置984型控制 984ID(0OFFFF4K01K (ByteBit15(MSB)=Bit14-11=Bit10=(0OFF1ON)Bit9=单次扫描状态(0=OFF,1=ON)Bit8=16/24-bitBit10=(0OFF1ON)Bit9=单次扫描状态(0=OFF,1=ON)Bit816/24-bit(024-位节点,116-位节点ByteBit7(MSB)=(1ON,Bit6=(0ON;1OFF)Bit5=内存保护状态(0=ON;1=OFF)Bit4=电池OK(0=OK,1=OK)Bit3-1=Bit0=内存减少标志(0=不减少;1=减少Bit0=内存减少:99,10017563H64HAFH)定义使用内存下降bit0=“1”下0页(16位字)=99*4096)-(175低字节(16位字100*1024)-(175 (ByteBit15(MSB)=外设端口停止(可控停止)Bit14=(984A,B,X) =扩展内存部分损坏Bit13=Bit12=不合法的外设Bit11Bit10=Bit9=RAMBit8=ByteBit7(MSB9)=Bit6=Bit5(984A,B,XCPUBit5(984)使用表线圈不正确Bit4=S908IO标题坏Bit3=无效节点类型Bit2=Bit1=运行方式下线Bit0=20(14Hex说查组或组的地址类型,每一组由一个单独的“子请求”区定义,它包括7个字节:器,寻址地址为0000-270FH(十进制0000-9999)。 984-785AS-M785-032存用逻表扩展内存容最后文最后寄存器(十进制0008984-785带AS-M785-032内存用逻表扩展内存容最后文最后寄存器(十进制3带扩展寄存器的其它控制器,最后文件中的最后一个寄存器(最)如下扩展内存容最后文件最后一个寄存器(十进制247FieldByteSub–Req1,ReferenceTypeSub–Req1,FileNumberHiSub–Req1,FileNumberLoSub–Req1,StartingAddrHiSub–Req1,StartingAddrLoSub–Req1,RegisterCountHiSub–Req2,ReferenceTypeSub–Req2,FileNumberHiSub–Req2,FileNumberLoSub–Req2,StartingAddrHiSub–Req2,StartingAddrLoSub–Req2,RegisterCountHiErrorCheck(LRCorCRC)图34:读通用类型寄响FieldByteSub–Res1,ByteCountSub–Res1,ReferenceTypeSub–Res1,RegisterDataHiSub–Res1,RegisterDataLoSub–Res1,RegisterDataHiSub–Res1,RegisterDataLoSub–Res2,ByteCountSub–Res2,ReferenceTypeSub–Res2,RegisterDataHiSub–Res2,RegisterDataLoSub–Res2,RegisterDataHiSub–Res2,RegisterDataLoErrorCheck(LRCorCRC)图35:读通用类型寄21(15Hex说查组的地址,每一组由单独的“子请求”区定义,它包括7个字节: 984-785AS-M785-032存用逻表扩展内存容最后一个寄存器(十进制0008984-785带AS-M785-032内存用逻表最后文3带扩展寄存器的其它控制器,最后文件中的最后一个寄存器(最)如下最后一个寄存器247FieldByteSub–Req1,ReferenceTypeSub–Req1,FileNumberHiSub–Req1,FileNumberLoSub–Req1,StartingAddrHiSub–Req1,StartingAddrLoSub–Req1,RegisterCountHiSub–Req1,RegisterDataHiSub–Req1,RegisterDataLoSub–Req1,RegisterDataHiSub–Req1,RegisterDataLoSub–Req1,RegisterDataHiSub–Req1,RegisterDataLoErrorCheck(LRCorCRC)图36:写通用类型寄存响FieldByteSub–Req1,ReferenceTypeSub–Req1,FileNumberHiSub–Req1,FileNumberLoSub–Req1,StartingAddrHiSub–Req1,StartingAddrLoSub–Req1,RegisterCountHiSub–Req1,RegisterCountLoSub–Req1,RegisterDataHiSub–Req1,RegisterDataLoSub–Req1,RegisterDataHiSub–Req1,RegisterDataLoSub–Req1,RegisterDataHiSub–Req1,RegisterDataLoErrorCheck(LRCorCRC)图37:写通用类型寄存22(16Hex4X型寄说查ANDAnd_Mask)ORor_MaskANDAnd_Mask=Or_Mask=And_Mask=Result=FieldReferenceAddressHiAnd_MaskHiAnd_MaskLoOr_MaskHiOr–MaskErrorCheck(LRCor图38掩码写入4X类型响FieldReferenceAddressHiAnd_MaskHiAnd_MaskLoOr_MaskHiOr–MaskErrorCheck(LRCor图39掩码写入4X类型23(17Hex4X23(17Hex4X说查FieldReadReferenceAddressHiReadReferenceAddresstytoReadHitytoReadWriteReferenceAddressHiWriteReferenceAddresstytoWriteHitytoWriteByteCountWriteData1HiWriteData1LoWriteData2HiWriteData2LoWriteData3HiWriteData3ErrorCheck(LRCor图40:读/写4X类型寄存器响FieldByteCountReadData1HiReadData1LoReadData2HiReadData2LoReadData3HiReadData3LoReadData4HiReadData4LoReadData5HiReadData5LoReadData6HiReadData6ErrorCheck(LRCor图41:读/写4X寄存器24(18HexFIFO说查存器数,跟在这地址后的是FIFO数据的寄存器。FieldFIFOPointerAddressHiFIFOPointerAddressLoErrorCheck(LRCor图42:读FIFO响FieldSlaveAddressByteCountHiByteCountLoFIFOCountHiFIFOCountFIFODataReg1HiFIFODataReg1LoFIFODataReg2HiFIFODataReg2LoFIFODataReg3HiFIFODataReg3ErrorCheck(LRCor图43:读FIFO查询数据08说功能使用一个子功能代码(2个字节,定义试验的类型。正常响应时,从机返回功能代码功能代码。诊断对从机设备的查FieldSlaveAddressSubfunctionHiDataHiDataErrorCheck(LRCor图44:诊断-查响FieldSlaveAddressSubfunctionHiDataHiDataErrorCheck(LRCor图45:诊断-响其中“Y”为支持,“N代名YYYYYYYYYYYYYYYYYYYYYNNYYYYYYYYYYYYYYNNYYYYNNYYYYNNYYYYNNNYYYNNNYYYNNYYYYNNYYYYNNYNNNYNNNNNYNNNNNNNY注意返回查询子功数据区(查询数据(响应00FF00H0000H子功能代数据区(查询数据(响应0000FF子功能代码查询数据区 00 00 寄存器数184/384诊断寄存 说01RunLight23456789诊断寄存说 584/984诊断寄存 说 884 说ModbusIOPModbusModbusIOPModbusOurbusIOP CUP改变ASCII输入分隔子功能代码查询数据 响应数据00 CHAR 强置 00 00 10(0AH)计数器和诊断寄存器子功能代 查询数据 响应数据00 00 484 说ParallelPortROM0000-07FF测试失ROM0800-0FFF测试失ROM1800-17FF测试失ROM0000-1FFF测试失RAM4000-40FF测试失RAM4100-41FF测试失RAM4200-42FF测试失RAM4300-43FF测试失584/984诊断寄存 说TrafficCopCPU/SolveNoEndofLogicNodedetected,ortyofendofsegmentwords(O)doesnotmatchtyofsegmentsconfiguredStartofNetwork(SON)didnotbeginBadOrderofSolveIllegalPeripheralDimAwarenessNotPeripheralPortStopExecuted,notan11(0BH)返回总线信 00 00 12(0CH)返回总线通讯错 00 00 CRC13(0DHex)返回总线不正常错 00 00 14(0EHex)返回从机信子功能代码查询数据区 00 00 15(0FHex)返回从机不响子功能代码查询数据 响应数据00 00 16(10Hex)返回从机NAK 00 00 17(11Hex)从机返回子功能代码查询数据区 00 00 18(12Hex)返回总线字符超限子功能代码查询数据区响应数据00 00 19(13Hex)返回IOP超限次数884IOP子功能代码查询数据区响应数据00 00 20(14Hex)超限计数器和标志清零 00 00 21(15Hex)获取ModbusPlus的统计机设备中的确良Modbus+对等。处理器的统计数,查询时除功能代码(08)功能代码(0015H)外,还有一个2字节的操作功能代子功能代操00000000获取统计响功能代子功能代操字节 数0000 00 00ModbusPlus统 含 12...14备用 [软件版本(十六进制\ 字位含 151位后,含义如下:字位含字位含若从机接收查询,发现有(LRC或CRC)通讯错误,并返回响应,此时,依靠主机处理程序给出查询超件不正常响应信息有2个与正常响应不相同的区域:功能代码区:正常响应时,从机的响应功能代码区,带原查询的功能代码。所有功能代码的MSB为0(其值低于80H)。不正常响应时,从机把功能代码的MSB置为1,使功能代码值大于80H,高于正常响应的值。这样,主机应用程序能识别不正常数据区:1Slave2345No.ofCoils6No.ofCoils7EXCEPTION1Slave23Exception4图46:主机发出查询,从机不正常代码名 含不合能代 从机接收的是一种不能执行功能代码。发出查询命令后,该代码指示无程序功能不合法数据地 接收的数据地址,是从机不允许的地址不合法数 查询数据区的值是从机不允许的值从机设备故 从机执行主机请求的动作时出现不可恢复的错误 从机设备忙 从机正忙于处理一个长时程序命令,请求主机在从机空闲时发送信息 功说查响123456789功说查 响123456789处理顺从机处理查询数据。(C)Timing对J478modem,该时间约5ms。4584984A/B/XPLC应用须波特率:Modbus1和端2大允许的波特率为19200端口:使 ASCII,要送“零数据长度”的信息,或无设备地址的信息,如下为一个不合法信息:CR 附录CLRCLRCLRC加一个新字符,会产生大于十进制2559位,自动放弃进位。把LRC放入信息 47LRC字符顺例unsignedchar sg unsignedshortusDataLen缓冲器中的字节数。该功能返回LRC作为一种类型“unsignedchar”。LRC产生staticunsignedcharLRC(au sg,usDataLen)unsignedchar*au sg;/*按信息的字节计算LRC*/unsignedshortusDataLen*按信息的字节计算LRC*/{unsignedcharuchLRC0/*初始化LRC*/while(usDataLen––)/*通过数据缓冲器*/uchLRC sg/*加缓冲器字节无进位return((unsignedchar)(–((char)uchLRC))*返回二进制补码}CRC环冗余(若LSB为1):CRC寄存器与AoolH把CRC值放入信 图48:CRC例 CRC例unsignedchar sg unsignedshortusDataLenCRC产生unsignedshortCRC16(pu sg,usDataLen)unsignedchar*pu sg/*按信息的字节数计算CRC*/unsignedshortusDataLen;/*tyofbytesinmessage{unsignedcharuchCRCHi0xFF*初始化高字节*/unsignedcharuchCRCLo0xFF*初始化低字节*/unsigneduIndex;/*把CRC表*/while(usDataLen*通过数据缓冲器{uIndex=uchCRCHi^*pu sgg+*计算CRC*/uchCRCHi=uchCRCLo^auchCRCHi[uIndex];uchCRCLo=auchCRCLo[uIndex];}return(uchCRCHi<<8|uchCRCLo)}字节/*TableofCRCvaluesforhigh–orderbyte*/staticunsignedcharauchCRCHi[]={0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,}低位字节/*TableofCRCvaluesforlow–orderbyte*/staticcharauchCRCLo[

温馨提示

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

评论

0/150

提交评论