JKWE-21通讯协议MODBUS.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JKWE-21通讯协议MODBUS

JKWE-21通讯协议 MODBUS 版本:1.00 日期:2010.3.31 传输方式 传输方式是一个数据帧内一系列独立的数据结构以及用于传输数据的有限规则,下面定义了MODBUS 协议的传输方式。 Coding System 二进制编码 8位 Start bit 起始位 1位 Data bits 数据位 8位 Parity 校验 无奇偶校验 Stop bit 停止位 1位 Error checking 错误检测 CRC(循环冗余校验) 1.2协议 当数据帧到达终端设备时,它通过一个简单的“端口”进入被寻址到的设备,该设备去 掉数据帧的“信封”(数据头),读取数据,如果没有错误,就执行数据所请求的任务,然后,它将自己生成的数据加入到取得的“信封”中,把数据帧返回给发送者。返回的响应数据中包含了以下内容:终端从机地址(Address)、被执行了的命令(Function)、执行命令生成的被请求数据(Data)和一个校验码(Check)。发生任何错误都不会有成功的响应。 1.2.1数据帧格式 Address Function Data Check 8-Bits 8-Bits N x 8-Bits 16-Bits 图 1 – 1 .数据帧格式 1.2.2地址(Address)域 地址域在帧的开始部分,由一个字节8位(0 ~ 255)组成,这些位标明了用户指定的终端设备的地址,该设备将接收来自与之相连的主机数据。每个终端设备的地址必须是唯一的,仅仅被寻址到的终端会响应包含了该地址的查询。当终端发送回一个响应,响应中的从机地址数据便告诉了主机哪台终端正与之进行通信。 1.2.3功能(Function)域 功能域代码告诉了被寻址到的终端执行何种功能。表 1 – 1列出了瑞士DAE网络电力仪表用到的功能码,以及它们的意义和功能。 表 1 – 1 功能码 代码 意义 行为 01 读DO状态 获得数字(继电器)输出的当前状态(ON/OFF) 02 读DI状态 获得数字输入的当前状态(ON/OFF) 03 读数据寄存器 获得一个或多个寄存器的当前二进制值 05 控制DO 控制数字(继电器)输出状态(ON/OFF) 10 预置多寄存器 设定二进制值到一系列多寄存器中 1.2.4数据(Data)域 数据域包含了终端执行特定功能所需要的数据或者终端响应查询时采集到的数据。这 些数据的内容可能是数值、参考地址或者设置值。例如:功能域码告诉终端读取一个寄存器,数据域则需要指明从哪个寄存器开始及读取多少个数据,内嵌的地址和数据依照类型和从机之间的不同内容而有所不同。 1.2.5错误校验(Check)域 该域允许主机和终端检查传输过程中的错误。有时,由于电噪声和其它干扰,一组数 据在从一个设备传输到另一个设备时在线路上可能会发生一些改变,出错校验能够保证主机或者终端不去响应那些传输过程中发生了改变的数据,这就提高了系统的安全性和效率,出错校验使用了16位循环冗余的方法(CRC16)。 [注] 发送序列总是相同的 – 地址、功能码、数据和与方向相关的出错校验。 1.3错误检测 循环冗余校验(CRC)域占用两个字节,包含了一个16位的二进制值。CRC 值由传送设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较,如果这两个值不相等,就发生了错误。 CRC运算时,首先将一个16位的寄存器预置为全1,然后连续把数据帧中的每个字节中的8位与该寄存器的当前值进行运算,仅仅每个字节的8个数据位参与生成CRC,起始位和终止位以及可能使用的奇偶位都不影响CRC。 在生成CRC时,每个字节的8位与寄存器中的内容进行异或,然后将结果向低位移位,高位则用“0”补充,最低位(LSB)移出并检测,如果是1,该寄存器就与一个预设的固定值(0A001H)进行一次异或运算,如果最低位为0,不作任何处理。 上述处理重复进行,直到执行完了8次移位操作,当最后一位(第8位)移完以后,下一个8位字节与寄存器的当前值进行异或运算,同样进行上述的另一个8次移位异或操作,当数据帧中的所有字节都作了处理,生成的最终值就是CRC值。 生成一个CRC的流程为: 预置一个16位寄存器为0FFFFH(全1),称之为CRC寄存器。 把数据帧中的第一个字节的8位与CRC寄存器中的低字节进行异或运算,结果存回CRC寄存器。 将CRC寄存器向右移一位。 如果最低位为0:重复第三步(下一次移位)。 如果最低位为1:将CRC寄存器与一个预设的固定值(1010 0000 0000 0001)进行异或运算。 重复第三步和第四步直到8次移位。这样处理完了一个完整的八位。 重复第2步到第5步来处理下一个八位

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档