




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、串行链路和tcp/ip上的modbus标准介绍该标准包括两个通信规程中使用的modbus应用层协议和服务规范:串行链路上的modbusmodbus串行链路取决于tta/eta标准:232-f和485-a。 tcp/ip 上的 modbusmodbus tcp/1p 取决于 ietf 标准:rec793 和 rfc791 有关。串行链路和tcp/ip上的modbus是根据相应iso层模型说明的两个通信规程。卜图强调指岀了 该标准的主要部分。绿色方松表示规范。灰色方框表示已有的国际标准(t1a/eia和ietf标准)。tcpietf rfc 793modbus 报文f 传输在tcp/ip 上的实现
2、指南modbus报文 传输在串行链路 上的实现指南 45页厂ripietf rfc 791串行链路主站/从站以太网ii/802.3ieee 802.2tiaia-232-f tia/eia-485-a 以太网物理层modbus标准分为三部分。第一部分(“modbus协议规范”)描述/ modbus事物处理。第二部分("modbus报文传输在tcp/ip ±的实现指南”)提供了一个有助于开发者实现tcp/ip上的modbus 应用层的参考信息。第三部分(“modbus报文传输在串行链路上的实现指南”)提供了一个冇助于开 发者实现串行链路上的modbus应用层的参考信息。第一部
3、分:modbus协议第一部分:modbus协议1引言1. 1范围modbus是ost模型笫7层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。h从1979年出现工业串行链路的事实标准以來,modbus使成千上万的h动化设备能够通信。fi前,继续增加对简单而雅观的modbus结构支持。互联网组织能够使tcp/ip栈上的保留系统端口502 访问 modbus omodbus是一个请求/应答协议,并1l提供功能码规定的服务。modbus功能码是modbus请求/应答pdu的元素。本文件的作用是描述modbus事务处理框架内使用的功能码。1.2规范性引用文件1.
4、rfc791,互联网协议,sep81 darpa2. modbus 协议参考指南 rev j, modtcon, 1996 年 6 月,doc#pi_mbus_300modbus是一项应用层报文传输协议,用丁在通过不同类型的总线或网络连接的设备z间的客户机/服务器通信。目询,使用下列情况实现modbus:以太网上的tcp/ipo各种媒体(冇线:eta/tta-232-e. eia-422、eia/tia-485-a;光纤、无线等等)上的异步串行传输。modbus plus, 一种高速令牌传递网络。图1: modbus通信栈2缩略语adu应用数据单元hdlc高级数据链路控制hmt人机界面tetf
5、因特网t程工作组1/0输入/输出设备1p互连网协议mac介质访问控制mbmodbus协议mbapmodbus协议pdu协议数据单元plc可编程逻辑控制器tcp传输控制协议3背景概要modbus协议允许在各种网络体系结构内进行简单通信。modbus通信图2: modbus网络体系结构的实例每种设备(plc、hmi、控制面板、驱动程序、动作控制、输入/输出设备)都能使用modbus协 议來启动远程操作。在基于串行链路和以太tcp/ip网络的modbus上可以进行相同通信。一些网关允许在几种使用modbus协议的总线或网络之间进行通信。4总体描述4.1协议描述modbus协议定义了一个与基础通信层无
6、关的简单协议数据单元(pdu)。特定总线或网络上的 modbus协议映射能够在应用数据单元(adu)上引入一些附加域。adu地址域功能码数据差错校验pdu图3:通用modbus帧启动modbus事务处理的客户机创建modbus应用数据单元。功能码向服务器指示将执行哪种操 作。modbus协议建立了客户机启动的请求格式。用一个字节编码modbus数据单元的功能码域。有效的码字范围是i 进制1-255 (128-255为异 常响应保超)。当从客户机向服务器设备发送报文时,功能码域通知服务器执行哪种操作。向一些功能码加入子功能码来沱义多项操作。从客户机向服务器设备发送的报文数据域包括附加信息,服务器
7、使用这个信息执行功能码定义 的操作。这个域还包括离散项h和寄存器地址、处理的项h数量以及域屮的实际数据字节数。在某种谙求小,数据域可以是不存在的(0长度),在此情况下服务器不需要任何附加信息。功 能码仅说明操作。如果在一个正确接收的modbus adu中,不出现与请求modbus功能冇关的差错,那么服务器至 客户机的响应数据域包括请求数据。如果出现与请求modbus功能冇关的差错,那么域包括一个异常 码,服务器应用能够使用这个域确定下一个执行的操作。例如,客户机能够读一组离散量输出或输入的开/关状态,或者客户机能够读/写一组寄存器的 数据内容。当服务器对客户机响应时,它使用功能码域来指示止常(
8、无差错)响应或者出现某种差错(称 为异常响应)。对于一个正常响应來说,服务器仅对原始功能码响应。图4: modbus事务处理(无差错)对于异常响应,服务器返冋一个与原始功能码等同的码,设置该原始功能码的最高冇效位为逻 辑1。图5 modbus事务处理(显常响应)注释:需耍管理超时,以便明确地等待可能不会出现的应答。串行链路上笫一个modbus执行的长度约束限制了 modbus pdu人小(最人rs485adu=256字节)。因此,对串行链路通信来说,modbus pdu=256-服务器地址(1字节)-crc (2字节)=253字 节。从而:rs232 / rs485 adu = 253 字节+
9、服务器地址(1 byte) + crc (2 字节)二 256 字节。tcp modbus adu = 249 字节 + mbap (7 字节)=256 字节。modbus协议定义了三种pdu。它们是: modbus 请求 pdu, mb_req_pdu modbus 响应 pdu, mb rsp_pdu modbus 异常响应 pdu, mb_excep_rsp_pdu定义 mb_req_pdu 为:mb req pdu = funct ion_code, request_dataj , 其中lunetion code - 1 个字节modbus 功能码request_data - n个字节
10、,这个域与功能码有关,并冃通常包括诸如可变参考、变量、数据 偏移量、子功能码等信息。雄义 mb_rsp_pdu 为:mb_rsp_pdu = function_code, response_ data,其中function code - 1 个字节modbus 功能码response.data - n个字节,这个域与功能码有关,并且通常包括诸如可变参考、变量、数 据偏移量、子功能码等信息。定 义 mb_excep_rsp_pdu 为:mb_excep_rsp_pdu = function_code, request_data,其中function code - 1 个字节modbus 功能码
11、+ 0x80except ion code - 1个字节,在下表中定义t modbus异常码。4.2数据编码 modbus使用一个'big-endian'表示地址和数据项。这意味着当发对多个字节时,首先 发送最高有效位。例如:寄存器大小值16 -比特0x1234发送的第一字节为0x12 然后0x34注释:更详细的信息参见1。4.3 modbus数据模型modbus以一系列具有不同特征表格上的数据模型为基础。四个基本表格为:基本表格对象类型访问类型内容离散量输入单个比特只读1/0系统提供这种类型数据线圈单个比特读写通过应用程序改变这种类型数据输入寄存器16-比特字只读i/o系统提
12、供这种类型数据保持寄存器16-比特字读写通过应用程序改变这种类型数据输入与输出乙间以及比特寻址的和字寻址的数据项z间的区别并没有暗示任何应用操作。如果 这是对可疑对象核心部分最自然的解释,那么这种区别是可完全接受的,而月很普通,以便认为四 个表格全部覆盖了另外一个表格。对丁基木表格中任何一项,协议都允许单个地选择65536个数据项,而11设计那些项的读写操 作町以越过多个连续数据项貞到数据大小规格限制,这个数据大小规格限制与事务处理功能码冇关。很显然,必须将通过modbus处理的所冇数据放置在设备应用存储器中。但是,存储器的物理地 址不应该与数据参考混淆。要求仅仅是数据参考与物理地址的链接。m
13、odbus功能码中使用的modbus逻辑参考数字是以0开始的无符号整数索引。 modbus模型实现的实例下例实例示出了两种在设备中构造数据的方法。可能有不同的结构,这个文件中没有全部描述 出來。每个设备根据其应用祁有它自己的数据结构。实例1:有4个独立块的设备下例实例示出了设备屮的数据结构,这个设备含冇数字量和模拟量、输入量和输出量。由于不 同块中的数据不相关,每个块是相互独立。按不同modbus功能码访问每个块。设备应用存储器modbus访问输入离散呈线圈输入寄存器保存寄存器modbus请求modbus服务器设备图6:带有独立块的modbus数据模型实例2:仅有1个块的设备在这个实例中,设备
14、仅有1个数据块。通过儿个modbus功能码可能得到一个相同数据,或者通 过16比特访问或1个访问比特。设备应用存储器modbus访问modbus服务器设备modbus请求图7:仅带有1个块的modbcs数据模型4.4 modbus事务处理的定义卜列状态图描述了在服务器侧modbus事务处理的一般处理过程。图8: modbus事务处理的状态图一旦服务器处理请求,使用合适的modbus服务器事务建立modbus响应。根据处理结果,可以建立两种类型响应: 一个正modbus响应:响应功能码二请求功能码 个modbus异常响应(参见第6. 14节):用来为客户机提供处理过程中与被发现的差错相关的信息;
15、 响应功能码二请求功能码+ 0x80;提供一个异常码來指示差错原因。5功能码分类有三类modbus功能码。它们是:公共功能码 定较好地被定义的功能码, 保证是唯一的, modbus组织可改变的, 公开证明的, 具有可用的一致性测试, mb ietf rfc中证明的, 包含已被定义的公共指配功能码和未來使用的未指配保阳供功能码。用户定义功能码 冇两个用户定义功能码的立义范围,即65至72和十进制100至110。 用户没有modbus组织的任何批准就可以选择和实现一个功能码 不能保证被选功能码的使用是唯一的。以便将改变引入 如果用户要重新设置功能作为一个公共功能码,那么用户必须启动rfc, 公共分
16、类中,并1l指配一个新的公共功能码。保留功能码 一些公司对传统产品通常使用的功能码,并且对公共使用是无效的功能码12711010072651公共功能码用户定义功能码公共功能码川户定义功能码公共功能码图9: modbus功能码分类5.1公共功能码定义功能码码子码(十六进制)页数据 访 问比特访问物理离散量输入读输入离散量020211内部比特或物理线圈读线圈010110写单个线圈050516写多个线圈150f3716比特访问输入存储器读输入寄存器040414内部存储器或物理输岀存储器读多个寄存器030313写单个寄存器060617写多个寄存器161039读/写多个寄存器231747屏蔽写寄存器22
17、1646文件记录访问读文件记录2061442写文件记录2161544封装接口读设备识别码43142b6功能码描述6. 1 01 (0x01)读线圈在一个远程设备小,使用该功能码读取线圈的1至2000连续状态。请求pdu详细说明了起始地 址,即指定的第一个线圈地址和线圈编号。从零开始寻址线圈。因此寻址线圈1-16为0-15。根据数据域的每个比特将响应报文中的线圈分成为一个线圈。指示状态为1= 0n和0二off。第 一个数据字节的lsb (最低有效位)包括在询问中寻址的输出。其它线圈依次类推,一直到这个字 节的高位端为止,并在后续字节中从低位到高位的顺序。如果返回的输出数量不是八的倍数,将用零填充
18、最后数据字节中的剩余比特(一直到字节的高 位端)。字节数量域说明了数据的完整字节数。请求pdu功能码1个字节0x01起始地址2个字节0x0000 至 oxffff线圈数量2个字节1 至 2000 (0x7d0)响应pdu功能码1个字节0x01字节数1个字节n*线圈状态n个字节n=n 或 n+1*n=输出数量/8,如果余数不等于0,那么n二n+1错误功能码1个字节功能码+0x80异常码1个字节01或02或03或04这是一个请求读离散量输出20-38的实例:请求响应域名(十六进制)域名(十六进制)功能01功能01起始地址hi00字节数03起始地址lo13输出状态27-20cd输出数量hi00输出状
19、态35-286b输出数量lo13输出状态38-3605将输岀27-20的状态表示为十六进制字节值cd,或二进制1100 llolo输出27是这个字节的 msb,输岀 20 是 lsb。通常,将一个字节内的比特表示为msb位于左侧,lsb位于右侧。第一字节的输出从左至右为 27至20。下一个字节的输出从左到右为35至28。当串行发射比特时,从lsb向msb传输:20 . 27、2835等等。在最后的数据字节中,将输出状态38-36表示为十六进制字节值05,或二进制0000 0101。输 出38是左侧第六个比特位置,输出36是这个字节的lsb。用零填充五个剩余高位比特。肯 注:用零填充五个剩余比特
20、(一直到高位端)。图10:读取线圈状态图6.2 02 (0x02)读离散量输入在一个远程设备屮,使用该功能码读取离散量输入的1至2000连续状态。请求pdu详细说明了 起始地址,即指定的第一个输入地址和输入编号。从零开始寻址输入。因此寻址输入1-16为0-15。根据数据域的每个比特将响应报文屮的离散量输入分成为一个输入。指示状态为1= on和0= off。第一个数据字节的lsb (最低冇效位)包括在询问中寻址的输入。其它输入依次类推,一貞到 这个字节的高位端为止,并在后续字节中从低位到高位的顺序。如果返回的输入数量不是八的倍数,将用零填充最后数据字节屮的剩余比特(一直到字节的高 位端)。字节数
21、量域说明了数据的完整字节数。请求pdu功能码1个字节0x02起始地址2个字节0x0000 至 oxffff输入数量2个字节1 至 2000 (0x700)响应pdu功能码1个字节0x82字节数1个字节n*输入状态n*x1个字节*n=输出数量/8,如果余数不等于0,那么n = n+1错误差错码1字节0x82异常码1字节01或02或03或04这是一个请求读取离散量输入197-218的实例:请求响应域名(十六进制)域名(十六进制)功能02功能02起始地址hi00字节数03起始地址loc4输入状态204-197ac输出数量hi00输入状态212-205db输出数量lo16输入状态218-21335将离
22、散量输入状态204-197表示为十六进制字节值ac,或二进制1010 1100。输入204是这个 字节的msb,输入197是这个字节的lsbo将离散量输入状态218-213表示为十六进制字节值35,或二进制0011 0101。输入218位于左 侧第3比特,输入213是lsb。注:用零填充2个剩余比特(一直到高位端)。图11:读离散量输入的状态图6.3 03 (0x03)读保持寄存器在一个远程设备中,使用该功能码读取保持寄存器连续块的内容。请求pdu说明了起始寄存器 地址和寄存器数量。从零开始寻址寄存器。因此,寻址寄存器1-16为0-15。将响应报文屮的寄存器数据分成每个寄存器有两字节,在每个字
23、节屮直接地调整二进制内容。対于每个寄存器,第一个字节包括高位比特,并且第二个字节包括低位比特。请求功能码1个字节0x03起始地址2个字节0x0000 至 oxffff寄存器数量2个了节1 至 125 (0x7d)响应功能码1个字节0x03字节数1个字节2xn*寄存器值n*x2个字节*n=寄存器的数量错误差错码1个字节0x83异常码1个字节01或02或03或04这是一个请求读寄存器108-110的实例:请求响应域名(十六进制)域名(十六进制)功能03功能03高起始地址00字节数06低起始地址6b寄存器值hi (108)02高寄存器编号00寄存器值lo (108)2b低寄存器编号03寄存器值hi
24、(109)00寄存器值lo (109)00寄存器值hi (110)00寄存器值lo (110)64将寄存器108的内容表示为两个十六进制字节值02 2b,或| 进制555o将寄存器109-110的内 容分別表示为十六进制00 00和00 64,或十进制0和100o图12:读保持寄存器的状态图6.4 04(0x04)读输入寄存器在一个远程设备屮,使用该功能码读取1至人约125的连续输入寄存器。请求pdu说明了起始 地址和寄存器数量。从零开始寻址寄存器。因此,寻址输入寄存器卜16为0-15。将响应报文中的寄存器数据分成总个寄存器为两字节,在每个字节中宜接地调整二进制内容。对于每个寄存器,第一个字节
25、包括高位比特,并且笫二个字节包括低位比特。请求功能码1个字节0x04起始地址2个字节0x0000 至 oxffff输入寄存器数量2个字节0x0001 至 0x007d响应功能码1个字节0x04字节数1个字节2xn*输入寄存器n*x2个字节*n=输入寄存器的数量错误差错码1个字节0x84异常码1个字节01或02或03或04这是一个请求读输入寄存器9的实例:请求响应域名(十六进制)域名(十六进制)功能04功能04起始地址hi00字节数02起始地址lo08输入寄存器9 hi00输入寄存器数量hi00输入寄存器9 lo0a输入寄存器数量lo01将输入寄存器9的内容表示为两个十六进制字节值00 0a,或
26、| 进制10。图13:读输入寄存器的状态图6.5 05 (0x05)写单个线圈在一个远程设备上,使川该功能码写单个输出为0n或off。请求数据域屮的常量说明请求的on/off状态。十六进制值ff 00请求输出为0n。十六进制值 00 00请求输岀为off。其它所有值均是非法的,并月对输出不起作用。请求pdu说明了强制的线圈地址。从零开始寻址线圈。因此,寻址线圈1为0。线圈值域的常 量说明请求的on/off状态。十六进制值oxffoo请求线圈为()0十六进制值0x0000请求线圈为off。 其它所有值均为非法的,并且对线圈不起作用。正常响应是请求的应答,在写入线圈状态z后返冋这个正常响应。请求功
27、能码1个字节0x05输出地址2个字节0x0000 至 oxffff输出值2个字节0x0000 至 0x00响应功能码1个字节0x05输出地址2个字节0x0000 至 oxffff输出值2个字节0x0000 至 oxffoo错误差错码1个字节0x85异常码1个字节01或02或03或04这是一个请求写线圈173为on的实例:请求响应域名(十六进制)域名(十六进制)功能05功能05输出地址hi00输出地址hi00输出地址loac输出地址loac输出值hiff输出值hiff输出值lo00输出值lo00图14:写单个输出状态图6.6 06 (0x06)写单个寄存器在一个远程设备中,使用该功能码写单个保持
28、寄存器。请求pdu说明了被写入寄存器的地址。从零开始寻址寄存器。因此,寻址寄存器1为0。正常响应是请求的应答,在写入寄存器内容之后返回这个正常响应。请求功能码1个字节0x06寄存器地址2个字节0x0000 至 oxffff寄存器值2个字节0x0000 至 oxffff响应功能码1个字节0x06寄存器地址2个字节0x0000 至 oxffff寄存器值2个字节0x0000 至 oxffff错误差错码1个字节0x86异常码1个字节01或02或03或04这是一个请求将十六进制00 03场入寄存器2的实例:请求响应域名(1 六进制)域名(十六进制)功能06功能06寄存器地址hi00输出地址hi00寄存器
29、地址lo01输出地址lo01寄存器值hi00输出值hi00寄存器值lo03输出值lo03图15:写单个寄存器状态图6.7 15 (oxof)写多个线圈在一个远程设备屮,使用该功能码强制线圈序列屮的每个线圈为on或off。请求pdu说明了强 制的线圈参考。从零开始寻址线圈。因此,寻址线圈1为0。请求数据域的内容说明了被请求的on/off状态。域比特位置中的逻辑“1”请求相应输出为0n。 域比特位置屮的逻辑“0”请求相应输出为off。止常响应返回功能码、起始地址和强制的线圈数量。请求pdu功能码1个字节oxof起始地址2个字节0x0000 至 oxffff输出数量2个字节0x0001 至 0x07
30、b0字节数1个字节n*输出值n*x1个字节*n=输出数量/8,如果余数不等丁0,那么n = n+1响应pdu功能码1个字节oxof起始地址2个字节0x0000 至 oxffff输出数量2个字节0x0001 至 0x07b0错误差错码1个字节0x8f异常码1个丫节01或02或03或04这是一个请求从线圈20开始写入10个线圈的实例:请求的数据内容为两个字节:十六进制cd 01 (二进制1100 1101 0000 0001) o使用下列方法,gb/t x xxx xxx x 二进制比特对应输岀。比特:1100110100000001输出:27 26 25 24 23 22 21 20-29 28
31、传输的第一字节(十六进制cd)寻址为输出27-20,在这种设宣小,最低有效比特寻址为最低输 出(20)o传输的下一字节(十六进制01)寻址为输出29-28,在这种设宣小,最低有效比特寻址为最低输出(28)o应该用零填充最后数据字节中的未使用比特。请求响应域名(十六进制)域名(十六进制)功能0f功能0f起始地址hi00起始地址hi00起始地址lo13起始地址lo13输出数量hi00输出数量hi00输出数量lo0a输出数量lo0a字节数02输出值hicd输出值i,o01图16:写多个输出的状态图6.8 16 (0x10)写多个寄存器在一个远程设备中,使用该功能码写连续寄存器块(1至约120个寄存器
32、)o 在请求数据域屮说明了请求写入的值。每个寄存器将数据分成两字节。止常响应返回功能码、起始地址和被写入寄存器的数量。请求pdu功能码1个字节0x10起始地址2个字节0x0000 至 oxffff寄存器数量2个字节0x0001 至 0x0078字节数1个字节2xn*寄存器值n*x2个字节值*n=寄存器数量响应pdu功能码1个字节0x10起始地址2个字节0x0000 至 oxffff寄存器数量2个字节1 至 123 (0x7b)错误差错码1个字节0x90异常码1个字节01或02或03或04这是一个请求将十六进制00 0a和01 02写入以2开始的两个寄存器的实例:请求响应域名(十六进制)域名(十
33、六进制)功能10功能10起始地址hi00起始地址hi00起始地址lo01起始地址lo01寄存器数量hi00寄存器数量hi00寄存器数量lo02寄存器数量lo02字节数04寄存器值hi00寄存器值lo0a寄存器值hi寄存器值lo0102图17:写多个寄存器状态图6.9 20 (0x14)读文件记录使用该功能码进行文件记录读取。根据字节数量提供所冇请求数据长度,并且根据寄存器提供 所冇记录长度。文件是记录的结构。每个文件包括10000个记录,寻址这些记录为十进制0000至9999或十六 进制0x0000至0x270f,例如寻址记录12为12。该功能可以读取多个参考组。这些组可以是分散的(不连续的)
34、,但每组屮的参考必须是连续的。用含有7个字节的独立“子请求”域定义每个组:参考类型:1个字节(必须规沱为6)文件号:2个字节文件中的起始记录号:2个字节被读出的记录长度:2个字节被读取的寄存器数量不能超过modbl's报文允许的长度:256个字节,这个寄存器数量与预期响 应中的所有其它域组合。正常响应是一系列“子响应”,与“子请求” 一一对应。字节数域是所冇“子响应”中的全部组 合字节数。另外,每个“子响应”都包括一个表示口身字节数的域。请求pdu功能码1个字节0x14字节数1个字节0x07至0xf5字节子请求x,参考类型1个字节06子请求x,文件号2个字节0x0000 至 oxfff
35、f子请求x,记录号2个字节0x0000 至 0x270f子请求x,记录长度2个字节n子请求x+1,响应pdu功能码1个字节0x14响应数据长度1个字节0x07 至 0xf5了请求x,文件响应长度1个字节0x07 至 0xf5子请求x,参考类型1个字节6子请求x,记录数据nx2个字节子请求x+1,错误差错码1个字节0x94异常码1个字节01或02或03或04或08这是一个请求从远程设备读取两个参考组的实例:组1包括文件4屮的2个寄存器,以寄存器1开始(地址0001 )0组2包括文件3小的2个寄存器,以寄存器9开始(地址0009)0请求响应域名(十六进制)域名(十六进制)功能14功能14字节数0c
36、响应数据长度0e子请求1,参考类型06子请求1,文件响应长度05子请求1,文件号hi00子请求1,参考类型06子请求1,文件号lo04子请求1,纪录数据hi0d子请求1,记录号hi00子请求1,纪录数据lofe子请求1,纪录号lo01子请求1,纪录数据hi00了请求1,记录长度hi00子请求1,纪录数据lo20子请求1,纪录长度lo02子请求2,文件响应长度05子请求2,参考类型06子请求2,参考类型06了请求2,文件号hi00子请求2,纪录数据hi33子请求2,文件号lo03子请求2,纪录数据locd了请求2,记录号hi00子请求2,纪录数据hi00子请求2,纪录号lo09子请求2,纪录数据
37、lo40子请求2,记录长度ili00了请求2,纪录长度lo02图18:读文件记录状态图6. 9. 1 21 (0x15)写文件记录使用该功能码进行文件记录写入。根据字节数量提供所有请求数据长度,并且根据16比特字的 数量提供所有记录长度。文件是记录的结构。每个文件包括10000个记录,寻址这些记录为十进制0000至9999或十六 进制0x0000至0x270f,例如寻址记录12为12。该功能可以写多个参考组。这些组可以是分散的,即不连续的,但每组内的参考必须是连续的。用含有7个字节和数据的独立“子请求”域定义每个组:参考类型:1个字节(必须规圧为6)文件号:2个字节文件中的起始记录号:2个字节
38、被写入的记录长度:2个字节被写入的数据:每个寄存器为2字节。被写入的寄存器数量不能超过modbus报文允许的长度:256个字节,这个寄存器数量与询问中 的所有其它域组合。正常响应是请求的应答。请求pdu功能码1个字节0x14请求数据长皮1个字节0x07 至 0xf5了请求x,参考类型1个字节06子请求x,文件号2个字节0x0000 至 oxffff子请求x,记录号2个字节0x0000 至 0x270f了请求x,记录长度2字节n子请求x,记录数据nx2个字节子请求x+1,响应pdu功能码1个字节0x15响应数据长度1个字节子请求x,参考类型1个字节06子请求x,文件号2个字节0x0000 至 o
39、xffff子请求x,记录号2个字节0x0000 至 oxffff子请求x,记录长度2个字节0x0000 至 oxffff n子请求x,记录数据nx2个字节了请求x+1,错误差错码1个字节0x95异常码1个字节01或02或03或04或08这是一个请求将一个参考组写入远程设备的实例:组包括文件4中的3个寄存器,以寄存器7开始(地址0007)o诘求响应域名(1-六进制)域名(十六进制)功能15功能15请求数据长度0d请求数据长度0d子请求1,参考类型06子请求1,参考类型06子请求1,文件号hi00子请求1,文件号hi00子请求1,文件号lo04子请求1,文件号lo04子请求1,记录号hi00子请求
40、1,记录号hi00了请求1,纪录号lo07子请求1,纪录号lo07子请求1,记录长度hi00子请求1,记录长度hi00了请求1,纪录长度lo03子请求1,纪录长度lo03了请求1,记录数据hi06子请求1,记录数据hi06子请求1,记录数据loaf子请求1,记录数据loaf子请求1,记录数据hi04子请求1,记录数据hi04子请求1,记录数据lobe子请求1,记录数据lobe子请求1,记录数据hi10子请求1,记录数据hi10了请求1,寄存器数据lo0d了请求1,寄存器数据lo0d图19:写文件记录状态图6. 10 22 (0x16)屏蔽写寄存器该功能码丿ij于通过利用and屏蔽、or屏蔽以及
41、寄存器内容的组合来修改特定保持寄存器的内容。 使用这个功能设置或清除寄存器中的单个比特。请求说明了被写入的保持寄存器、and屏蔽使用的数据以及or耶蔽便用的数据。从0开始寻址寄存器。因此,寻址寄存器1-16为0-15o功能的算法为:结果二(当前内容 and and_mask) or (or_mask axd and_mask)例如:十六进制二进制当前内容二120001 0010and_mask =f2mi ooioormask =250010 0101and mask =0d0000 1101结果二170001 0111如果0r_mask值为零,那么结果是当前内容和and_mask的简单逻辑a
42、xd(与)。如果and_mask 值为零,结果等于0r_mask值。可以使用读保持寄存器功能(功能码03)读出寄存器的内容。于是,当控制器扫描它的用 户逻辑程序时,随后可以改变寄存器的内容。正常的响应是请求的应答。在已经写入寄存器z后,返回响应。请求pdu功能码1个字节0x16参考地址2个字节0x0000 至 oxffffand mask2个字节0x0000 至 oxffffor_mask2个字节0x0000 至 oxffff响应pdu功能码1个字节0x16参考地址2个字节0x0000 至 oxffffand_mask2个字节0x0000 至 oxffffor_mask2个字节0x0000 至
43、 oxffff错误差错码1个字节0x96异常码1个字节01或02或03或04这是一个利用上述屏蔽值在远程设备小对寄存器5的屏蔽写入实例。请求域名(十六进制)功能16参考地址hi00参考地址lo04andmask hi00and maskf20r_mask hi000r_mask25响应域名(十六进制)功能16参考地址hi00参考地址04and_mask hi00and maskf2or_mask hi000r_mask25图20:屏蔽写保持寄存器状态图6. 11 23 (0x17)读/写多个寄存器在一个单独modbus事务屮,这个功能码实现了一个读操作和一个写操作的组合。从零开始寻址保持寄存器
44、。因此,寻址保持寄存器1-16为0-15。请求说明了起始地址、被读取的保持寄存器号和起始地址、保持寄存器号以及被写入的数据。在写数据域中,字节数说明随后的字节号。正常响应包括被读出的寄存器组的数据。在读数据域屮,字节数域说明随后的字节数量。请求pdu功能码1个字节0x17读起始地址2个字节0x0000 至 oxffff读的数量2个字节0x0001 至近似 0x0076写起始地址2个字节0x0000 至 oxffff写的数量2个字节0x0001 至近似 0x0076写字节数1个字节2xn*写寄存器值n*x2个字节*n=写的数量响应pdu功能码1个字节0x17字节数1个字节2xn*读寄存器值n*x
45、2个字节*n=读的数量错误差错码1个字节0x97异常码1个字节01或02或03或04这是一个请求从寄存器4开始读六个寄存器并h从寄存器15开始读三个寄存器的实例:请求响应域名(卜六进制)域名(十六进制)功能17功能17读起始地址hi00字节数0c读起始地址lo03读寄存器值hi00读的数量hi00读寄存器值lofe读的数量lo06读寄存器值hi0a写起始地址hi00读寄存器值locd写起始地址lo0e读寄存器值hi00写的数量hi00读寄存器值lo01写的数量lo03读寄存器值hi00写字节数06读寄存器值lo03写寄存器值hi00读寄存器值hi00写寄存器值loff读寄存器值lo0d写寄存器
46、值hi00读寄存器值hi00写寄存器值loff读寄存器值loff写寄存器值hi00写寄存器值iqff图21:读/写多个寄存器状态图6. 12 43 (0x2b)读设备识别码这个功能码允许读取与远程设备的物理描述和功能描述相关的识别码和附加报文。将读设备识别码接口模拟为一个地址空间,这个地址空间由一组可寻址数据元索组成。数据元 素是被叫对象,并1l对象id确定这个数据元素。接口由3种对彖组成: 基本设备识别码。所有此种对彖都是必备的:厂商名称、产品代码和修订本号。 正常设备识别码。除棊本数据对象以外,设备提供了附加的和可选择的识别码以及数据对 象描述。按标准定义所有种类的对彖,但是这种对彖的执行
47、是可选的。 扩展设备识别码。除止常数据对象以外,设备提供了附加的和可选的识别码以及专用数据描述。所有这些数据都是与设备有关的。对象id对象名称/描述类型m/0种类0x00厂商名称ascii字符串强制的基本0x01产品代码ascii字符串强制的0x02主要修订本ascii字符串强制的0x03vendorurlascii字符串可选的规则0x04产品名称ascii字符串可选的0x05模式名称asctt ?-符串可选的0x06用户应用名称ascii字符串可选的0x07保留可选的0x7f0x80 oxff可选择地定义专用对象范围0x80oxff与产品冇关相关设备可选的扩展请求pdu功能码1个字节0x2bmei类型1个字节oxoereaddevid 码1个字节01/02/03/04对象id1个字节0x00 至 oxef响应pdu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 反击式精煤破碎机智能化改造中的多源传感器数据融合瓶颈与故障诊断模型构建
- 双气控系统可靠性优化与工业4.0时代智能诊断技术融合路径
- 2024年物理治疗康复设备项目资金需求报告代可行性研究报告
- 俄罗斯警察考试题及答案
- 临床108个技能考试题及答案2025年版
- 口腔临床路径考试题及答案2025年版
- 临床传染病副高试题及答案2025年版
- 2025年特色农产品冷链物流配送网络优化与技术创新路径研究
- 2025年版专职教师聘用合同范本
- 门卫上岗前安全培训课件
- 大学预算绩效管理办法(试行)模板
- 西方音乐史全套完整教学课件
- 急诊急救护理教学课件
- 最新医疗安全十八项核心制度课件
- 住宅小区供配电系统设计课件
- 社保费和非税收入课件
- “三高”讲座-课件
- 建设工程施工合同(GF-2017-0201) 专用条款模板
- 普通冲床设备日常点检标准作业指导书
- 少儿英语字母操
- 义务教育(数学)新课程标准(2022年修订版)
评论
0/150
提交评论