1、PI-MBUS-300 Modbus Protocol 1第一章Modbus 协议 介绍 Modbus 协议介绍 两种串行传输模式 信息帧 错误检查方法Modbus Protocol PI-MBUS-3002Modbus 协议介绍Modbus 可编程控制器之间可相互通讯,也可与不同网络上的其他设备进行通讯,支撑网络有 Modicon 的 Modbus 和Modbus+工业网络。网络信息存取可由控制器内置的端口,网络适配器以及 Modicon 提供的模块选件和网关等设备实现,对 OEM(机械设备制造商 )来说, Modicon 可为合作伙伴提供现有的程序,可使 Modbus+网络紧密地集成到他们
2、的产品设计中去。Modicon 的各种控制器使用的公共语言被称为 Modbus 协议,该协议定义了控制器能识别和使用的信息结构。当在Modbus 网络上进行通讯时,协议能使每一台控制器知道它本身的设备地址,并识别对它寻址的数据,决定应起作用的类型,取出包含在信息中的数据和资料等,控制器也可组织回答信息,并使用 Modbus 协议将此信息传送出去。在其他网络上使用时,数据包和数据帧中也包含着 Modbus 协议。如,Modbus+或 MAP 网络控制器中有相应的应用程序库和驱动程序,实现嵌入式 Modbus 协议信息与此网络中用子节点设备间通讯的特殊信息帧的数据转换。该转换也可扩展,处理节点地址
3、,路由,和每一个特殊网络的错误检查方法。如包含在 Modbus 协议中的设备地址,在信息发送前就转换成节点地址,错误检查区也用于数据包,与每个网络的协议一致,最后一点是需用 Modbus 协议,写入嵌入的信息,定义应处理的动作。PI-MBUS-300 Modbus Protocol 3图 1 说明了采用不同通讯技术的多层网络中设备的互连方法。在信息交换中,嵌入到每个网络数据包中的 Modbus 协议,提供了设备间能够交换数据的公共的语言。图 1:Modbus 协议应用示意图* MB+为 Modbus主 处 理 器 4 个 Modus设备或网络编程器编程器(去 MB+)S980(去 MAP)AT
4、/HC-984和HOST/MMHIAT/HC-984和HOST/MMHI984A/B和S985Modbus Protocol PI-MBUS-3004Modbus 上的数据传输Modicon 控制器上的标准 Modbus 端口是使用一个 RS-232 兼容的串行接口,定义了连接器,接线电缆,信号等级,传输波特率,和奇偶校验,控制器可直接或通过调制解调器( 以后简称 Modems)接入总线(网络)。控制器通讯使用主从技术,即主机能起动数据传输,称查询。而其它设备(从机) 应返回对查询作出的响应,或处理查询所要求的动作。典应的主机设备应包括主处理器和编程器。典应的从机包括可编程控制器。主机可对各从
5、机寻址,发出广播信息,从机返回信息作为对查询的响应。从机对于主机的广播查询,无响应返回Modbus 协议报据设备地址,请求功能代码,发送数据,错误校验码,建立了主机查询格式,从机的响应信息也用 Modbus协议组织,它包括确认动作的代码,返回数据和错误校验码。若在接收信息时出现一个错误或从机不能执行要求的动作时,从机会组织一个错误信息。并向主机发送作为响应。在其它总线上传输数据除标准的 Modbus 功能外,有些 Modcon 控制器内置端口或总线适配器,在 Modbus+总线上实现通讯或使用网络适配器,在 MAP 网络上通讯。在这些总线上,控制器间采用对等的技术进行通讯,即任意一个控制器可向
6、其它控制器启动数据传送。因此,一台控制器既可作为从机,也可作为主机,常提供多重的内部通道,允许并列处理主机和从机传输数据在信息级,尽管网络通讯方法是对等的,但 Modbus 协议仍采用主从方式,若一台控制器作为主机设备发送一个信息,则可从一台从机设备返回一个响应,类似,当一台控制器接受信息时,它就组织一个从机设备的响应信息,并返回至原发送信息的控制器。查询响应周期:图 2:主从查询响应周期查询:查询中的功能代码为被寻址的从机设备应执行的动作类型。数据字节中包含从机须执行功能的各附加信息,如功能代码 03 将查询从机,并读保持寄存器。并用寄存器的内容作响应。该数据区必须含有告之从机读取寄存器的起
7、始地址及数量,错误校验区的一些信息,为从机提供一种校验方法,以保证信息内容的完整性。响应:从机正常响应时,响应功能码是查询功能码的应答,数据字节包含从机采集的数据,如寄存器值或状态。如出现错误,则修改功能码,指明为错误响应。并在数据字节中含有一个代码,来说明错误,错误检查区允许主机确认有效的信息内容。主机查询信息设备地址功能代码8 位数据字节错误校验设备地址功能代码8 位数据字节错误校验从机响应信息PI-MBUS-300 Modbus Protocol 5两种串行传输模式控制器可使用 ASCII 或 RTU 通讯模式,在标准 Modbus 上通讯。在配置每台控制器时,用户须选择通讯模式以及串行
8、口的通讯参数。(波特率,奇偶校验等 ),在 Modbus 总线上的所有设备应具有相同的通讯模式和串行通讯参数。选择 ASCII 或 RTU 模式用于标准的 Modbus 总线。它定义了总线上串行传输信息区的“位”的含义,决定信息打包及解码方法。如在 MAP 和 Modbus+总线上时,Modbus 信息以帧的方式出现,并与串行传输无关,如请求读保持寄存器可以在 Modbus+上的两个控制器之间处理,而与使用的控制器的 Modbus 端口无关。ASCII 模式当控制器以 ASCII 模式在 Modbus 总线上进行通讯时,一个信息中的每 8 位字节作为 2 个 ASCII 字符传输的,这种模式的
9、主要优点是允许字符之间的时间间隔长达 IS,也不会出现错误。ASCII 码每一个字节的格式:编码系统: 16 进制,ASCII 字符 0-9,A-F 1 个 16 进制 数据位: 1 起始位7 位数据,低位先送奇/偶校验时 1 位;无奇偶校验时 0 位(LRC) 1 位带校验 1 停止位;无校验 2 止位错误校验区: 纵向冗余校验RTU 模式控制器以 RTU 模式在 Modbus 总线上进行通讯时,信息中的每 8 位字节分成 2 个 4 位 16 进制的字符,该模式的主要优点是在相同波特率下其传输的字符的密度高于 ASCII 模式,每个信息必须连续传输。RTU 模式中每个字节的格式:编码系统:
10、8 位二进制,十六进制 0-9,A-F数据位: 1 起始位8 位数据,低位先送奇/ 偶校验时 1 位;无奇偶校验时 0 位停止位 1 位( 带校验);停止位 2 位( 无校验)带校验时 1 位停止位;无校验时 2 位停止位错误校验区:循环冗余校验(CRC)Modbus 信息帧何论是 ASCII 模式还是 RTU 模式,Modbus 信息以帧的方式传输,每帧有确定的起始点和结束点,使接收设备在信息的起点开始读地址,并确定要寻址的设备 (广播时对全部设备 ),以及信息传输的结束时间。可检测部分信息,错误可作为一种结果设定。对 MAP 或 Modbus+协议可对信息帧的起始和结束点标记进行处理,也可
11、管理发送至目的地的信息,此时,信息传输中 Modbus 数据帧内的目的地址已无关紧要,因为 Modbus+地址已由发送者或它的网络适配器把它转换成网络节点地址和路由。ASCII 帧在 ASCII 模式中,以(:) 号(ASCII3AH)表示信息开始,以回撤一换行键 (CRLF) (ASCII OD 和 OAH)表示信息结束。对其它的区,允许发送的字符为 16 进制字符 0-9,A-F。网络中设备连续检测并接收一个冒号 (:)时,每台设备对地址区解码,找出要寻址的设备。字符之间的最大间隔为 1S,若大于 1S,则接收设备认为出现了一个错误。典型的信息帧见下表开始 地址 功能 数据 纵向冗余 结束
12、Modbus Protocol PI-MBUS-3006检查1 字符: 2 字符 2 字符 n 字符 2 字符 2 字符图 3 ASCII 信息帧例外:对于 584 和 984A/B/X 控制器,一个 ASCII 信息可在 LRC 区后正常终止,而不需发送 CRLF 字符,此时出现IS 的时间间隔,控制器也将认为是正常中断。RTU 帧RTU 模式中,信息开始至少需要有 3.5 个字符的静止时间,依据使用的波特率,很容易计算这个静止的时间(如下图中的 T1-T2-T3-T4)。接着,第一个区的数据为设备地址。各个区允许发送的字符均为 16 进制的 0-9,A-F。网络上的设备连续监测网络上的信息
13、,包括静止时间。当接收第一个地址数据时,每台设备立即对它解码,以决定是否是自己的地址。发送完最后一个字符号后,也有一个 3.5 个字符的静止时间,然后才能发送一个新的信息。整个信息必须连续发送。如果在发送帧信息期间,出现大于 1.5 个字符的静止时间时,则接收设备刷新不完整的信息,并假设下一个地址数据。同样一个信息后,立即发送的一个新信息, (若无 3。5 个字符的静止时间)这将会产生一个错误。是因为合并信息的CRC 校验码无效而产生的错误。开始 地址 功能 数据 校验 终止T1-T2-T3-T4 8 B 位 S 8 B 位 S N8 B 位 S 16B 位 ST1-T2-T3T-4图 4 R
14、TU 信息帧Modbus 信息帧(Continued)地址设置信息地址包括 2 个字符(ASCII)或 8 位(RTU),有效的从机设备地址范围 0-247,(十进制) ,各从机设备的寻址范围为 1-247。主机把从机地址放入信息帧的地址区,并向从机寻址。从机响应时,把自己的地址放入响应信息的地址区,让主机识别已作出响应的从机地址。地址 0 为于广播地址,所有从机均能识别。当 Modbus 协议用于高级网络时,则不允许广播或其它方式替代。如Modbus+使用令牌循环,自动更新共享的数据库。功能码设置信息帧功能代码包括字符(ASCII)或 8 位(RTU)。有效码范围 1-225(十进制) ,其
15、中有些代码适用全部型号的 Modicon 控制器,而有些代码仅适用于某些型号的控制器。还有一些代码留作将来使用,有关功能代替码的设置将在第 2 章说明。当主机向从句发送信息时,功能代码向从机说明应执行的动作。如读一组离散式线圈或输入信号的 ON/OFF 状态,读一组寄存器的数据,读从机的诊断状态,写线圈(或寄存器) ,允许下截、记录、确认从机内的程序等。当从机响应主机时,功能代码可说明从机正常响应或出现错误(即不正常响应 ),正常响应时,从句简单返回原始功能代码;不正常响应时,从机返回与原始代码相等效的一个码,并把最高有效位设定为“1” 。如,主机要求从机读一组保持寄存器时,则发送信息的功能码
16、为:0000 0011 (十六进制 03)若从机正确接收请求的动作信息后,则返回相同的代码值作为正常响应。发现错时,则返回一个不正常响信息:1000 0011(十六进制 83)从机对功能代码作为了修改,此外,还把一个特殊码放入响应信息的数据区中,告诉主机出现的错误类型和不正常响应的原因。主机设备的应用程序负责处理不正常响应,典型处理过程是主机把对信息的测试和诊断送给从机,并通知操作者。数据区的内容PI-MBUS-300 Modbus Protocol 7数据区有 2 个 16 进制的数据位,数据范围为 00-FF(16 进制),根据网络串行传输的方式,数据区可由一对 ASCII 字符组成或由一
17、个 RTU 字符组成。主机向从机设备发送的信息数据中包含了从机执行主机功能代码中规定的请求动作,如离散量寄存器地址,处理对象的数目,以及实际的数据字节数等。举例说明,若主机请求从机读一组寄存器(功能代码 03) ,该数据规定了寄存器的起始地址,以及寄存器的数量。又如,主机要在一从机中写一组寄存器, (则功能代码为 10H) 。该数据区规定了要写入寄存区的起始地址,寄存器的数量,数据的字节数,以及要写入到寄存器的数据。若无错误出现,从机向主机的响应信息中包含了请求数据,若有错误出现,则数据中有一个不正常代码,使主机能判断并作出下一步的动作。数据区的长度可为“零”以表示某类信息,如,主机要求-从机
18、响应它的通讯事件记录(功能代码 OBH) 。此时,从机不需要其他附加的信息,功能代码只规定了该动作。信息帧错误校验标准 Modbus 总线,有两类错误检查方法,错误检查区的内容按使用的错误检查方法填写。SDCII使用 ASCII 方式时,错误校验码为 2 个 ASCII 字符,错误校验字符是 LRC 校验结果。校验时,起始符为(:)冒号结束符为 CRLF 字符。RTU使用 RTU 方式时,错误校验码为一个 16 位的值,2 个 8 位字节。错误校验值是对信息内容执行 CRC 校验结果。CRC校验信息帧是最后的一个数据,得到的校验码先送低位字节,后送高位字节,所以 CRC 码的高位字节是最后被传
19、送的信息。串行传送信息在标准的 Modbus 上传送的信息中,每个字符或字节,按由左向右的次序传送:最低有效位:(LSB)最高有效位:(MSB)ASCII 数据帧位序:图 5 ASCII 位序RTU 数据帧位序:图 6 RTU 位序错误校验方法无奇偶校验带奇偶校验无奇偶校验带奇偶校验Modbus Protocol PI-MBUS-3008标准的 Modbus 串行通讯网络采用两种错误校验方法,奇偶校验(奇或偶) 可用于校验每一个字符,信息帧校验(LRC 或CRC)适用整个信息的校验,字符校验和信息帧校验均由主机设备产生,并在传送前加到信息中去。从机设备在接收信息过程中校验每个字符和整个信息。主
20、机可由用户设置的一个预定时间间隔,确定是否放弃传送信息。该间隔应有足够的时间来满足从机的正常响应。若主机检测到传输错误时,则传输的信息无效。从机不再向主机返回响应信息。此时,主机会产生一个超时信息,并允许主机程序处理该错误信号。注意:主机向实际并未存在的从机发送信息时也会引起超时出错信号。在 MAP 或 Modbus+等其它网骆上使用时,采用比 Modbus 更高一级的数据帧校验方法。在这些网络中,不再运用Modbus 中的 LRC 或 CRC 校验方法。当出现发送错误时,网络中的通讯协议通知发送设备有错误出现,并允许根据设置的情况,重试或放弃信息发送。若信息已发送,但从机设备未作响应,则主机
21、通过程序检查后发出一个超时错误。奇偶校验用户可设置奇偶校验或无校验,以此决定每个字符发送时的奇偶校验位的状态。何论是奇或偶校验,它均会计算每个字符数据中值为“1”的位数,ASCII 方式为位数据;RTU 方式为 8 位数据。并根据“1”的位数值( 奇数或偶数) 来设定为“0”或“1”如一个 RTU 数据帧中 8 位数据位为:1100 0101在该帧中,值为“1”的总位数为 4,即偶数。如采用奇校验方式时,则 “1”的总位数为奇数,即 5。发送信息时,计算奇偶位,并加到数据帧中,接收设备统计位值为“1”的数量,若与该设备要求的不一致时产生一个错误。在 Modbus 总线上的所有设备必须采用相同的
22、奇偶校验方式。注意:奇偶校验只能检测到数据帧在传输过程中丢失奇数“位”时才产生的错误。如采用奇数校验方式时,一个包含3 个“1”位的数据丢失 2 个“1”位时,其结果仍然是奇数。若无奇偶校验方式时,传输中不作实际的校验,应附加一个停止位。LRC 校验ASCII 方式时,数据中包含错误校验码,采用 LRC 校验方法时,LRC 校验信息以冒号“: ”开始,以 CRLF 字符作为结束。它忽略了单个字符数据的奇偶校验的方法。LRC 校验码为 1 个字节,8 位二进制值,由发送设备计算 LRC 值。接收设备在接收信息时计算 LRC 校验码。并与收到的 LRC 的实际值进行比较,若二者不一致,亦产生一个错
23、误。在梯形图中,CKSM 函数可计算数据信息中 LRC 的校验。用于主计算机时请查阅附录 C 中的一个实例,它详细说明LRC 的校验的过程。错误校验方法CRC 校验RTU 方式时,采用 CRC 方法计算错误校验码, CRC 校验传送的全部数据。它忽略信息中单个字符数据的奇偶校验方法。CRC 码为 2 个字节, 16 位的二进制值。由发送设备计算 CRC 值,并把它附到信息中去。接收设备在接收信息过程中再次计算 CRC 值并与 CRC 的实际值进行比较,若二者不一致,亦产生一个错误,校验开始时,把 16 位寄存器的各位都置为“1” ,然后把信息中的相邻 2 个 8 位字节数据放到当前寄存器中处理
24、,只有每个字符的 8 位数据用于 CRC 处理。起始位,停止位和校验位不参与 CRC 计算。CRC 校验时,每个 8 位数据与该寄存器的内容进行异或运算,然后向最低有效位(LSB)方向移位,用零填入最高有效位(MSB)后,再对 LSB 检查,若 LSB=1,则寄存器与预置的固定值异或,若 LSB=0,不作异或运算。重复上述处理过程,直至移位 8 次,最后一次(第 8 次) 移位后,下一个 8 位字节数据与寄存器的当前值异或,再重复上述过程。全部处理完信息中的数据字节后,最终得到的寄存器值为 CRC 值。CRC 值附加到信息时,低位在先,高位在后。在梯形图中,CKSM 函数计算信息中的 CRC
25、值。用于主计算机时,可查阅附录 C 中的一个实例,它详细说明了 CRC 的校验。第二章数据和控制功能PI-MBUS-300 Modbus Protocol 9 Modbus 功能代码格式 Modbus 功能代码总结 Modbus 功能代码说明Modbus Protocol PI-MBUS-30010功能代码格式数字值表达若无特殊说明在此节文中用进制值表示,图中的数据区则用十六进制表示。Modbus 信息中的数据地址Modbus 信息中的所有数据地址以零作为基准,各项数据的第一个数据地址的编号为 0 如: 在可编程控制器中“coil 1”在 Modbus 信息中其地址值表示为 0000 Coil
26、 127(十进制)在 Modbus 信息中则为 007EH(126 十进制) 保持寄存器 40001,在信息中数据地址为寄存器 0000。功能代码区为保持寄存器类型规定的操作,因此, “4XXXX”是缺省的地址类型。 保持寄存器 40108 寻址寄存器地址为 006B hex(进制 107)Modbus 信息中区内容图 7 为一个例子,说明了 Modbus 的查询信息,图 8 为正常响应的例子,这两例子中的数据均是 16 进制的,也表示了以 ASCLL 或 RTU 方式构成数据帧的方法。主机查询是读保持寄存器,被请求的从机地址是 06,读取的数据来自地址从40108 至 40110 3 个保持
27、寄有器。注意,该信息规定了寄存器的起始地址为 0107 (006BH)。从机响应返回该功能代码,说明是正常响应,字节数“Byle count”中说明有多少个 8 位字节被返回。因无论是 ASCII方式还是 RTU 方式,它表明了附在数据区中 8 位字节的数量。ASCII 方式时,字节数为数据中 ASCII 字符实际数的一半,每 4 个位的 16 进制值需要一个 ASCII 字符表示,因此在数据中应由 2 个 ASCII 字符来表示一个 8 位的字节。如 RTU 方式时,63H 用一个字节(01100011)发送,而用 ASCII 方式时,发送需 2 个字节,即 ASCII“6”(0110110
28、)和ASCII“3”(0110011)。8 个位为一个单位计算“字节数” ,它忽略了信息帧用(ASCII 或 RTU)组成的方法。字节数使用方法:当在缓冲区组织响应信息时, “字节数”区域中的值应与该信息中数据区的字节数相等。QUERYField NameHeaderSlave AddressFunctionStarting Address HiStarting Address LoNo. of Registers HiNo. of Registers LoError CheckTrailerExample(Hex)0603006B0003Total Bytes:ASCIICharacters
29、:(colon)0603006B0003LRC (2 chars.)CR LF17RTU8-Bit FieldNone0000 01100000 00110000 00000110 10110000 00000000 0011CRC (16 bits)None8图 8 说明“字节数”区在一个贡型响应中的应用。RESPONSEField NameHeaderSlave AddressFunctionByte CountData HiData LoData HiData LoData HiData LoError CheckTrailerExample(Hex)060306022B00000063
30、Total Bytes:ASCIICharacters:(colon)0 60 30 60 22 B0 00 00 06 3LRC (2 chars.)CR LF23RTU8-Bit FieldNone0000 01100000 00110000 01100000 00100010 10110000 00000000 00000000 00000110 0011CRC (16 bits)None11图 8:从机采用 ASCII/RTU 方式响应PI-MBUS-300 Modbus Protocol 11前 导 工 作 标 记 广 播 地 址 MAC/LC 区 CR 结 束 标 志 HDLC级
31、MAC级 : 目 的 地 址 原 地 址 MAC功 能 字 节 数 LC 区 LC 级 : 输 出 路 由 路 由 器 传 送 次 序 路 由 MODBUS 信 息 帧 计 数 器 从 机 地 址 功 能 代 码 高 位 起 始 低 位 起 始 高 位 寄 低 位 寄 地 址 地 址 存 器 数 量 存 器 数 量 MODBUS信 息 : Modbus+数据内容在 Modbus+网络发送的 Modbus 信息应需嵌入到 LLC (逻辑连接控制) 级数据帧,Modbus 信息区由 8 位字节的数据组成,类似于 RTU 中的信息组成。由发送设备把从机地址转换成 Modbus+路由地址,CRC 数据
32、不在 Modbus 信息中发送,因为会在更高级的数据链路控制层(HDLC)中进行 CRC 校验。其余的信息与原标准格式一致,应用软件(控制器中的 MSTR 或主机中的 Modcom III)可将这些信息帧组成数据包。图 9 示例说明了如何将读寄存器值的请求嵌入到Modbus 网络的数据帧中。图 9:Modbus+数据内容控制器支持的功能代码下表列出 Modicon 控制器支持的功能代码:以十进制表示。“Y”表示支持“N”表示不支持。代码 名称 384 484 584 884 M8498401 读线圈状态 Y Y Y Y Y Y 02 读输入状态 Y Y Y Y Y Y03 读线保持寄存器 Y
33、Y Y Y Y Y04 读输入寄存器 Y Y Y Y Y Y05 强制单个线圈 Y Y Y Y Y Y06 预置单个寄存器 Y Y Y Y Y Y07 读不正常状态 Y Y Y Y Y Y 08 诊断(见第 3 章)09 程序 484 N Y N N N N 10 查询 484 N Y N N N N 11 通讯事件控制 Y N Y N N Y 12 通讯事件记录 Y N Y N N Y 13 程序控制器 Y N Y N N Y 14 查询控制器 Y N Y N N Y 15 强制多个寄存器 Y Y Y Y Y Y 16 预置多个寄存器 Y Y Y Y Y Y 17 报告从机 ID Y Y Y
34、 Y Y Y 18 程序 884/M84 N N N Y Y N Modbus Protocol PI-MBUS-3001219 通讯链路复位 N N N Y Y N 20 读通用参考值 N N Y N N Y 21 写通用参考值 N N Y N N Y 22 Mask Write 4X Register N N N N N (1)23 Read/Write 4X Registers N N N N N (1)24 Read FIFO 队列 N N N N N (1)(1)功能代码仅由 984-785 控制器支持01 读线圈状态描述读从机离散量输出口的 ON/OFF 状态,不支持广播。附录 B
35、 列出由不同控制器型号支持最大的参数清单。查询查询信息规定了要读的起始线圈和线圈量,线圈的起始地址为零,1-16 个线圈的寻址地址分为 0-15。例:请求从机设备 17 读 20-56 线圈。QUERYField NameSlave AddressFunctionStarting Address HiStarting Address LoNo. of Points HiNo. of Roints LoError Check (LRC or CRC)Example(Hex)110100130025图 10: 读线圈状态查询响应响应信息中的各线圈的状态与数据区的每一位的值相对应,1=ON; 0=O
36、FF。第一个数据字节的 LSB 为查询中的寻址地址,其他的线圈按顺序在该字节中由低位向高位排列,直至8 个为止,下一个字节也是从低位向高位排例。若返回的线圈数不是 8 的倍数,则在最后的数据字节中的剩余位至字节的最高位全部填零,字节数区说明全部数据的字节数。RESPONSEField NameSlave AddressFunctionByte CountData (Coils 27-20)Data (Coils 35-28)Data (Coils 43-36)Data (Coils 51-44)Data (Coils 56-52)Error Check (LRC or CRC)Example(
37、Hex)110105CD6BB20E1B图 11: 读线圈状态响应线圈 27-20 的状态用 CDH 表示,二进制值为 11001101,该字节的 MCB 为线圈 27,LSB 为 20。线圈从左(27)向右 (20)状态分别为 ON-ON-OFF-OFF-ON-ON-OFF-ON,因此第一个字节中的线圈从左到右应是 27-20。下一个字节的线圈应为 35至 28。位数据串行转输从低位到高位,即 2027,2835。最后一个数据字节中,56-52 线圈的状态为 1BH(或二进制 00011011),线圈 56 是左数第 4 位,线圈 52 是该字节的最低位,所线圈 56 至 52 的状态分别为
38、 ON-ON-OFF-ON-ON 注意 3 个剩余位(至最高位的数) 全部填 0。PI-MBUS-300 Modbus Protocol 1302 读输入位状态说明读从机离散量输入信号的 ON/OFF 状态。不支持广播。附录 B 列出各种型号控制器所支持的最大参数量。查询查询信息规定了要读的输入起始地址,以及输入信号的数量。输入起始地址为 0,1-16 个输入口的地址分别为 0-15。例:请求读从机设备 17 的 10197-10218 的输入位状态。QUERYField NameSlave AddressFunctionStarting Address HiStarting Address
39、LoNo. of Points HiNo. of Roints LoError Check (LRC or CRC)Example(Hex)110200C40016图 12: 读输入位状态查询。响应响应信息中的各输入口的状态,分别对应于数据区中的每一位值,1 = ON; 0 = OFF,第一个数据字节的 LSB 为查询中的寻址地址,其他输入口按顺序在该字节中由低位向高位排列,直至 8 个位为止。下一个字节中的 8 个输入位也是从低位到高位排列。若返回的输入位数不是 8 的倍数,则在最后的数据字节中的剩余位直至字节的最高位全部填零。字节的最高位,字节数区。说明了全部数据的字节数。例:对查询作出响
40、应(参见上页 )。RESPONSEField NameSlave AddressFunctionByte CountData (Inputs 10204-10197)Data (Inputs 10212-10205)Data (Inputs 10218-10213)Error Check (LRC or CRC)Example(Hex)110203ACDB35图 13:读输入位状态响应。输入位 10204-10197 的状态用 35H (或二进制 00110101) 表示。输入位 10218 为左数第 3 位,10213 输入位为 LSB,输入位 10218-10213 的状态分别为 ON-O
41、N-OFF-ON-OFF-ON,注意最位还有 2 个剩余位需填零。Modbus Protocol PI-MBUS-3001403 读保持寄存器说明读从机保持寄存器的二进制数据不支持广播,附录 B 列出了由各种型号控制器所支持的最大的参数量查询查询信息规定了要读的寄存器起始地址及寄存器的数量,寄存器寻址起始地址为 0000,寄存器 1-16 所对应的地址分别为 0-15QUERYField NameSlave AddressFunctionStarting Address HiStarting Address LoNo. of Points HiNo. of Roints LoError Che
42、ck (LRC or CRC)Example(Hex)1103006B0003图 14:读保持寄存器-查询响应响应信息中的寄存器数据为二进制数据,每个寄存器分别对应 2 个字节,第一个字节为高位值数据,第二个字节为低位数据。对 984-X8X 型控制器( 如 984-685 等),扫描数据的速率为每次 125 个寄存器。对其它控制器型号的扫描速率为每次 32个寄存器,全部数据完成组合后返回响应信息。例按查询要求返回响应。RESPONSEField NameSlave AddressFunctionByte CountData Hi (Register 40108)Data Lo(Registe
43、r 40108)Data Hi(Register 40109)Data Lo(Register 40109)Data Hi(Register 40110)Data Lo(Register 40110)Error Check (LRC or CRC)Example(Hex)110306022B00000064图 15:读寄存器-响应寄存器 40108 的数据用 022BH 2 个字节(或用十进制 555)表示,寄存器 40109-40110 中的数据为 0000 和 0064H,(十进制时为 0 和 100)04 读输入寄存器说明读从机输入寄存器(3X 类型) 中的二进制数据,不支持广播附录 B
44、 列出了由各种型号控制器所支持的最大的参数量查询查询信息规定了要读的寄存器的起始地址及寄存器的数量,寻止起始地址为 0,寄存器 1-16 所对应的地址分别为 0-15。例:请求读从机设备 17 中的 30009 寄存器。PI-MBUS-300 Modbus Protocol 15QUERYField NameSlave AddressFunctionStarting Address HiStarting Address LoNo. of Points HiNo. of Roints LoError Check (LRC or CRC)Example(Hex)110400080001图 16:读
45、输入寄存器-查询响应响应信息中的寄存器数据为每个寄存器分别对应 2 个字节,第一个字节为高位数据,第二个字节为低位数据。对 984-X8X 型控制器( 如 984-685 等),扫描数据的速率为每次 125 个寄存器,对其它型号的控制器为每次 32 个寄存器。数据完成组合后,返回响应信息。例按查询要求返回响应RESPONSEField NameSlave AddressFunctionByte CountData Hi(Register 30009)Data Lo(Register 30009)Error Check (LRC or CRC)Example(Hex)110402000A图 17
46、:读寄存器-响应寄存器 30009 中的数据用 000AH 2 个字节(或用十进制 10)表示Modbus Protocol PI-MBUS-3001605 强制单个线圈说明强制单个线圈(0X 类型) 为 ON 或 OFF 状态。广播时,该功能可强制所有从机中同一类型的线圈均为 ON 或 OFF 状态。 注意:该功能可越过控制器内存的保护状态和线圈的禁止状态。线圈强制状态一直保持有效直至下一个控制逻辑作用于线圈为止。控制逻辑中无线圈程序时,则线圈处于强制状态。附录 B 中列出了由各种型号控制器所支持的最大的参数量。查询查询信息规定了需要强制线圈的类型,线圈起始地址为 0,线圈 1 的寻址地址为
47、 0由查询数据区中的一个常量。规定被请求线圈的 ON/OFF 状态, FF00H 值请求线圈处于 ON 状态,0000H 值请求线圈处于 OFF 状态,其它值对线圈无效,不起作用。例:强制从机设备 17 中的 173 线圈为 ON 状态QUERYField NameSlave AddressFunctionCoil Address HiCoil Address LoForce Data HiForce Data LoError Check (LRC or CRC)Example(Hex)110500ACFF00图 18:强制单个线圈-查询响应线圈为强制状态后即返回正常响应例:按查询要求返回响应
48、RESPONSEField NameSlave AddressFunctionCoil Address HiCoil Address LoForce Data HiForce Data LoError Check (LRC or CRC)Example(Hex)110500ACFF00图 19:强制单个线圈PI-MBUS-300 Modbus Protocol 1706 预置单个寄存器说明把一个值预置到一个 4X 类型保持寄存器中。广播时,该功能把值预置到所有从机的相同类型的寄存器中。 注意: 该功能可越过控制器的内存保护。使寄存器中的预置值保持有效。只能由控制器的下一个逻辑信号来处理该预置值
49、。若控制逻辑中无寄存器程序时,则寄存器中的值保持不变。附录 B 中列出了各种型号控制器所支持的最大的参数量查询查询信息规定了要预置寄存器的类型,寄存器寻址起始地址为 0,寄存器 1 所对应的地址为 0。请求的预置值在查询数据区,M84 或 484 控制器使用一个 10 位二进制值,其中高 6 位设定为 0,而其它类型的控制器使用 16 位值。例:请求把从机设备 17 中的 40002 寄存器预置为 0003H 值。QUERYField NameSlave AddressFunctionRegister Address HiRegister Address LoPreset Data HiPreset Data LoError Check (LRC or CRC)Example(Hex)110600010003图 20:预置单个寄存器-查询响应寄存器内容被预置后返回正常响应例:按查询要求返回响应RESPONSEField NameSlave AddressFunctionRegister Address HiRegister Address LoPreset Data Hi