ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:19.89KB ,
资源ID:17406669      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-17406669.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MODBUS通信规约解析.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

MODBUS通信规约解析.docx

1、MODBUS通信规约解析MODBUS通信规约第一章 MODBUS协议简介MODBUS协议详细定义了校验码、数据序列等,这些都是特定数据交换的必要内容。MODBUS协议在一对通讯线上使用主从应答式连接(半双工),这意味着在一对单独的通讯线上信号沿着相反的两个方向传输。首先,主计算机的信号寻址到一台唯一的终端设备(从机),然后,终端设备发出的应答信号以相反的方向传输给主机。MODBUS协议只允许在主计算机和终端设备之间通讯,而不允许独立的设备之间的数据交换,这样各终端设备不会在它们初始化时占用通讯线路,而仅限于响应到达本机的查询信号。1.1 传输方式传输方式是一个数据帧内一系列独立的数据结构以及用

2、于传输数据的有限规则,下面定义了与MODBUS协议-RTU方式相兼容的传输方式。Coding System 二进制编码 8位Start bit 起始位 1位Data bits 数据位 8位Parity 校验 无奇偶校验Stop bit 停止位 1位Error checking 错误检测 CRC(循环冗余校验)1.2协议当数据帧到达终端设备时,它通过一个简单的“端口”进入被寻址到的设备,该设备去掉数据帧的“信封”(数据头),读取数据,如果没有错误,就执行数据所请求的任务,然后,它将自己生成的数据加到取得的“信封”中,把数据帧返回给发送者。返回的响应数据中包含了以下内容:终端从机地址(Addres

3、s)、被执行了的命令(Function)、执行命令生成的被请求数据(Data)和一个校验码(Check)。发生任何错误都不会有成功的响应。1.2.1数据帧格式AddressFunctionDataCheck8-Bits8-BitsN8-Bits16-Bits1.2.2地址(Address)域地址域在帧的开始部分,由一个字节8位(0255)组成,这些位标明了用户指定的终端设备的地址,该设备将接收来自与之相连的主机数据。每个终端设备的地址必须是唯一的,仅仅被寻址到的终端会响应包含了该地址的查询。当终端发送回一个响应,响应中的从机地址数据便告诉了主机哪台终端正与之通信。1.2.3功能(Functio

4、n)域功能于域代码告诉了被寻址到的终端执行何种功能。参见表1-1。功能码意义作用01读取线圈状态取得一组逻辑线圈的当前状态(ON/OFF)02读取输入状态取得一组开关输入的当前状态(ON/OFF)03读取保持寄存器取得一个或多个保持寄存器的当前二进制值04读取输入寄存器取得一个或多个输入寄存器的当前二进制值05强制单线圈强制一个逻辑线圈的通断状态06预置单寄存器把具体的二进制值装入一个保持寄存器07读取异常状态取得8个内部线圈的通断状态,这8个线圈的地址由控制器决定,用户逻辑可将这些线圈定义,以说明从机状态,短报文适宜迅速读取状态。08回送诊断校验把诊断校验报文送主机,以对通讯处理进行评鉴09

5、编程(只用于484)使主机模拟编程器使用,修改PC从机逻辑10控询(只用于484)可使主机与正在执行长程序任务从机通讯,定期探询该从机是否已经完成其操作任务,仅在含有功能码9的报文发送后,本功能码才得发送。11读取事件计数可使主机发出单询问,并随即判定操作是否成功,尤其是在该命令或其应答产生通讯错误时。12读取通讯事件记录可使主机检索每台从机的Modbus事务处理通讯事件记录。如果某项事务处理未完成,记录会给出有关错误。13编程(184/384 484 584)可使主机模拟编程功能,修改PC状态逻辑14探询(184/384 484 584)可使主机与正在执行长程序任务从机通讯,定期探询该从机是

6、否已经完成其操作任务,仅在含有功能码13的报文发送后,本功能码才得发送。15强置多线圈强置一串连续逻辑线圈的通断16预置多寄存器把具体的二进制值装入一串连续的保持寄存器17报告从机标识可使主机判断编址从机的类型及该从机运行指示灯的状态。18编程(884和Micro84)可使主机模拟编程功能,修改PC状态逻辑19重置通讯链路发生非可修正错误后使从机复位于已知状态20读取通用参数显示扩展存储器文件中的数据信息21写入通用参数把通用参数写入扩展存储器文件,或修改之22-64保留作扩展功能备用65-72保留以备用户功能使用留作用户功能的扩展编码73-119非法功能120-127保留留作内部使用128-

