Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 其他文档 > Modbus-RTU规约详解,modbus rtu规约

Modbus-RTU规约详解,modbus rtu规约

收藏

本作品内容为Modbus-RTU规约详解,格式为 doc ,大小 755795 KB ,页数为 82页

Modbus-RTU规约详解


('实用文档第一章Modbus协议□□介绍Modbus协议介绍□□两种串行传输模式□□信息帧□□错误检查方法标准文案Modbus协议介绍Modbus可编程控制器之间可相互通讯,也可与不同网络上的其他设备进行通讯,支撑网络有Modicon的Modbus和Modbus+工业网络。网络信息存取可由控制器内置的端口,网络适配器以及Modicon提供的模块选件和网关等设备实现,对OEM(机械设备制造商)来说,Modicon可为合作伙伴提供现有的程序,可使Modbus+网络紧密地集成到他们的产品设计中去。Modicon的各种控制器使用的公共语言被称为Modbus协议,该协议定义了控制器能识别和使用的信息结构。当在Modbus网络上进行通讯时,协议能使每一台控制器知道它本身的设备地址,并识别对它寻址的数据,决定应起作用的类型,取出包含在信息中的数据和资料等,控制器也可组织回答信息,并使用Modbus协议将此信息传送出去。在其他网络上使用时,数据包和数据帧中也包含着Modbus协议。如,Modbus+或MAP网络控制器中有相应的应用程序库和驱动程序,实现嵌入式Modbus协议信息与此网络中用子节点设备间通讯的特殊信息帧的数据转换。该转换也可扩展,处理节点地址,路由,和每一个特殊网络的错误检查方法。如包含在Modbus协议中的设备地址,在信息发送前就转换成节点地址,错误检查区也用于数据包,与每个网络的协议一致,最后一点是需用Modbus协议,写入嵌入的信息,定义应处理的动作。ModbusProtocolPI-MBUS-3002实用文档图1说明了采用不同通讯技术的多层网络中设备的互连方法。在信息交换中,嵌入到每个网络数据包中的Modbus协议,提供了设备间能够交换数据的公共的语言。图1:Modbus协议应用示意图MB+为Modbus标准文案主处理器4个Modus设备或网络编程器编程器(去MB+)S980(去MAP)AT/HC-984和HOST/MMHIAT/HC-984和HOST/MMHI984A/B和S985Modbus上的数据传输Modicon控制器上的标准Modbus端口是使用一个RS-232兼容的串行接口,定义了连接器,接线电缆,信号等级,传输波特率,和奇偶校验,控制器可直接或通过调制解调器(以后简称Modems)接入总线(网络)。控制器通讯使用主从技术,即主机能起动数据传输,称查询。而其它设备(从机)应返回对查询作出的响应,或处理查询所要求的动作。典应的主机设备应包括主处理器和编程器。典应的从机包括可编程控制器。主机可对各从机寻址,发出广播信息,从机返回信息作为对查询的响应。从机对于主机的广播查询,无响应返回Modbus协议报据设备地址,请求功能代码,发送数据,错误校验码,建立了主机查询格式,从机的响应信息也用Modbus协议组织,它包括确认动作的代码,返回数据和错误校验码。若在接收信息时出现一个错误或从机不能执行要求的动作时,从机会组织一个错误信息。并向主机发送作为响应。在其它总线上传输数据除标准的Modbus功能外,有些Modcon控制器内置端口或总线适配器,在Modbus+总线上实现通讯或使用网络适配器,在MAP网络上通讯。在这些总线上,控制器间采用对等的技术进行通讯,即任意一个控制器可向其它控制器启动数据传送。因此,一台控制器既可作为从机,也可作为主机,常提供多重的内部通道,允许并列处理主机和从机传输数据在信息级,尽管网络通讯方法是对等的,但Modbus协议仍采用主从方式,若一台控制器作为主机设备发送一个信息,则可从一台从机设备返回一个响应,类似,当一台控制器接受信息时,它就组织一个从机设备的响应信息,并返回至原发送信息的控制器。查询响应周期:图2:主从查询响应周期查询:查询中的功能代码为被寻址的从机设备应执行的动作类型。数据字节中包含从机须执行功能的各附加信息,如功能代码03将查询从机,并读保持寄存器。并用寄存器的内容作响应。该数据区必须含有告之从机读取寄存器的起始地址及数量,错误校验区的一些信息,为从机提供一种校验方法,以保证信息内容的完整性。响应:从机正常响应时,响应功能码是查询功能码的应答,数据字节包含从机采集的数据,如寄存器值或状态。如出现错误,则修改功能码,指明为错误响应。并在数据字节中含有一个代码,来说明错误,错误检查区允许主机确认有效的信息内容。ModbusProtocolPI-MBUS-3004主机查询信息设备地址功能代码8位数据字节错误校验设备地址功能代码8位数据字节错误校验从机响应信息实用文档两种串行传输模式控制器可使用ASCII或RTU通讯模式,在标准Modbus上通讯。在配置每台控制器时,用户须选择通讯模式以及串行口的通讯参数。(波特率,奇偶校验等),在Modbus总线上的所有设备应具有相同的通讯模式和串行通讯参数。选择ASCII或RTU模式用于标准的Modbus总线。它定义了总线上串行传输信息区的“位”的含义,决定信息打包及解码方法。如在MAP和Modbus+总线上时,Modbus信息以帧的方式出现,并与串行传输无关,如请求读保持寄存器可以在Modbus+上的两个控制器之间处理,而与使用的控制器的Modbus端口无关。ASCII模式当控制器以ASCII模式在Modbus总线上进行通讯时,一个信息中的每8位字节作为2个ASCII字符传输的,这种模式的主要优点是允许字符之间的时间间隔长达IS,也不会出现错误。ASCII码每一个字节的格式:编码系统:16进制,ASCII字符0-9,A-F1个16进制数据位:1起始位7位数据,低位先送奇/偶校验时1位;无奇偶校验时0位(LRC)1位带校验1停止位;无校验2止位错误校验区:纵向冗余校验RTU模式控制器以RTU模式在Modbus总线上进行通讯时,信息中的每8位字节分成2个4位16进制的字符,该模式的主要优点是在相同波特率下其传输的字符的密度高于ASCII模式,每个信息必须连续传输。RTU模式中每个字节的格式:编码系统:8位二进制,十六进制0-9,A-F数据位:1起始位8位数据,低位先送奇/偶校验时1位;无奇偶校验时0位停止位1位(带校验);停止位2位(无校验)带校验时1位停止位;无校验时2位停止位错误校验区:循环冗余校验(CRC)Modbus信息帧何论是ASCII模式还是RTU模式,Modbus信息以帧的方式传输,每帧有确定的起始点和结束点,使接收设备在信息的起点开始读地址,并确定要寻址的设备(广播时对全部设备),以及信息传输的结束时间。可检测部分信息,错误可作为一种结果设定。对MAP或Modbus+协议可对信息帧的起始和结束点标记进行处理,也可管理发送至目的地的信息,此时,信息传输中Modbus数据帧内的目的地址已无关紧要,因为Modbus+地址已由发送者或它的网络适配器把它转换成网络节点地址和路由。ASCII帧在ASCII模式中,以(:)号(ASCII3AH)表示信息开始,以回撤一换行键(CRLF)(ASCIIOD和OAH)表示信息结束。对其它的区,允许发送的字符为16进制字符0-9,A-F。网络中设备连续检测并接收一个冒号(:)时,每台设备对地址区解码,找出要寻址的设备。字符之间的最大间隔为1S,若大于1S,则接收设备认为出现了一个错误。典型的信息帧见下表开始地址功能数据纵向冗余结束标准文案检查1字符:2字符2字符n字符2字符2字符图3ASCII信息帧例外:对于584和984A/B/X控制器,一个ASCII信息可在LRC区后正常终止,而不需发送CRLF字符,此时出现>IS的时间间隔,控制器也将认为是正常中断。RTU帧RTU模式中,信息开始至少需要有3.5个字符的静止时间,依据使用的波特率,很容易计算这个静止的时间(如下图中的T1-T2-T3-T4)。接着,第一个区的数据为设备地址。各个区允许发送的字符均为16进制的0-9,A-F。网络上的设备连续监测网络上的信息,包括静止时间。当接收第一个地址数据时,每台设备立即对它解码,以决定是否是自己的地址。发送完最后一个字符号后,也有一个3.5个字符的静止时间,然后才能发送一个新的信息。整个信息必须连续发送。如果在发送帧信息期间,出现大于1.5个字符的静止时间时,则接收设备刷新不完整的信息,并假设下一个地址数据。同样一个信息后,立即发送的一个新信息,(若无3。5个字符的静止时间)这将会产生一个错误。是因为合并信息的CRC校验码无效而产生的错误。开始地址功能数据校验终止T1-T2-T3-T48B位S8B位SN×8B位S16B位ST1-T2-T3T-4图4RTU信息帧Modbus信息帧(Continued)地址设置信息地址包括2个字符(ASCII)或8位(RTU),有效的从机设备地址范围0-247,(十进制),各从机设备的寻址范围为1-247。主机把从机地址放入信息帧的地址区,并向从机寻址。从机响应时,把自己的地址放入响应信息的地址区,让主机识别已作出响应的从机地址。地址0为于广播地址,所有从机均能识别。当Modbus协议用于高级网络时,则不允许广播或其它方式替代。如Modbus+使用令牌循环,自动更新共享的数据库。功能码设置信息帧功能代码包括字符(ASCII)或8位(RTU)。有效码范围1-225(十进制),其中有些代码适用全部型号的Modicon控制器,而有些代码仅适用于某些型号的控制器。还有一些代码留作将来使用,有关功能代替码的设置将在第2章说明。当主机向从句发送信息时,功能代码向从机说明应执行的动作。如读一组离散式线圈或输入信号的ON/OFF状态,读一组寄存器的数据,读从机的诊断状态,写线圈(或寄存器),允许下截、记录、确认从机内的程序等。当从机响应主机时,功能代码可说明从机正常响应或出现错误(即不正常响应),正常响应时,从句简单返回原始功能代码;不正常响应时,从机返回与原始代码相等效的一个码,并把最高有效位设定为“1”。如,主机要求从机读一组保持寄存器时,则发送信息的功能码为:00000011(十六进制03)若从机正确接收请求的动作信息后,则返回相同的代码值作为正常响应。发现错时,则返回一个不正常响信息:10000011(十六进制83)从机对功能代码作为了修改,此外,还把一个特殊码放入响应信息的数据区中,告诉主机出现的错误类型和不正常响应的原因。主机设备的应用程序负责处理不正常响应,典型处理过程是主机把对信息的测试和诊断送给从机,并通知操作者。数据区的内容数据区有2个16进制的数据位,数据范围为00-FF(16进制),根据网络串行传输的方式,数据区可由一对ASCII字符组成或由一个RTU字符组成。ModbusProtocolPI-MBUS-3006实用文档主机向从机设备发送的信息数据中包含了从机执行主机功能代码中规定的请求动作,如离散量寄存器地址,处理对象的数目,以及实际的数据字节数等。举例说明,若主机请求从机读一组寄存器(功能代码03),该数据规定了寄存器的起始地址,以及寄存器的数量。又如,主机要在一从机中写一组寄存器,(则功能代码为10H)。该数据区规定了要写入寄存区的起始地址,寄存器的数量,数据的字节数,以及要写入到寄存器的数据。若无错误出现,从机向主机的响应信息中包含了请求数据,若有错误出现,则数据中有一个不正常代码,使主机能判断并作出下一步的动作。数据区的长度可为“零”以表示某类信息,如,主机要求-从机响应它的通讯事件记录(功能代码OBH)。此时,从机不需要其他附加的信息,功能代码只规定了该动作。信息帧错误校验标准Modbus总线,有两类错误检查方法,错误检查区的内容按使用的错误检查方法填写。SDCII使用ASCII方式时,错误校验码为2个ASCII字符,错误校验字符是LRC校验结果。校验时,起始符为(:)冒号结束符为CRLF字符。RTU使用RTU方式时,错误校验码为一个16位的值,2个8位字节。错误校验值是对信息内容执行CRC校验结果。CRC校验信息帧是最后的一个数据,得到的校验码先送低位字节,后送高位字节,所以CRC码的高位字节是最后被传送的信息。串行传送信息在标准的Modbus上传送的信息中,每个字符或字节,按由左向右的次序传送:最低有效位:(LSB)最高有效位:(MSB)ASCII数据帧位序:图5ASCII位序RTU数据帧位序:图6RTU位序错误校验方法标准的Modbus串行通讯网络采用两种错误校验方法,奇偶校验(奇或偶)可用于校验每一个字符,信息帧校验(LRC或CRC)适用整个信息的校验,字符校验和信息帧校验均由主机设备产生,并在传送前加到信息中去。标准文案无奇偶校验带奇偶校验无奇偶校验带奇偶校验从机设备在接收信息过程中校验每个字符和整个信息。主机可由用户设置的一个预定时间间隔,确定是否放弃传送信息。该间隔应有足够的时间来满足从机的正常响应。若主机检测到传输错误时,则传输的信息无效。从机不再向主机返回响应信息。此时,主机会产生一个超时信息,并允许主机程序处理该错误信号。注意:主机向实际并未存在的从机发送信息时也会引起超时出错信号。在MAP或Modbus+等其它网骆上使用时,采用比Modbus更高一级的数据帧校验方法。在这些网络中,不再运用Modbus中的LRC或CRC校验方法。当出现发送错误时,网络中的通讯协议通知发送设备有错误出现,并允许根据设置的情况,重试或放弃信息发送。若信息已发送,但从机设备未作响应,则主机通过程序检查后发出一个超时错误。奇偶校验用户可设置奇偶校验或无校验,以此决定每个字符发送时的奇偶校验位的状态。何论是奇或偶校验,它均会计算每个字符数据中值为“1”的位数,ASCII方式为位数据;RTU方式为8位数据。并根据“1”的位数值(奇数或偶数)来设定为“0”或“1”如一个RTU数据帧中8位数据位为:11000101在该帧中,值为“1”的总位数为4,即偶数。如采用奇校验方式时,则“1”的总位数为奇数,即5。发送信息时,计算奇偶位,并加到数据帧中,接收设备统计位值为“1”的数量,若与该设备要求的不一致时产生一个错误。在Modbus总线上的所有设备必须采用相同的奇偶校验方式。注意:奇偶校验只能检测到数据帧在传输过程中丢失奇数“位”时才产生的错误。如采用奇数校验方式时,一个包含3个“1”位的数据丢失2个“1”位时,其结果仍然是奇数。若无奇偶校验方式时,传输中不作实际的校验,应附加一个停止位。LRC校验ASCII方式时,数据中包含错误校验码,采用LRC校验方法时,LRC校验信息以冒号“:”开始,以CRLF字符作为结束。它忽略了单个字符数据的奇偶校验的方法。LRC校验码为1个字节,8位二进制值,由发送设备计算LRC值。接收设备在接收信息时计算LRC校验码。并与收到的LRC的实际值进行比较,若二者不一致,亦产生一个错误。在梯形图中,CKSM函数可计算数据信息中LRC的校验。用于主计算机时请查阅附录C中的一个实例,它详细说明LRC的校验的过程。错误校验方法CRC校验RTU方式时,采用CRC方法计算错误校验码,CRC校验传送的全部数据。它忽略信息中单个字符数据的奇偶校验方法。CRC码为2个字节,16位的二进制值。由发送设备计算CRC值,并把它附到信息中去。接收设备在接收信息过程中再次计算CRC值并与CRC的实际值进行比较,若二者不一致,亦产生一个错误,校验开始时,把16位寄存器的各位都置为“1”,然后把信息中的相邻2个8位字节数据放到当前寄存器中处理,只有每个字符的8位数据用于CRC处理。起始位,停止位和校验位不参与CRC计算。CRC校验时,每个8位数据与该寄存器的内容进行异或运算,然后向最低有效位(LSB)方向移位,用零填入最高有效位(MSB)后,再对LSB检查,若LSB=1,则寄存器与预置的固定值异或,若LSB=0,不作异或运算。重复上述处理过程,直至移位8次,最后一次(第8次)移位后,下一个8位字节数据与寄存器的当前值异或再重复上述过程。全部处理完信息中的数据字节后,最终得到的寄存器值为CRC值。CRC值附加到信息时,低位在先,高位在后。在梯形图中,CKSM函数计算信息中的CRC值。用于主计算机时,可查阅附录C中的一个实例,它详细说明了CRC的校验。第二章数据和控制功能\uf072Modbus功能代码格式\uf072Modbus功能代码总结\uf072Modbus功能代码说明ModbusProtocolPI-MBUS-3008实用文档功能代码格式数字值表达若无特殊说明在此节文中用+进制值表示,图中的数据区则用十六进制表示。Modbus信息中的数据地址Modbus信息中的所有数据地址以零作为基准,各项数据的第一个数据地址的编号为0如:\uf072在可编程控制器中“coil1”在Modbus信息中其地址值表示为0000\uf072Coil127(十进制)在Modbus信息中则为007EH(126十进制)\uf072保持寄存器40001,在信息中数据地址为寄存器0000。功能代码区为保持寄存器类型规定的操作,因此,“4XXXX”是缺省的地址类型。\uf072保持寄存器40108寻址寄存器地址为006Bhex(+进制107)Modbus信息中区内容图7为一个例子,说明了Modbus的查询信息,图8为正常响应的例子,这两例子中的数据均是16进制的,也表示了以ASCLL或RTU方式构成数据帧的方法。主机查询是读保持寄存器,被请求的从机地址是06,读取的数据来自地址从40108至401103个保持寄有器。注意,该信息规定了寄存器的起始地址为0107(006BH)。从机响应返回该功能代码,说明是正常响应,字节数“Bylecount”中说明有多少个8位字节被返回。因无论是ASCII方式还是RTU方式,它表明了附在数据区中8位字节的数量。ASCII方式时,字节数为数据中ASCII字符实际数的一半,每4个位的16进制值需要一个ASCII字符表示,因此在数据中应由2个ASCII字符来表示一个8位的字节。如RTU方式时,63H用一个字节(01100011)发送,而用ASCII方式时,发送需2个字节,即ASCII“6”(0110110)和ASCII“3”(0110011)。8个位为一个单位计算“字节数”,它忽略了信息帧用(ASCII或RTU)组成的方法。字节数使用方法:当在缓冲区组织响应信息时,“字节数”区域中的值应与该信息中数据区的字节数相等。QUERYFieldNameHeaderSlaveAddressFunctionStartingAddressHiStartingAddressLoNo.ofRegistersHiNo.ofRegistersLoErrorCheckTrailerExample(Hex)0603006B0003TotalBytes:ASCIICharacters:(colon)0603006B0003LRC(2chars.)CRLF17RTU8-BitFieldNone000001100000001100000000011010110000000000000011CRC(16bits)None8图8说明“字节数”区在一个贡型响应中的应用。RESPONSEFieldNameHeaderExample(Hex)ASCIICharacters:(colon)RTU8-BitFieldNone标准文案SlaveAddressFunctionByteCountDataHiDataLoDataHiDataLoDataHiDataLoErrorCheckTrailer060306022B00000063TotalBytes:060306022B00000063LRC(2chars.)CRLF23000001100000001100000110000000100010101100000000000000000000000001100011CRC(16bits)None11图8:从机采用ASCII/RTU方式响应ModbusProtocolPI-MBUS-30010实用文档Modbus+数据内容在Modbus+网络发送的Modbus信息应需嵌入到LLC(逻辑连接控制)级数据帧,Modbus信息区由8位字节的数据组成,类似于RTU中的信息组成。由发送设备把从机地址转换成Modbus+路由地址,CRC数据不在Modbus信息中发送,因为会在更高级的数据链路控制层(HDLC)中进行CRC校验。其余的信息与原标准格式一致,应用软件(控制器中的MSTR或主机中的ModcomIII)可将这些信息帧组成数据包。图9示例说明了如何将读寄存器值的请求嵌入到+Modbus网络的数据帧中。图9:Modbus+数据内容控制器支持的功能代码下表列出Modicon控制器支持的功能代码:以十进制表示。“Y”表示支持“N”表示不支持。代码名称384484584884M8498401读线圈状态YYYYYY02读输入状态YYYYYY03读线保持寄存器YYYYYY04读输入寄存器YYYYYY05强制单个线圈YYYYYY06预置单个寄存器YYYYYY07读不正常状态YYYYYY08诊断(见第3章)09程序484NYNNNN10查询484NYNNNN11通讯事件控制YNYNNY12通讯事件记录YNYNNY13程序控制器YNYNNY14查询控制器YNYNNY15强制多个寄存器YYYYYY标准文案16预置多个寄存器YYYYYY17报告从机IDYYYYYY18程序884/M84NNNYYN19通讯链路复位NNNYYN20读通用参考值NNYNNY21写通用参考值NNYNNY22MaskWrite4XRegisterNNNNN(1)23Read/Write4XRegistersNNNNN(1)24ReadFIFO队列NNNNN(1)(1)功能代码仅由984-785控制器支持01读线圈状态描述读从机离散量输出口的ON/OFF状态,不支持广播。附录B列出由不同控制器型号支持最大的参数清单。查询查询信息规定了要读的起始线圈和线圈量,线圈的起始地址为零,1-16个线圈的寻址地址分为0-15。例:请求从机设备17读20-56线圈。QUERYFieldNameSlaveAddressFunctionStartingAddressHiStartingAddressLoNo.ofPointsHiNo.ofRointsLoErrorCheck(LRCorCRC)Example(Hex)110100130025—图10:读线圈状态-查询响应响应信息中的各线圈的状态与数据区的每一位的值相对应,1=ON;0=OFF。第一个数据字节的LSB为查询中的寻址地址,其他的线圈按顺序在该字节中由低位向高位排列,直至8个为止,下一个字节也是从低位向高位排例。若返回的线圈数不是8的倍数,则在最后的数据字节中的剩余位至字节的最高位全部填零,字节数区说明全部数据的字节数。RESPONSEFieldNameSlaveAddressFunctionExample(Hex)1101ModbusProtocolPI-MBUS-30012实用文档ByteCountData(Coils27-20)Data(Coils35-28)Data(Coils43-36)Data(Coils51-44)Data(Coils56-52)ErrorCheck(LRCorCRC)05CD6BB20E1B—图11:读线圈状态-响应线圈27-20的状态用CDH表示,二进制值为11001101,该字节的MCB为线圈27,LSB为20。线圈从左(27)向右(20)状态分别为ON-ON-OFF-OFF-ON-ON-OFF-ON,因此第一个字节中的线圈从左到右应是27-20。下一个字节的线圈应为35至28。位数据串行转输从低位到高位,即20…27,28…35。最后一个数据字节中,56-52线圈的状态为1BH(或二进制00011011),线圈56是左数第4位,线圈52是该字节的最低位,所线圈56至52的状态分别为ON-ON-OFF-ON-ON注意3个剩余位(至最高位的数)全部填0。标准文案02读输入位状态说明读从机离散量输入信号的ON/OFF状态。不支持广播。附录B列出各种型号控制器所支持的最大参数量。查询查询信息规定了要读的输入起始地址,以及输入信号的数量。输入起始地址为0,1-16个输入口的地址分别为0-15。例:请求读从机设备17的10197-10218的输入位状态。QUERYFieldNameSlaveAddressFunctionStartingAddressHiStartingAddressLoNo.ofPointsHiNo.ofRointsLoErrorCheck(LRCorCRC)Example(Hex)110200C40016—图12:读输入位状态-查询。响应响应信息中的各输入口的状态,分别对应于数据区中的每一位值,1=ON;0=OFF,第一个数据字节的LSB为查询中的寻址地址,其他输入口按顺序在该字节中由低位向高位排列,直至8个位为止。下一个字节中的8个输入位也是从低位到高位排列。若返回的输入位数不是8的倍数,则在最后的数据字节中的剩余位直至字节的最高位全部填零。字节的最高位,字节数区。说明了全部数据的字节数。例:对查询作出响应(参见上页)。RESPONSEFieldNameSlaveAddressFunctionByteCountData(Inputs10204-10197)Data(Inputs10212-10205)Data(Inputs10218-10213)ErrorCheck(LRCorCRC)Example(Hex)110203ACDB35—图13:读输入位状态-响应。输入位10204-10197的状态用35H(或二进制00110101)表示。输入位10218为左数第3位,10213输入位为ModbusProtocolPI-MBUS-30014实用文档LSB,输入位10218-10213的状态分别为ON-ON-OFF-ON-OFF-ON,注意最位还有2个剩余位需填零。标准文案03读保持寄存器说明读从机保持寄存器的二进制数据不支持广播,附录B列出了由各种型号控制器所支持的最大的参数量查询查询信息规定了要读的寄存器起始地址及寄存器的数量,寄存器寻址起始地址为0000,寄存器1-16所对应的地址分别为0-15QUERYFieldNameSlaveAddressFunctionStartingAddressHiStartingAddressLoNo.ofPointsHiNo.ofRointsLoErrorCheck(LRCorCRC)Example(Hex)1103006B0003—图14:读保持寄存器-查询响应响应信息中的寄存器数据为二进制数据,每个寄存器分别对应2个字节,第一个字节为高位值数据,第二个字节为低位数据。对984-X8X型控制器(如984-685等),扫描数据的速率为每次125个寄存器。对其它控制器型号的扫描速率为每次32个寄存器,全部数据完成组合后返回响应信息。例按查询要求返回响应。RESPONSEFieldNameSlaveAddressFunctionByteCountDataHi(Register40108)DataLo(Register40108)DataHi(Register40109)DataLo(Register40109)DataHi(Register40110)DataLo(Register40110)ErrorCheck(LRCorCRC)Example(Hex)110306022B00000064—图15:读寄存器-响应寄存器40108的数据用022BH2个字节(或用十进制555)表示,寄存器40109-40110中的数据为0000和0064H,(十进制时为0和100)ModbusProtocolPI-MBUS-30016实用文档04读输入寄存器说明读从机输入寄存器(3X类型)中的二进制数据,不支持广播附录B列出了由各种型号控制器所支持的最大的参数量查询查询信息规定了要读的寄存器的起始地址及寄存器的数量,寻止起始地址为0,寄存器1-16所对应的地址分别为0-15。例:请求读从机设备17中的30009寄存器。QUERYFieldNameSlaveAddressFunctionStartingAddressHiStartingAddressLoNo.ofPointsHiNo.ofRointsLoErrorCheck(LRCorCRC)Example(Hex)110400080001—图16:读输入寄存器-查询响应响应信息中的寄存器数据为每个寄存器分别对应2个字节,第一个字节为高位数据,第二个字节为低位数据。对984-X8X型控制器(如984-685等),扫描数据的速率为每次125个寄存器,对其它型号的控制器为每次32个寄存器。数据完成组合后,返回响应信息。例按查询要求返回响应RESPONSEFieldNameSlaveAddressFunctionByteCountDataHi(Register30009)DataLo(Register30009)ErrorCheck(LRCorCRC)Example(Hex)110402000A—图17:读寄存器-响应寄存器30009中的数据用000AH2个字节(或用十进制10)表示标准文案05强制单个线圈说明强制单个线圈(0X类型)为ON或OFF状态。广播时,该功能可强制所有从机中同一类型的线圈均为ON或OFF状态。\uf0f8注意:该功能可越过控制器内存的保护状态和线圈的禁止状态。线圈强制状态一直保持有效直至下一个控制逻辑作用于线圈为止。控制逻辑中无线圈程序时,则线圈处于强制状态。附录B中列出了由各种型号控制器所支持的最大的参数量。查询查询信息规定了需要强制线圈的类型,线圈起始地址为0,线圈1的寻址地址为0由查询数据区中的一个常量。规定被请求线圈的ON/OFF状态,FF00H值请求线圈处于ON状态,0000H值请求线圈处于OFF状态,其它值对线圈无效,不起作用。例:强制从机设备17中的173线圈为ON状态QUERYFieldNameSlaveAddressFunctionCoilAddressHiCoilAddressLoForceDataHiForceDataLoErrorCheck(LRCorCRC)Example(Hex)110500ACFF00—图18:强制单个线圈-查询响应线圈为强制状态后即返回正常响应例:按查询要求返回响应RESPONSEFieldNameSlaveAddressFunctionCoilAddressHiCoilAddressLoForceDataHiForceDataLoErrorCheck(LRCorCRC)Example(Hex)110500ACFF00—图19:强制单个线圈ModbusProtocolPI-MBUS-30018实用文档06预置单个寄存器说明把一个值预置到一个4X类型保持寄存器中。广播时,该功能把值预置到所有从机的相同类型的寄存器中。\uf0f8注意:该功能可越过控制器的内存保护。使寄存器中的预置值保持有效。只能由控制器的下一个逻辑信号来处理该预置值。若控制逻辑中无寄存器程序时,则寄存器中的值保持不变。附录B中列出了各种型号控制器所支持的最大的参数量查询查询信息规定了要预置寄存器的类型,寄存器寻址起始地址为0,寄存器1所对应的地址为0。请求的预置值在查询数据区,M84或484控制器使用一个10位二进制值,其中高6位设定为0,而其它类型的控制器使用16位值。例:请求把从机设备17中的40002寄存器预置为0003H值。QUERYFieldNameSlaveAddressFunctionRegisterAddressHiRegisterAddressLoPresetDataHiPresetDataLoErrorCheck(LRCorCRC)Example(Hex)110600010003—图20:预置单个寄存器-查询响应寄存器内容被预置后返回正常响应例:按查询要求返回响应RESPONSEFieldNameSlaveAddressFunctionRegisterAddressHiRegisterAddressLoPresetDataHiPresetDataLoErrorCheck(LRCorCRC)Example(Hex)110600010003—图21:预置单个寄存器-响应07读不正常状态标准文案说明读从中机中8个不正常状态线圈的数据,某些线圈号已在不同型号的控制器中预定义,而其它的线圈由用户编程,作为有关控制器的状态信息,如“machineON/OFF”,“headsretraced”,(缩回标题),“safetiessatisfied”(安全性满意),“errorconditions”(存在错误条件)或其它用户定义的标志等。该功能码不支持广播。该功能代码为存取该类信息提供了一种简单的方法,不正常线圈的类型是已知的(在功能代码中不需要线圈类型)预定义的不正常线圈号如下:控制器型号线圈设定M84,184/384,584,9841-8用户定义484257电池状态258-264用户定义884761电池状态762内存保护状态763R10工况状态764-768用户预定义查询例请求读从机设备17中的不正常状态QUERYFieldNameSlaveAddressFunctionErrorCheck(LRCorCRC)Example(Hex)1107—图22:读不正常状态-查询响应正常响应包含8个不正常的线圈状态,为一个数据字节,每个线圈一位。LSB对应为最低线圈类型的状态。例:按查询要求返回响应:QUERYFieldNameSlaveAddressFunctionErrorCheck(LRCorCRC)Example(Hex)110B—图23:读不正常状态—响应该例子中,线圈数据为6DH(二进制0110,1101),从左到右(最高位至最低位)的线圈状态分别为:OFF–ON–ON–OFF–ON–ON–OFF–ON。若控制器型号为984,这些位表示线圈8至1的状态;若控制器型号为484则表示线圈264至257的状态。11(0BHex)取通讯事件计数器ModbusProtocolPI-MBUS-30020实用文档说明由从机通讯事件计数器返回一个状态字和事件数,依据一串信息前后读取的当前数值,由主机决定其信息是否已被从机正常处理,该功能代码不支持广播。信息成功完成1次,使控制器的事件计数器加1,不正常响应,查询命令或取事件计数器命令等,对计数值不起作用。通过诊断功能代码(08),(若重起动通讯选择子功能代码0001)或计数器和诊断寄存清零器代码(000A)等可对事件计数器复位。查询例:请求读取从机设备17的通讯事件计数器QUERYFieldNameSlaveAddressFunctionErrorCheck(LRCorCRC)Example(Hex)110B—图24:读取通讯事件计数器—查询响应正常响应含一个带2个字节的状态字和一个双字节的事件数,若从机还未处理完以前发出的程序值状态字中的各位。均为1(FFFFH),处理完时,各位值均为0(0000H)。例:按查询要求返回响应QUERYFieldNameSlaveAddressFunctionStatusHiStatusLoEventCountHiEventCountLoErrorCheck(LRCorCRC)Example(Hex)110BFFFF0108—图25:读取通讯事件计数器—响应该列子中,状态字是FFFFH,说明从机还在处理程序,控制器计算的事件数为264(0108H)12(0CHex)读取通讯事件记录说明由从机返回一个状态字,事件数,信息数和一个事件的数据区。不支持广播状态字和事件数与读取通讯事件计数器功能代码(11,OBH)返回值相同。信息计数器包含从机处理,(最后标准文案一次再起动,计数器清零操作,或通电)的信息量,该值与由诊断功能代码(08),总线信息数子功能代码(11,0BH)返回的值相同。事件数据区包含0-64个字节。每个字节对应Modbus送出的一个状态,或子机接收操作的一个状态。由子机把事件送到顺序排列的区域。字节0为最新的事件,最大新的确字节刷新该区域的最老的字节。查询例:请求从机设备17读取通讯事件记录QUERYFieldNameSlaveAddressFunctionErrorCheck(LRCorCRC)Example(Hex)110C—图26:读取通讯事件记录—查询响应正常响应含一个2个字节的状态字区,一个2个字节的事件数区和一个2个字节的信息数区,以及有0-64个字节的事件区,一个字节数区定义上述4个区的数据的总长度。例:按查询要求返回响应RESPONSEFieldNameSlaveAddressFunctionByteCountStatusHIStatusLoEventCountHiEventCountLoMessageCountHiMessageCountLoEvent0Event1ErrorCheck(LRCorCRC)Example(Hex)110C080000010801212000—图27:读取通讯事件记录—响应在这例子中状态字为0000H,说明从机已完成程序处理从机计算的事件数为264(0108H),已处理的信息数为289(0121H)。最近的通讯事件在Event0字节中。数值20H表示该从机已最后进入了只听状态(ListenOnlyMode)。以前的事件在Event1字节中,数值00H表示该从机接收了一个通讯再起动事件(CommunicationsRestart),响应事件的字节会在后面叙述。12(0CHex)读取通讯事件记录ModbusProtocolPI-MBUS-30022实用文档事件字节内容读取通讯事件记录功能代码返回的一个事件字节可为4种类型之一,每一个字节中的高7位定义该字节的类型,高6位可进一步说明该字节,见下面说明。从机Modbus接收事件从机接收查询信息时,储存事件字节的类型,并在处理前。储存该事件字节的类型。把高7位置1定义这事件,如果相应条件“真”(true),则其他位也置1,字节中各位的含义如下。BitContents0未用1通讯错误2未用3未用4字符超限5只听模式6接收广播71从机Modbus发送事件从机完成查询信息处理后返回正常(或不正常)响应,或无响应后,储存事件字节的类型。通过高7位置“0”,高6位置“1”定义事件,若相应的条件“真”(TRUE),则其他位置“1”。字节中各位含义如下:BitContents0读不正常发送(不正常功能码1-3)1从机放弃不正常发送(不正常功能码4)2从机放弃不正常发送(不正常功能码从5-6)3从机程序NAK不正常发送(不正常功能码从7)4从机程序NAK不正常发送,出现写入超时错误5从机程序NAK不正常发送,当前只听方式6170从机进入只听模式当从机进入只听模式时储存这类事件字节,事件由04H数据定义,如下:BitContents0010213040506070从机初始化通讯再起动通讯口再起动时由从机储存事件字节的类型,诊断功能代码(08)再带起动通讯选择子功能代码(0001)使从机通讯再起动。该功能可把从机配置成错误时继读方式(ContinueonError)或错误时停止方式(StoponError)。若从机配置成“错误时继读方式”时,则事件字节加到已存在的事件记录中,若配置成“错误时停止”方式时,标准文案则把该字节加到记录中,并把其余的记录清零。BitContents001020304050607015(0FH)强制多个线圈说明按线圈的顺序把各线圈(0X类型)强制成ON或OFF。广播时,该功能代码可对各从机中相同类型的线圈起强制作用。\uf0f8注意:该功能代码可越过内存保护和线圈的禁止状态线圈。保持强制状态有效,并只能由控制器的下一个逻辑来处理。若无线圈控制逻辑程序时,线圈将保持强制状态。附录B中列出了各种型号控制器所支持的最大参数量。查询查询信息规定了被强制线圈的类型,线圈起始地址为0,线圈1寻址地址为0。查询数据区规定了被请求线圈的ON/OFF状态,如数据区的某位值为“1”表示请求的相应线圈状态为ON,位值为“0”,则为OFF状态。下述例子为请求从机设备17中一组10个线圈为强制状态,起始线圈为20(则寻址地址为19或13H),查询的数据为2个字节,CD01H(二进制1100110100000001)相应线圈的二进制位排列如下:Bit:1100110100000001Coll:2726252423222120-------2928传送的第一个字节CDH对应线圈为27-20,LSB对应线圈20,传送的第二个字节为01H,对应的线圈为29-28,LSB为继圈28,其余未使用的位均填“0”。QUERYFieldNameSlaveAddressFunctionCoilAddressHiCoilAddressLoQuantityofCoilsHiQuantityofCoilsLoByteCountForceDataHi(Coils27-20)ForceDataLo(Coils29-28)Example(Hex)110F0013000A02CD01ModbusProtocolPI-MBUS-30024实用文档ErrorCheck(LRCorCRC)—图28:强制多个线圈-查询响应正常响应返回从机地址,功能代码,起始地址以及强制线圈数例:对上述查询返回的响应RESPONSEFieldNameSlaveAddressFunctionCoilAddressHiCoilAddressLoQuantityofCoilsHiQuantityofCoilsLoErrorCheck(LRCorCRC)Example(Hex)110F0013000A—图29:强制个多个圈—响应16(10Hex)预置多个寄存器说明把数据按顺序预置到各(4×类型)寄存器中,广播时该功能代码可把数据预置到全部从机中的相同类型的寄存器中。\uf0f8注意:该功能代码可越过控制器的内存保护,在寄存器中的预置值一直保持有效,只能由控制器的下一个逻辑来处理寄存器的内容,控制逻辑中无该寄存器程序时,则寄存器中的值保持不变。附录B中列出了各种型号控制器所支持的最大参数量。查询信息中规定了要预置的寄存器类型,寄存器寻址的起始地址为0,寄存器1寻址地址为0。查询数据区中指定了寄存器的预置值,M84和484型控制器使用10位二进制数据,2个字节,剩余的高6位置0。而其他类型的控制器使用一个16位二进制数据,每个寄存器2个字节。例:请求在从机设备17中的2个寄存器中放入预置值,起始寄存器为40002,预置值为000AH和0102H。QUERYFieldNameSlaveAddressFunctionStartingAddressHiStartingAddressLoNo.ofRegistersHiNo.ofRegistersLoExample(Hex)11100001000204标准文案ByteCountDataHiDataLoDataHiDataLoErrorCheck(LRCorCRC)000A0102—图30:预置多个寄存器ModbusProtocolPI-MBUS-30026实用文档响应正常响应返回从机地址,功能代码和起始地址和预置寄存器数。例:按查询要求返回响应PESPONSEFieldNameSlaveAddressFunctionStartingAddressHiStartingAddressLoNo.ofRegistersHiNo.ofRegistersLoErrorCheck(LRCorCRC)Example(Hex)111000010002—图31:预置多个寄存器—响应17(11Hex)报告从机ID说明返回一个从机地址控制器的类型,从机的当前状态,以及有关从机的其他说明,不支持广播。查询例:请求报告从机设备17的ID和状态QUERYFieldNameSlaveAddressFunctionErrorCheck(LRCorCRC)Example(Hex)1111—图32:报告从机ID—查询响应正常响应格式见图33,数据内容对应每台控制器的类型。图33报告从机ID—响应从机ID总结数据区第一个字节为Modicon控制器返回的从机IDSlaveIDController0Micro84标准文案14842184/384358488849984ModbusProtocolPI-MBUS-30028实用文档17(11Hex)报告从机ID184/384控制器返回一个字节数4或74(4AH),若控制器J347Modbus从机接口已建立,内部PIB表正常,则字节数为74,其他情况字节数为4。经常返回的4个字节是:ByteContents1SlaveID(2为184/384)2运行指示器状态(0=OFF,FF=ON)3,4状态字Bit0=0Bit1=内存保护状态(0=OFF,1=ON)Bit2,3=控制器类型:Bit2=0和Bit3=0指示184Bit2=1和Bit3=0指示384Bits4-15=未用J347正确建立,PIB表正常时返回附加的70个字节:ByteContents5,6PIB起始地址7,8控制器系列号9,10执行ID字节11-74含PIB表,只有控制器工作,数据在有效(字节2),PIB表如下:11,12最大的输出线圈量13,14输出线圈允许表15,16输入线圈/运行表的地址17,18输入线圈量19,20输入线圈允许表21,22第一个获取数(16倍数)23,24最后一个获取数(16的倍数)25,26输入寄存器的地址27,28输入寄存器数量29,30输出和保持寄存器数量31,32用户逻辑地址33,34输出线圈RAM表地址35,36功能禁止屏蔽37,38扩展功能路由地址39,40数据传输路由41,4243,44未用45,46功能禁止屏蔽47,48A模式历史表格地址49,50DX打印机请求表51,52顺序组数量53,54顺序映像表标准文案55,56顺序RAM地址57,5850XX寄存器数量59,6050XX表地址61,62输出线圈RAM映像地址63,64输入RAM映像地址65,66延时输出起动组67,68延时输出结束组69,70看门狗线71,72自锁RAM地址73,74延时输出组数量17(11Hex)报告从机ID584584控制器返回一个字节数为9的信息如下:ByteContents1从机ID号为32运行指示器状态(0=OFF,FF=0N)34K0页内存41K状态RAM5用户逻辑段数量6,7机器状态字(配置表字101,65H)字的构成如下:Byte6:Bit15=建立端口1Bit14=建立端口2Bit13=设定端口1地址Bit12=设定端口2地址Bit11=未用Bit10=恒定扫描状态(0=OFF,1=ON)Bit9=单次扫描状态(0=OFF,1=ON)Bit8=16/24-bit节点(0=24-bit节点,1=16-bit节点)Byte7:Bit7=(MSBofbyte7)=通电ON(1=ON,不应为0)Bit6=RUN运行指示器状态(0=ON,1=OFF)Bit5=内存保护状态(0=ON,1=OFF)Bit4=BatteryOK(0=OK,1=不OK)电池Bits3-0=未用ModbusProtocolPI-MBUS-30030实用文档8,9机器停止码(配置表格字105,69H)字的构成如下:Byte8:Bit15(MSB)=外设口停止(可控停止)Bit14=未用Bit13=Bit12=不合法的外设干涉Bit11=Bit10=Bit9=状态RAM测试失败Bit8=不停止逻辑检测或Byte9:Bit7=(MSB)=看门狗定时器终Bit6=实时时钟错误Bit5=CPU诊断失败Bit4=无效的Bit3=无效节点类型Bit2=逻辑检查出错Bit1=备用检查出错Bit0=不合法配置17(11Hex)报告从机ID984型控制器984型控制器返回的ID数据共9个字节,如下:ByteContents1控制器为984型时从机ID号为92运行指示器状态(0=OFF,FF=0N)34K0页内存41K状态RAM5用户逻辑段数量6,7机器状态码(配置表字101,65H)字的结构如下:Byte6:Bit15(MSB)=未赋值Bit14-11=未赋值Bit10=恒定扫描状态(0=OFF,1=ON)Bit9=单次扫描状态(0=OFF,1=ON)Bit8=16/24-bitBit10=恒定扫描状态(0=OFF,1=ON)Bit9=单次扫描状态(0=OFF,1=ON)Bit8=16/24-bit节点(0=24-位节点,1=16-位节点)Byte7:Bit7(MSB)=通电(1=ON,不应为0)Bit6=运行指示器状态(0=ON;1=OFF)Bit5=内存保护状态(0=ON;1=OFF)Bit4=电池OK(0=OK,1=不OK)标准文案Bit3-1=未赋值Bit0=内存减少标志(0=不减少;1=减少)Bit0=内存减少标志内存减少:机器状态字以配置表中的字99,100和175(63H,64H和AFH)定义使用内存下降值。若bit0=“1”下降值计算如下:0页(16位字)=字994096)-(字175低字节16)状态表(16位字)=(字1001024)-(字175高字节16)8,9机器停止码(配置表字105,69H)字的结构:Byte8:Bit15(MSB)=外设端口停止(可控停止)Bit14=(984A,B,X)=扩展内存部分损坏Bit13=Bit12=不合法的外设干涉Bit11=Bit10=起动节点不能起动段Bit9=状态RAM测试失败Bit8=逻辑检测死循环或数据段数不正确Byte9:Bit7(MSB9)=看门狗定时器结束Bit6=实时时钟出错Bit5(984A,B,X)=CPU诊断失败Bit5(984)=使用表线圈不正确Bit4=S908远程IO标题坏Bit3=无效节点类型Bit2=逻辑检查出错Bit1=运行方式下禁止线圈Bit0=不合法配置20(14Hex)读通用类型寄存器说明返回扩展内存文件中的6X类型寄存器内容,不支持广播。该功能代码能读多组类型寄存器,组别之间的地址可分开,但组内的地址必须连续。查询查询信息包括,标准的Modbus从机地址,功能代码,字节数,以及错误检查区域。查询信息中还指定要读取的寄存器组或组的地址类型,每一组由一个单独的“子请求”区定义,它包括7个字节:-寄存器类型:1字节,(指定为6X类型)-扩展内存文件号:2字节(1-10或0001-000AH)-文件中寄存器起始地址:2个字节-要读取的寄存器数量:2个字节ModbusProtocolPI-MBUS-30032实用文档要读的寄存器数量与预期响应的其它数据字节加在一起,不能超过Modbus所允许的256个字节的长度。有效的扩展内存文件的数量取决于从机的配置和的安装的内存量,除最后一个外,其它的每个文件均含10000个寄存器,寻址地址为0000-270FH(十进制0000-9999)。\uf0f8注意:6X类型扩展寄存器的寻址地址与4X类型的保持寄存器不同。扩展寄存器起始寻址地址为寄存器“0”(600000)保持寄存器起始寻址地址为寄存器“1”(40001)带扩展寄存器的984-758控制器中,最后文件中的最后一个(最高的)寄存器见下面2个表格。984-785带AS-M785-032内存:用户表态扩展内存容量最后文件最后寄存器(十进制)逻辑RAM32K32K00016K64K72K83727984-785带AS-M785-032内存:用户表态扩展内存容量最后文件最后寄存器(十进制)逻辑RAM48K32K24K3457532K64K96K108303带扩展寄存器的其它控制器,最后文件中的最后一个寄存器(最高位)如下:扩展内存容量最后文件数最后一个寄存器(十进制)16K2638332K4276764K7553596K10830320(14Hex)Read读通用类型寄存器例:请求读从机设备17中的两组类型寄存器。1组包括文件4的2个寄存器,寄存器起始地址00012组包括文件3的2个寄存器,寄存器起始地址0009QUERYFieldNameSlaveAddressFunctionByteCountSub–Req1,ReferenceTypeSub–Req1,FileNumberHiSub–Req1,FileNumberLoSub–Req1,StartingAddrHiSub–Req1,StartingAddrLoExample(Hex)11140E0600040001标准文案Sub–Req1,RegisterCountHiSub–Req1,RegisterCountLoSub–Req2,ReferenceTypeSub–Req2,FileNumberHiSub–Req2,FileNumberLoSub–Req2,StartingAddrHiSub–Req2,StartingAddrLoSub–Req2,RegisterCountHiSub–Req2,RegisterCountLoErrorCheck(LRCorCRC)000206000300090002––图34:读通用类型寄存器ModbusProtocolPI-MBUS-30034实用文档响应正常响应为一串“子响应”,每一个“子响应”对应每个“子请求”,字节数区的值为所有“子响应”字节数之和,此外每个“子响应”中有一个区说明本身的字节数。RESPONSEFieldNameSlaveAddressFunctionByteCountSub–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)Example(Hex)11140C05060DFE0020050633CD0040––图35:读通用类型寄存器21(15Hex)写通用类型寄存器说明在6X类型寄存器中,扩展内存文件,不支持广播。该功能代码能写多组类型寄存器,组别之间地址可分开,但组力寄存器的地必须连续。查询查询信息,包括标准的Modbus从机地址,功能代码,字节数,以及错误校验区,查询信息还指定要写入的寄存器组或组的地址,每一组由单独的“子请求”区定义,它包括7个字节:-寄存器类型:1字节,指定为6X类型-扩展内存文件号:2字节(1-10或0001-000AH)-文件写入寄存器中的起始地址:2个字节-寄存器数量:2个字节-要写入的数据,每一个寄存器2个字节写入文件需要的寄存器数,加上查询的其他数据其总长度不能超过Modbus所允许的256个字节。有效的扩展内存文件数取决于从机控制器内存的扩展容量,除最后一个文件外,其它的每个文件均含10,000寄存器,寻址地址为0000-270FH(十进制0000-9999)标准文案\uf0f8注意:6X类型的扩展寄存器与4X类型的保持寄存器的寻址方式不同。6X类型的扩展寄存器寻址起始地址为0。4X类型的保持寄存器寻址起始地址为1。带扩展寄存器的984-758控制器中最后一个文件中一个最后的(最高的)寄存器见下面2个表格。984-785带AS-M785-032内存:用户表态扩展内存容量最后一个文件最后一个寄存器(十进制)逻辑RAM32K32K00016K64K72K83727984-785带AS-M785-032内存:用户表态扩展内存容量最后文件最后寄存器(十进制)逻辑RAM48K32K24K3457532K64K96K108303带扩展寄存器的其它控制器,最后文件中的最后一个寄存器(最高位)如下:扩展内存容量最后文件数最后一个寄存器(十进制)16K2638332K4276764K7553596K10830321(15Hex)写通用类型寄存器例:请求把数据写入从机设备17中的一组寄存器。文件4在一组3个寄存器中,寄存器起始地址为7(0007)QUERYFieldNameSlaveAddressFunctionByteCountSub–Req1,ReferenceTypeSub–Req1,FileNumberHiSub–Req1,FileNumberLoSub–Req1,StartingAddrHiSub–Req1,StartingAddrLoSub–Req1,RegisterCountHiSub–Req1,RegisterCountLoSub–Req1,RegisterDataHiSub–Req1,RegisterDataLoSub–Req1,RegisterDataHiExample(Hex)11150D0600040007000306AF04ModbusProtocolPI-MBUS-30036实用文档Sub–Req1,RegisterDataLoSub–Req1,RegisterDataHiSub–Req1,RegisterDataLoErrorCheck(LRCorCRC)BE100D––图36:写通用类型寄存器-查询标准文案响应正常响应为返回查询信息(即查询和响应内容一致)RESPONSEFieldNameSlaveAddressFunctionByteCountSub–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)Example(Hex)11150D0600040007000306AF04BE100D––图37:写通用类型寄存器-响应ModbusProtocolPI-MBUS-30038实用文档22(16Hex)掩码写入4X类型寄存器说明通过AND掩码,OR掩码和寄存器当前值来修改一个指定4X类型寄存器的内容,该功能代码用于设置和请除寄存器中的某一位,不支持广播。该功能代码只支持948-785型控制器查询查询可指定要写入的4X类型寄存器,数据可作为AND掩码或OR掩码。算法:结果=(当前值ANDAnd_Mask)OR(or_MaskANDAnd_Msdk)例:HexBinary当前值=1200010010And_Mask=F211110010Or_Mask=2500100101And_Mask=0D00001101Result=1700010111注意Or的掩码值为“0”,是寄存器当前值与And,Mask进行逻辑运算的结果,若And_Mask值为“0”其结果等于Or_Mask值。注意:寄存器的内容可由功能代码03(读保持寄存器)读出,由于可编程控制器可对用户的逻辑程序扫描,同此其值可改变。例:把上面的掩码值。掩码写入从机设备17中的寄存器5。QUERYFieldNameSlaveAddressFunctionReferenceAddressHiReferenceAddressLoAnd_MaskHiAnd_MaskLoOr_MaskHiOr–MaskLoErrorCheck(LRCorCRC)Example(Hex)1116000400F20025––图38掩码写入4X类型寄存器-查询响应正常响应是对查询的应答,写入寄存器后,返回响应。标准文案RESPONSEFieldNameSlaveAddressFunctionReferenceAddressHiReferenceAddressLoAnd_MaskHiAnd_MaskLoOr_MaskHiOr–MaskLoErrorCheck(LRCorCRC)Example(Hex)1116000400F20025––图39掩码写入4X类型寄存器-响应ModbusProtocolPI-MBUS-30040实用文档23(17Hex)读/写4X类型寄存器说明Modbus单次传送中执行一个读操作和一个写操作。该功能代码能把新的数据写入一组4X类型寄存器,然后返回另一组4X类型寄存器中的数据,不支持广播,该功能只支持984-785型控制器。查询查询指定要读寄存器组的起始地址及寄存器数量,也指定要写入的寄存器组的起始地址及寄存器的数量,字节数区指定了应写入数据区的字节数。例:对从机设备17查询,读出起始地址为5的6个寄存器内容,并把数据写入起始地址为16的3个寄存器。QUERYFieldNameSlaveAddressFunctionReadReferenceAddressHiReadReferenceAddressLoQuantitytoReadHiQuantitytoReadLoWriteReferenceAddressHiWriteReferenceAddressLoQuantitytoWriteHiQuantitytoWriteLoByteCountWriteData1HiWriteData1LoWriteData2HiWriteData2LoWriteData3HiWriteData3LoErrorCheck(LRCorCRC)Example(Hex)111700040006000F00030600FF00FF00FF––图40:读/写4X类型寄存器-查询标准文案响应正常响应包含已被读出的寄存器组中的数据,字节数区指定了数据区应读的字节数。例:按查询要求返回响应RESPONSEFieldNameSlaveAddressFunctionByteCountReadData1HiReadData1LoReadData2HiReadData2LoReadData3HiReadData3LoReadData4HiReadData4LoReadData5HiReadData5LoReadData6HiReadData6LoErrorCheck(LRCorCRC)Example(Hex)11170C00FE0ACD00010003000D00FF––图41:读/写4X寄存器-响应ModbusProtocolPI-MBUS-30042实用文档24(18Hex)读FIFO查询数据说明读一个先进先出(FIFO)的4X类型寄存器中查询数据,该功能代码先返回查询的寄存器数,接着返回查询数据。最多读32个寄存器,即寄存器数加31个含有查询数据的寄存器。只能读查询数据,但不能请除数据,不支持广播。只有984-785型控制器支持该功能。查询查询指定读4X类型FIFO查询寄存器的起始地址,该地址作为指针指向控制器的FIN和FOUT的功能块,它包含查询的寄存器数,跟在这地址后的是FIFO数据的寄存器。例:读从机设备17中的FIFO查询数据,起始地址指向41247寄存器(04DEH)。QUERYFieldNameSlaveAddressFunctionFIFOPointerAddressHiFIFOPointerAddressLoErrorCheck(LRCorCRC)Example(Hex)111804DE––图42:读FIFO行列-查询标准文案响应正常响应中,字节数包括查询字节数和数据寄存器字节,但不包括错误校验区。查询数是查询中数据寄存器数量,不包括该查询数寄存器。若查询数超过31,则返回一个不正常响应带(不合法数据值)错误代码03。例:按查询要求返回正常响应:RESPONSEFieldNameSlaveAddressFunctionByteCountHiByteCountLoFIFOCountHiFIFOCountLoFIFODataReg1HiFIFODataReg1LoFIFODataReg2HiFIFODataReg2LoFIFODataReg3HiFIFODataReg3LoErrorCheck(LRCorCRC)Example(Hex)11180008000301B812841322––图43:读FIFO查询数据-响应该例中,返回被指向的FIFO寄存器地址(41247)带查询数3,后跟3个数据寄存器,确良地址分别为41248(十进制440或01B8H);41249(十进制4740或1284H);41250(十进制4898或1322H)。ModbusProtocolPI-MBUS-30044实用文档第三章诊断子功能代码\uf0a8Modbus功能代码08-诊断\uf0a8诊断子功能代码标准文案功能代码08-诊断说明功能代码08提供一系列试验,校验主机和从机间的通讯系统或检查从机中出现错误的各种条件,不支持广播。该功能使用一个子功能代码(2个字节),定义试验的类型。正常响应时,从机返回功能代码和子功能代码。大多数诊断测试,使用1个2字节的数据区,向从机发送诊断数据和控制信息。有些诊断会产生需由从机返回的数据,放在正常响应的数据区。诊断对从机设备的影响一般来说,向从机设备发出的一个诊断功能,不会影响从机运行的用户程序。因为诊断不作用于用户的逻辑,如离散量控制和寄存器等。某些功能可对从机中出错的计数器复位。可以使一台从机设备强置为“只听模式”,以便检测通讯系统,但不对信息作响应,此时,对用户应用程序的影响程度取决于和从机设备的数据交换量,通常采用强制方法的目的,是把有故障的从机设备排除在通讯系统之外。ModbusProtocolPI-MBUS-30046实用文档查询例:请求从机设备17返回查询数据,使用一个子功能代码“0”(0000H),需返回的数据(A537H)在一个2字节的数据区中。QUERYFieldNameSlaveAddressFunctionSubfunctionHiSubfunctionLoDataHiDataLoErrorCheck(LRCorCRC)Example(Hex)11080000A537––图44:诊断-查询响应正常响应返回的数据与查询的数据相同,包括功能代码和子功能代码。RESPONSEFieldNameSlaveAddressFunctionSubfunctionHiSubfunctionLoDataHiDataLoErrorCheck(LRCorCRC)Example(Hex)11080000A537––图45:诊断-响应对其它类型查询响应的数据区可含有错误数或子功能代码请求的其它信息。以上2个例子说明了查询和响应信息中的功能代码和子功能代码以及数据区的单元和位置。控制器支持的诊断功能代码Modicon控制器支持的子功能代码列表如下:(代码为十进制)。其中“Y”为支持,“N”为不支持。代码名称384484584884M8498400返回查询数据YYYYYY01再起动通讯选择YYYYYY02返回诊断寄存器YYYYYY03改变ASCII输入分隔符YYYNNY标准文案04强制只听模式YYYYYY05-09备用10请除Ctrs和诊断标志YY(1)YY(1)11返回总线信息数YYYNNY12返回总线通讯错误数YYYNNY13返回总线不正常错误数YYYNNY14返回从机信息数YYYNNN15返回从机不响应数YYYNNN16返回从机NAK数YYYNNY17返回从机忙数YYYNNY18返回总线字符超限数YYYNNY19返回超限错误数NNNYNN20清除超限计数器和标志NNNYNN21获取/清除Modbus+统计值NNNNNY22-up备用注意:(1)只清除记数器ModbusProtocolPI-MBUS-30048实用文档诊断子功能00返回查询数据响应时返回查询区的数据,响应信息与查询信息相同。子功能数据区(查询)数据(响应)0000任意返回查询数据01再起动通讯选择对从机外设口初始化和再起动,对全部的通讯事件计数器清零。若当前的端口为“只听模式”,则无响应返回。该功能代码是唯一能撤除“只听模式”的功能代码,若端口不在“只听模式”工作,则在执行重起前返回正常响应。值从机接收查询时,该功能对再起动和电源进行测试,只有顺利通过上述试验后,端口才能处于联机状态。查询数据区FF00H值清除端口通讯事件的记录,而0000H值在重起动前清除记录。子功能代码数据区(查询)数据(响应)0001000000响应查询数据0001FF00响应查询数据标准文案08诊断02返回诊断寄存器响应时,返回从机的16位诊断寄存器内容。子功能代码查询数据区响应数据区00020000诊断寄存器内容寄存器数据格式Modicon控制器诊断寄存器每位的赋值列表如下。bit15为最高位,相应位置成“1”时,为(TRUE)184/384诊断寄存器Bit说明0连续出错1RunLightFailed2T-Bus测试失败3异步总线测试失败4强制只听模式5不用6不用7ROM芯片“0”测试失败8连续执行ROM测试9ROM芯片1测试失败10ROM芯片2测试失败11ROM芯片3测试失败12RAM芯片5000-53FF测试失败13RAM芯片6000-67FF测试失败,偶地址14RAM芯片6000-67FF测试失败,奇地址15定时器芯片测试失败诊断寄存器Bit说明0连续1CPU试验或运行指示故障2并行口测试失败3异步总线测试失败4定时器0测试失败5定时器1测试失败6定时器2测试失败7ROM芯片0000-07FF测试失败8连续执行ROM测试9ROM芯片0800-0FFF测试失败10ROM芯片1000-17FF测试失败11ROM芯片1800-1FFF测试失败ModbusProtocolPI-MBUS-30050实用文档12ROM芯片4000-40FF测试失败13ROM芯片4100-41FF测试失败14ROM芯片4200-42FF测试失败15ROM芯片4300-43FF测试失败584/984诊断寄存器Bit说明0不合法配置1高速RAM后备检测错误2逻辑检查错误3无效节点类型4无效TrafficCop类型5CUP/Solve诊断失败6实时时钟故障7看门狗定时器故障-扫描时间超过250ms8未检测到逻辑节点的终点,或数段结束量与配置段量不匹配9静态RAM测试失败101112131415外设口停止,无出错。标准文案08诊断884诊断寄存器Bit说明0ModbusIOP超过错误标志1Modbus选择超过错误标志2ModbusIOP故障3Modbus选择故障4OurbusIOP故障5远程IO故障6主CUP故障7RAM表检查故障8扫描任务超过时限用户逻辑太多9未用10未用11未用12未用13未用14未用15未用ModbusProtocolPI-MBUS-30052实用文档03改变ASCII输入分隔符查询数据中的“CHAR”字符为信息结束的分隔符(替代缺省的LF字符),ASCII信息终了不用“LF”的作结束符时使用该功能码。子功能代码查询数据区响应数据区0003CHAR00返回查询数据04强置“只听模式”强制从机为“只听模式”,该功能代码把此从机设备与网络上的其它设备隔离,使其不干扰其它设备的正常通讯,无响应返回。从机进入只听模式后,关掉全部的通讯控制,终止看门狗定时器,封锁控制功能。只听模式时,从机检测接收的信息或广播信息,但不执行动作,不返回响应。唯一能处理“只听模式”的功能代码为08,子功能代码为1(再起动通讯选择功能代码)。子功能代码查询数据区响应数据区00040000不响应10(0AH)计数器和诊断寄存器清零对584或984型控制器,该功能代码只对计数器清零(计数器通电时也清零),对其它类型的控制器时,该功能代码对全部的计数器和诊断寄存器清零。子功能代码查询数据区响应数据区000A0000返回查询数据484诊断寄存器Bit说明0连续出错1CPU试验和RunLight失败2ParallelPortFailed3异步总线测试失败4定时器0测试失败5定时器1测试失败6定时器2测试失败7ROM芯片0000-07FF测试失败8连续执行ROM测试9ROM芯片0800-0FFF测试失败10ROM芯片1800-17FF测试失败11ROM芯片0000-1FFF测试失败12RAM芯片4000-40FF测试失败13RAM芯片4100-41FF测试失败14RAM芯片4200-42FF测试失败15RAM芯片4300-43FF测试失败584/984诊断寄存器Bit说明标准文案0不合法配置1高速RAM后备检测错误2逻辑检查错误3无效节点类型4无效TrafficCop类型5CPU/Solve诊断失败6实时时钟故障7看门狗定时器故障-扫描时间超过250ms8NoEndofLogicNodedetected,orquantityofendofsegmentwords(DOIO)doesnotmatchquantityofsegmentsconfigured9表态RAM测试失败10StartofNetwork(SON)didnotbeginnetwork11BadOrderofSolveTacle12IllegalPeripherallntervention13DimAwarenessFlag14NotUsed15PeripheralPortStopExecuted,notanerror.11(0BH)返回总线信息数响应数据区的主机返回再起动,计数器清零或通电后,从机通讯系统已检测的数据量。子功能代码查询数据区响应数据区000B0000总的信息数12(0CH)返回总线通讯错误数响应数据区向主机返回再起动,计数器清零或通电后,从机所测测到的CRC校验错误数。子功能代码查询数据区响应数据区000C0000CRC错误数ModbusProtocolPI-MBUS-30054实用文档13(0DHex)返回总线不正常错误数响应数据区向主机返回再起动,计数器清零或通电后,Modbus不正常响应的数量。不正常响应详见附录A。子功能代码查询数据区响应数据区000D0000不正常错误数标准文案14(0EHex)返回从机信息数响应数据区向主机返回再起动,计数器清零(或通电)后,从机已处理的被访问的(或广播)信息量。子功能代码查询数据区响应数据区000E0000从机信息数15(0FHex)返回从机不响应数数据区向主机返回再起动,计数器清零(或通电)后,从机被访问而无响应返回的信息量,(既可正常响应也可不正常响应)。子功能代码查询数据区响应数据区000F0000从机不响应数16(10Hex)返回从机NAK数数据区向主机返回再通电,计数器清零(或通电)后,从机被访问,返回NAK不正常响应的信息量。子功能数据区(查询)数据(响应)00100000从机NAK数ModbusProtocolPI-MBUS-30056实用文档08诊断17(11Hex)从机返回忙的次数响应数据区向主机返回再起动,计数器清零(或通电)后因从机设备忙而引起不正常响应的次数,不正常响应详见附录A。子功能代码查询数据区响应数据区00110000从机设备忙次数18(12Hex)返回总线字符超限次数响应数据区向主机返回再起动和计数器清零(或通电)后,从机因字符超限而无法处理信息的次数。字符超限是由于到达端口的字符速度高于从机能保存的速度,或由于硬件故障丢失字符而引起。子功能代码查询数据区响应数据区00110000从机设备忙次数19(13Hex)返回IOP超限次数(884)响应数据区向主机返回,再起动,计数器清零(或通电)后,被访向从机因一台884IOP超限条件而无法次理信息的次数,I0P超限是由于到达端口字符的速度高于从机能保存的速度或由于硬件故障丢失字符而引起。该功能代码指定用于884型控制。子功能代码查询数据区响应数据区00130000从机IOP超限次数标准文案20(14Hex)超限计数器和标志清零(884)对884超限错误计数器清零,对错误标志复位,标志的当前状态放在884诊断寄存器的0位。子功能代码查询数据区响应数据区00140000返回查询数据ModbusProtocolPI-MBUS-30058实用文档08诊断21(15Hex)获取/清除Modbus+的统计值响应数据区向主机返回信息量为108字节,54个16位字数据。该功能与数据区的2个字节长度不同。数据中含有对从机设备中的确良Modbus+对等。处理器的统计数,查询时除功能代码(08)和子功能代码(0015H)外,还有一个2字节的操作区,用于执行“获取统计”或“清除统计”的操作。“获取操作”不能清除统计值,清除操作在清除前不能回到“统计值”,统计值可在从机设备通电时清除。操作区后跟查询子功能区。—0003代码指定“获取统计”操作—0004代码指定“清除统计”操作功能代码子功能代码操作0800150003(获取统计)0800150004(清除统计)获取统计响应:功能代码子功能代码操作字节数数据0800150003006C字00-53清除统计响应:清除统计的正常响应是对查询的应答查询功能代码子功能代码操作0800150004标准文案[][软件版本(十六进制)]Modbus+网络统计字位含义00节点类型ID:0未知节点类型1PLC节点2Modbus桥路节点3主机节点4桥路加节点5对等1/0节点010...11十六进制软件文本号(从字中读12-15位)12...14备用15定义字15个错误计数器MSB定义字15错误计数器,高字节的低4位。加上低字节8位,为(十六进制)软件版本\\\\最高有效位定义字15错误计数器。02该站的网络地址03状态变量:0通电状态1监视脱机状态2双工脱机状态3空间位4令牌状态5工作响应状态6传送牌7请求响应8检查通过状态9要求令牌状态10要求响应状态04对等状态(LED代码)提供与网络有关单元的状态:0监视连接操作32正常连接操作64不取令牌96单工站128双工站ModbusProtocolPI-MBUS-30060高字节低字节实用文档08诊断ModbusPlus网络统计字位含义05令牌通过计数器,通过令牌站一次,计数器加206令牌旋转时间(ms)15若15字的1位未设定,含义如下:LO接收器冲突-放弃错误计数器HI接收器排队错误计数器设定字15的1位后,含义如下:LO电览A出错HI电览B出错16LO接收器CRC错误寄存器HI捆包长度错误计数器17LO连接地址错误计数器HI发送绶冲器DMA-underrun错误计数器18LO内部捆包长度错误计数器HIMAC功能代码错误计数器19LO通讯再试计数器HI故障(错误)计数器08诊断ModbusPlus网络统计字位含义05令牌通过计数器,通过令牌站一次,计数器加106令牌旋转时间(ms)07LO令牌循环期间数据主站失败HI令牌循环期间程序主站失败08LO数据主站令牌宿主位图HI程序主站令牌宿主位图09LO数据从站令牌宿主位图HI程序从站令牌宿主位图10HI数据从站/得到从机命令传送位图请求标准文案11LO程序主机/得到主机请求发送位图HI程序从机/得到从机命令请求发送位图12LO程序主站连接状态状位图HI程序从站自动退出请求位图13LO提前发送延期错误计数器HI接收缓冲器超时错误记数器14LO重复命令接收记数器HI帧错误记数器15若15字的1位未设定,含义如下:LO接收器冲突一放弃错误计数器HI接收器排队错误计数器设定字15的1位后含义如下:LO电缆A出错HI电缆B出错16LO接收器CRC错误寄存器HI捆包长度错误计数器17LO连接地址错误计数器HI发送冲器DMAunderrun错误计数器字位含义20LO捆包成功计数器HI无响应错误计数器21LO不正常响应计数器HI不正常通道计数器22LO不正常响应计数器ModbusProtocolPI-MBUS-30062实用文档HI忘记发送错误计数器23LO有效站位图表,节点1...8HI有效站位图表,节点9...1624LO有效站位图表,节点17...24HI有效站位图表,节点25...3225LO有效站位图表,节点33...40HI有效站位图表,节点41...4826LO有效站位图表,节点49...56HI有效站位图表,节点57...6427LO令牌站位图表,节点1...8HI令牌站位图表,节点9...1628LO令牌站位图表,节点17...24HI令牌站位图表,节点25...3229LO令牌站位图表,节点33...40HI令牌站位图表,节点41...4830LO令牌站位图表,节点49...56HI令牌站位图表,节点57...6431LO全局数据位图表1...8HI全局数据位图表9...1632LO全局数据位图表17...24HI全局数据位图表25...3233LO全局数据位图表33...40HI全局数据位图表41...4834LO全局数据表49...56HI全局数据位图表57...64标准文案08诊断Modbus+网络统计字位含义35LO位图中由接收缓冲器,缓冲器1...8HI位图中由接收缓冲器,缓冲器9...1636LO位图中由接收缓冲器,缓冲器17...24HI位图中由接收缓冲器,缓冲器25...3237LO位图中由接收缓冲器,缓冲器33...40HI站管理命令开始计数器38LO主机数据输出通道1命令开始计数器、HI主机数据输出通道2命令开始计数器39LO主机数据输出通道3命令开始计数器HI主机数据输出通道4命令开始计数器40LO主机数据输出通道5命令开始计数器HI主机数据输出通道6命令开始计数器41LO主机数据输出通道7命令开始计数器HI主机数据输出通道8命令开始计数器42LO从机数据输入通道41命令处理计数器HI从机数据输入通道42命令处理计数器43LO从机数据输入通道43命令处理计数器HI从机数据输入通道44命令处理计数器44LO从机数据输入通道45命令处理计数器HI从机数据输入通道46命令处理计数器45LO从机数据输入通道47命令处理计数器HI从机数据输入通道48命令处理计数器46LO主机数据输出通道81命令开始计数器HI主机数据输出通道82命令开始计数器47LO主机数据输出通道83命令开始计数器HI主机数据输出通道84命令开始计数器48LO主机程序命令开始计数器HI主机程序输出通道86命令开始计数器49LO主机程序输出通道87命令开始计数器HI主机程序输出通道88命令开始计数器ModbusProtocolPI-MBUS-30064实用文档50LO从机程序输入通道C1命令处理计数器HI从机程序输入通道C2命令处理计数器51LO从机程序输入通道C3命令处理计数器HI从机程序输入通道C4命令处理计数器52LO从机程序输入通道C5命令处理计数器HI从机程序输入通道C6命令处理计数器53LO从机程序输入通道C7命令处理计数器HI从机程序输入通道C8命令处理计数器标准文案附录A不正常响应\uf0a8不正常响应\uf0a8不正常代码ModbusProtocolPI-MBUS-30066实用文档不正常响应除广播外,主机向从机设备发送查询并希望有一个正常响应,主机查询中有可能产生4种事件:\uf0a8从机接收查询,通讯错误正常处理信息,则返回一个正常响应事件。\uf0a8由于通讯出错,从机不能接收查询数据,因而不返回响应。此时,主机依靠处理程序给出查询超时事件。\uf0a8若从机接收查询,发现有(LRC或CRC)通讯错误,并返回响应,此时,依靠主机处理程序给出查询超时事件。\uf0a8从机接收查询,无通讯错误,但无法处理(如读不存在的线圈和寄存器)时,向主机报告错误的性质。不正常响应信息有2个与正常响应不相同的区域:功能代码区:正常响应时,从机的响应功能代码区,带原查询的功能代码。所有功能代码的MSB为0(其值低于80H)。不正常响应时,从机把功能代码的MSB置为1,使功能代码值大于80H,高于正常响应的值。这样,主机应用程序能识别不正常响应事件,能检查不正常代码的数据区。数据区:正常响应中,数据区含有(按查询要求给出的)数据或统计值,在不正常响应中,数据区为一个不正常代码,它说明从机产生不正常响应的条件和原因。标准文案例:主机发出查询,从机不正常响应。(为十六进制数据)。QUERYByteContents1SlaveAddress2Function3StartingAddressHi4StartingAddressLo5No.ofCoilsHi6No.ofCoilsLo7LRCEXCEPTIONRESPONSEByteContents1SlaveAddress2Function3ExceptionCode4LRCExample0A0104A100014FExample0A810273图46:主机发出查询,从机不正常响应上例中,从机设备地址10(0AH),读线圈状态的功能代码(01),主机请求线圈状态的地址为1245(04A1H)。注意:只读一个指定线圈,地址为(0001).若从机中不存在此线圈地址时,即以不正常代码(02),向主机返回一个不正常响应。说明为不合法地址。ModbusProtocolPI-MBUS-30068实用文档不正常代码代码名称含义01不合法功能代码从机接收的是一种不能执行功能代码。发出查询命令后,该代码指示无程序功能。02不合法数据地址接收的数据地址,是从机不允许的地址。03不合法数据查询数据区的值是从机不允许的值。04从机设备故障从机执行主机请求的动作时出现不可恢复的错误。05确认从机已接收请求处理数据,但需要较长的处理时间,为避免主机出现超时错误而发送该确认响应。主机以此再发送一个“查询程序完成”未决定从机是否已完成处理。06从机设备忙碌从机正忙于处理一个长时程序命令,请求主机在从机空闲时发送信息。07否定从机不能执行查询要求的程序功能时,该代码使用十进制13或14代码,向主机返回一个“不成功的编程请求”信息。主机应请求诊断从机的错误信息。08内存奇偶校验错误从机读扩展内存中的数据时,发现有奇偶校验错误,主机按从机的要求重新发送数据请求。标准文案附录B应用须知\uf0a8本附录向您提供有关应用的资料和建议。\uf0a8ModiconPLC的最大查询/响应参数。\uf0a8估算串行传送时序\uf0a8584和984A/B/XPLC的应用须知ModbusProtocolPI-MBUS-30070实用文档最大查询/响应参数584功能说明查询响应1读线圈状态2000线圈2000线圈2读输入状态2000输入2000输入3读线圈状态125寄存器125寄存器4读输入状态125寄存器125寄存器5强置单线圈1线圈1线圈6预置单寄存器1寄存器1寄存器7读不正常状态N/A8线圈8诊断N/AN/A9程序484不支持不支持10查询484不支持不支持11获取通讯事件控制N/AN/A12获取通讯事件记录N/A70数据字节13编程控制器33数据字节33数据字节14查询控制器N/A33数据字节15强置多线圈800线圈800线圈16预置多寄存器100寄存器100寄存器17报告从机N/AN/A18编程884/M84不支持不支持19复位通讯连接Limk不支持不支持20读通用类型寄存器(1)(1)21写通用类型寄存器(1)(1)标准文案最大查询/响应参数984功能说明查询响应1读线圈状态2000线圈2000线圈2读输入状态2000输入2000输入3读线圈状态125寄存器125寄存器4读输入状态125寄存器125寄存器5强置单线圈1线圈1线圈6预置单寄存器1寄存器1寄存器7读不正常状态N/A8线圈8诊断N/AN/A9程序484不支持不支持10查询484不支持不支持11获取通讯事件控制N/AN/A12获取通讯事件记录N/A70数据字节13编程控制器33数据字节33数据字节14查询控制器N/A33数据字节15强置多线圈800线圈800线圈16预置多寄存器100寄存器100寄存器17报告从机N/AN/A18编程884/M84不支持不支持19复位通讯连接Limk不支持不支持20读通用类型寄存器(1)(1)21写通用类型寄存器(1)(1)ModbusProtocolPI-MBUS-30072实用文档估算串行处理时序处理顺序Modbus串行传输时按如下顺序:括号中的字符。1.Modbus主机组织信息。2.检查主机设备ModbusRTS和CTS的状态。(A)3.向从机发送查询信息。(B)4.从机处理查询数据。(C)(D)5.从机计算一个错误校验区。(E)6.检查从机设备RTS和CTS,modem的状态。(A)7.向主机返回响应信息。(B)8.主机按从机响应的数据处理。TimingNotes(A)若RTS和CTS跳接在一起,可忽略该时间。对J478modem,该时间约5ms。(B)使用下述公式,估算传时间:(C)在PLC扫描结束时,处理Modbus信息,最坏情况延时是一个扫描时间,若控制器刚开始一个新扫描时间。控制器扫描结束时,Modbus端口的分配时间取决控制器的型号。标准文案(D)Contiued:584和984型控制器,每个Modbus端口的工作时间约为1.5ms,从端口1开始,顺序进行。有些低档控制器(184/384)该时间按处理的数量的大小而变化。从0.5ms至6.0ms(100寄存器)或至7.0ms(800个线圈)。(E)Modbus功能代码1-4,1.5和16,可在从机工作的Modbus端口的分配时间内允许主机请求从机处理更多的数据:若从机一时无法处理的话,可放入缓冲区。Modbus端口在一次服务期中能处理的数据量如下:点数寄存器Micro84164184/38480010048432165846432984A/B/X6432984-X8X1000125注意:‘984-X8X’指的是984单独使用型(984-835,-685,etc)。(F)LRC计算时间<1ms,CRC计算时间约0.3ms(响应而返回的8位数据)ModbusProtocolPI-MBUS-30074实用文档584和984A/B/XPLC应用须知本应用须知只适用Modicon584和984/A/B/X控制器。\uf0a8波特率:用Modbus端口1和端口2时,最大允许的波特率为19200。\uf0a8端口封锁:使用ASCII,要送“零数据长度”的信息,或无设备地址的信息,如下为一个不合法信息。:CRLF(colon,CR,LF)出现这类信息时,会随机封死端口。\uf0a8ASCII信息终止:ASCII信息一般用,CRLF终止。584和984A/B/X型控制器的一个信息,可在LRC区后终止,而不需发送CRLF字符,如LRC区后出现>IS时间间隔则控制器认为信息是正常终止。标准文案附录CLRC/CRC生成\uf0a8LRC校验\uf0a8CRC校验ModbusProtocolPI-MBUS-30076实用文档LRC纵向冗余校验纵向冗余校验区为1个字节,8位二进制数据,由发送设备计算LRC值,并把计算值附到信息中。接收设备在接收信息时,重新计算LRC值,并把计算值与LRC区中接收的实际值进行比较,若两者不相同,则产生一个错误。信息中的相邻2个8位字节相加,丢弃进位,然后进行二进制补码,运算计算出LRC值。LRC是一个8位数据区,因此每加一个新字符,会产生大于十进制255的数值而谥出,因为没有第9位,自动放弃进位。产生LRC的过程:1.相加信息中的全部字节,包括起始“:”号和结束符CRLF.并把结果送入8位数据区,放弃进位。2.由FFH减去最终的数据值,产生的补码。3.加“1”产生二进制补码。把LRC放入信息中发送8位LRC(2个ASCII字符)时,先送高位字符,后送低位字符,如:LRC值为61H(01100001):ColonAddrFuncDataCountDataDataDataDataLRCHiLRCLoCR61图47LRC字符顺序标准文案例:用一个C语言功能码产生LRC值。该功能码用2个自变量:unsignedcharauchMsg;为生成LRC值,把指针指向含有二进制数据的缓冲器unsignedshortusDataLen;缓冲器中的字节数。该功能返回LRC作为一种类型“unsignedchar”。LRC产生的功能staticunsignedcharLRC(auchMsg,usDataLen)unsignedcharauchMsg;/按信息的字节计算LRC/unsignedshortusDataLen;/按信息的字节计算LRC/{unsignedcharuchLRC=0;/初始化LRC字符while(usDataLen––)/通过数据缓冲器/uchLRC+=auchMsg++;/加缓冲器字节无进位/return((unsignedchar)(–((char)uchLRC)));/返回二进制补码/}ModbusProtocolPI-MBUS-30078实用文档CRC循环冗余校验循环冗余校验CRC区为2字节,含一个16位二进制数据。由发送设备计算CRC值,并把计算值附在信息中,接收设备在接收信息时,重新计算CRC值,并把计算值与接收的在CRC区中实际值进行比较,若两者不相同,则产生一个错误。CRC开始时先把寄存器的16位全部置成“1”,然后把相邻2个8位字节的数据放入当前寄存器中,只有每个字符的8位数据用作产生CRC,起始位,停止位和奇偶校验位不加到CRC中。产生CRC期间,每8位数据与寄存器中值进行异或运算,其结果向右移一位(向LSB方向),并用“0”填入MSB,检测LSB,若LSB为“1”则与预置的固定值异或,若LSB为“0”则不作异或运算。重复上述处过程,直至移位8次,完成第8次移位后,下一个8位数据,与该寄存器的当前值异或,在所有信息处理完后,寄存器中的最终值为CRC值。产生CRC的过程:1.把16位CRC寄存器置成FFFFH.2.第一个8位数据与CRC寄存器低8位进行异或运算,把结果放入CRC寄存器。3.CRC寄存器向右移一位,MSB填零,检查LSB.4.(若LSB为0):重复3,再右移一位。(若LSB为1):CRC寄存器与AoolH进行异或运算5.重复3和4直至完成8次移位,完成8位字节的处理。6.重复2至5步,处理下一个8位数据,直至全部字节处理完毕。7.CRC寄存器的最终值为CRC值。8.把CRC值放入信息时,高8位和低8位应分开放置。把CRC值放入信息中发送信息中的16位CRC值时,先送低8位,后送高8位。若CRC值为1241(0001001001000001):AddrFuncDataCountDataDataDataDataCRCLoCRCHi4112图48:CRC字节顺序例:各种可能的CRC值,按两列装入,一列在16位CRC的高8位区,为(0-256的)CRC值,另一类为低8位区,为CRC的低位值。用这种方法得到的CRC其执行速度快于计算缓冲器中每个新字符得到一个新CRC值的方法。\uf0f8注意:该功能内部交换CRC中的高/低字节,返回的CRC值中,其字节已交换。因此,由功能码返回的CRC值,能直接放在信息中传送。标准文案CRC生成例:功能取2个自变量:unsignedcharpuchMsg;为生成CRC值,把指针指向含有二进制的数据的缓冲器unsignedshortusDataLen;缓冲器中的字节数。该功能返回CRC作为一种类型“unsignedshort”。CRC产生的功能unsignedshortCRC16(puchMsg,usDataLen)unsignedcharpuchMsg;/按信息的字节数计算CRCunsignedshortusDataLen;/quantityofbytesinmessage{unsignedcharuchCRCHi=0xFF;/初始化高字节/unsignedcharuchCRCLo=0xFF;/初始化低字节/unsigneduIndex;/把CRC表/while(usDataLen––)/通过数据缓冲器/{uIndex=uchCRCHi^puchMsgg++;/计算CRCuchCRCHi=uchCRCLo^auchCRCHi[uIndex];uchCRCLo=auchCRCLo[uIndex];}return(uchCRCHi<<8uchCRCLo);}ModbusProtocolPI-MBUS-30080实用文档高位字节表/TableofCRCvaluesforhigh–orderbytestaticunsignedcharauchCRCHi[]={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,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,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,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,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,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40};低位字节表/TableofCRCvaluesforlow–orderbytestaticcharauchCRCLo[]={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,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,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,0x63,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,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40};标准文案ModbusProtocolPI-MBUS-30082',)


  • 编号:1700774044
  • 分类:其他文档
  • 软件: wps,office word
  • 大小:82页
  • 格式:docx
  • 风格:商务
  • PPT页数:755795 KB
  • 标签:

广告位推荐

相关其他文档更多>