7、255保留用于异常应答1.2.4数据(Data)域数据域包含了终端执行特定功能所需要的数据或者终端响应查询时采集到的数据。这些数据的内容可能是数值、参考地址或者设定值。例如:功能码告诉终端读取一个寄存器,数据域则需要指明从哪个寄存器开始及读取了多少个数据,内嵌的地址和数据依照类型和从机之间的不同内容而有所不同。1.2.5错误校验(Check)域该域允许主机和终端检查传输过程中的错误。有时,由于电噪音和其它干扰,一组数据在从一个设备传输到另一个设备时在线路上可能会发生一些变化,出错校验能够保证主机或者终端不去响应那些传输过程中发生了改变的数据,这就提高了系统的安全性和效率,出错校验使用了16位循

8、环冗余的方法(CRC16)。1.3错误检测循环冗余校验(CRC)域占用两个字节,包含了一个16位的二进制值。CRC值由传送设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较,如果这两个值不相等,就发生了错误。CRC运算时,首先将一个16位的寄存器预置为全1,然后连续把数据帧中的每个字节中的8位与该寄存器的当前值进行运算,仅仅每个字节的8个数据位参与生成CRC,起始位和终止位以及可能使用的奇偶位都不影响CRC。在生成CRC时,每个字节的8位与寄存器中的内容进行异或,然后将结果向低位移位,高位则用“0”补充,最低位(LSB)移出并检测,如果

9、是1,该寄存器就与一个预设的固定值(0A001H)进行一次异或运算,如果最低位为0,不作任何处理。上述处理重复进行,直到执行完了8次移位操作,当最后一位(第8位)移完以后,下一个8位字节与寄存器的当前值进行异或运算,同样进行上述的另一个8次移位异或操作,当数据帧中的所有字节都作了处理,生成的最终值就是CRC值。生成一个CRC的流程为:1.预置一个16位寄存器为0FFFFH(全1),称之为CRC寄存器。2.把数据帧中的第一个字节的8位与CRC寄存器中的低字节进行异或运算,结果存回CRC寄存器。3.将CRC寄存器向右移一位。4.如果最低位为0:重复第三步(下一次移位)。如果最低位为1:将CRC寄存

10、器与一个预设的固定值(1010 0000 0000 0001)进行异或运算。5.重复第三步和第四步直到8次移位。这样处理完了一个完整的八位。6.重复第2步到第5步来处理下一个八位,直到所有的字节处理结束。7.最终CRC寄存器得到的值就是CRC的值。8.CRC寄存器发送时将高低位互换,即高位在前,低位在后。第二章 MODBUS功能详解本章所述协议将尽可能的使用下图所示的格式。(数字为16进制)AddrFunData start reg hiData start reg loData #of regs hiData #of regs loCRC16 HiCRC16 Lo06H03H00H00H00

11、H21H84H65H注:Addr:从机地址Fun:功能码Data start reg hi:数据起始地址 寄存器高位Data start reg lo:数据起始地址 寄存器低位Data #of regs hi:数据读取个数 寄存器高位Data #of regs lo:数据读取个数 寄存器低位CRC16 Hi:循环冗余校验 高位CRC16 lo:循环冗余校验 低位2.1读数字输出状态(功能码01)查询数据帧此功能允许用户获得指定地址的从机控制的特定地址的DO输出状态ON/OFF(1=ON,0=OFF),除了从机地址和功能域,数据帧还需要在数据域中包含被读取DO的初始地址和要读取的DO数量。下图的

12、例子是从地址为17的从机读取DO1到DO6的状态。AddrFunDO start reg hiDO start reg loData #of regs hiData #of regs loCRC16 HiCRC16 Lo11H01H00H00H00H06HBEH98H响应数据帧响应包含从机地址、功能码、数据的数量和CRC错误校验,数据包中每个DO占用一位(1=ON,0=OFF),第一个字节的最低位为寻址到的DO值,其余的在后面。下图所示为读数字输出状态响应的实例。(DO1=OFF,DO2=ON,DO3=OFF,DO4=ON,DO5=OFF,DO6=ON)AddrFunByte countDat

13、aCRC16 hiCRC16 lo11H01H01H2AHD4H97HDO状态DO6DO5DO4DO3DO2DO1001010102.2读数字输入状态(功能码02)查询数据帧此功能允许用户获得DI的状态ON/OFF(1=ON,0=OFF),除了从机地址和功能域,数据帧还需要在数据域中包含被读取DI的初始地址和要读取的DI数量。下图的例子是从地址为17的从机读取DI1到DI16的状态。AddrFunDI start addr hiDI start addr loDI num hiDI num loCRC16 HiCRC16 Lo11H02H00H00H00H10H7BH56H响应数据帧响应包含从

14、机地址、功能码、数据的数量和CRC错误校验,数据包中每个DI占用一位(1=ON,0=OFF),第一个字节的最低位为寻址到的DI值,其余的在后面。下图所示为读数字输出状态响应的实例。(DI1=ON,DI2=ON,DI3=OFF,DI4=OFF,DI5=ON,DI6=ON, DI7=OFF,DI8=OFF,DI9=OFF,DI10=ON,DI11=ON,DI12=ON, DI13=OFF,DI14=OFF,DI15=ON,DI16=ON)AddrFunByte countData1Data2CRC16 hiCRC16 lo11H02H02H33HCCH6CHDEHData1DI8DI7DI6DI5

15、DI4DI3DI2DI100110011Data2DI16DI15DI14DI13DI12DI11DI10DI9110011002.3 读数据(功能码03)查询数据帧此功能允许用户获得设备采集与记录的数据及系统参数。下图的例子是从17号从机读个采集到的基本数据(数据帧中每个地址占用个字节)U1,U2,U3。AddrFunData start addr hiData start addr loData #of regs hiData #of regs loCRC16 HiCRC16 Lo11H03H00H00H00H03H07H5BH响应数据帧响应包含从机地址、功能码、数据的数量和CRC错误校验

16、下图所示为读U1,U2,U3(U1=03E8H,U2=03E7H,U3=03E9H)响应的实例。AddrFunByte countData1 hiData1 loData2 hiData2 loData3 hiData3 loCRC16 hiCRC16 lo11H03H06H03HE8H03HE7H03HE9HFDH9CH2.4 控制DO(功能码05)查询数据帧该数据帧强行设置一个独立的DO为ON或OFF,数据FF00H将设DO为ON状态,而0000H将设DO为OFF状态。下图的例子是从17号从机设置DO1为ON状态。AddrFunDO addr hiDO addr loValue hiVal

17、ue loCRC16 HiCRC16 Lo11H0H00H00HFFH00H8EHAAH响应数据帧响应包含从机地址、功能码、数据的数量和CRC错误校验对这个命令请求的正常响应是在DO状态改变以后回传接收到的数据。AddrFunDO addr hiDO addr loValue hiValue loCRC16 HiCRC16 Lo11H0H00H00HFFH00H8EHAAH2. 预置多寄存器(功能码16)查询数据帧功能码16(十进制)(十六进制为10H)允许用户改变多个寄存器的内容。注意:禁止对不具有可写属性的单元使用此命令改写。 下图的例子是预置17号从机正向有功电度EP+为17807783

18、3Kwh.EP+的地址是0040H,EP+占用32位,共4个字节。AddrFunData start reg hiData start reg loData #of reg hiData #of reg loByte countValue hiValue loValue hiValue loCRC16 hiCRC16 lo11H10H00H40H00H02H04H40H89H0AH9DHA0H7CH响应数据帧对于预置单寄存器请求的正常响应是在寄存器值改变以后将接收到的数据传送回去。AddrFunData start reg hiData start reg loData #of reg hiData #of reg loCRC16 hiCRC16 lo11H10H00H40H00H02H42H8CH一般原则:1.模拟量采用MODBUS-RTU通讯规约的03号命令读出。2.开入量采用MODBUS-RTU通讯规约的02号命令读出。3.开出量采用MODBUS-RTU通讯规约的0号命令读出,05号命令写入。4.SOE记录可用MODBUS-RTU通讯规约的03号命令读出,16号命令清除。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2