标准的Modbus串行网络采用两种错误检测方法。奇偶校验对每个字符都可用,帧检测(LRC和CRC)应用于整个消息。它们都是在消息发送前由主设备产生的,从设备在接收过程中检测每个字符和整个消息帧。

  用户要给主设备配置一预先定义的超时时间间隔,这个时间间隔要足够长,以使任何从设备都能作为正常反应。如果从设备检测到一传输错误,消息将不会接收,也不会向主设备作出回应。这样超时事件将触发主设备来处理错误。发往不存在的从设备的地址也会产生超时。

  1、奇偶校验

    如果指定了奇或偶校验,“1”的位数将算到每个字符的位数中(ASCII模式7个数据位,RTU中8个数据位)。例如RTU字符帧中包含以下8个数据位:

              1 1 0 0 0 1 0 1

    整个”1“的数目是4个。如果使用了偶校验,帧的奇偶校验位将是0,便得整个”1“的个数仍是4个。如果使用了奇校验,帧的奇偶校验位将是1,便得整个”1“的个数是5个。

    如果没有指定奇偶校验位,传输时就没有校验位,也不进行校验检测。代替一附加的停止位填充至要传输的字符帧中。

  2、LRC检测

    使用ASCII模式,消息包括了一基于LRC方法的错误检测域。LRC域检测了消息域中除开冒号及结束的回车换行号外的内容。

    LRC域是一个包含一个8位二进制的字节。LRC值由传输设备来计算并放到消息帧中,接收设备在接收消息的过程中计算LRC,并将它和接收到消息中LRC域中的值比较,如果两值不等,说明有错误。

    LRC方法是将消息中的8Bit的字节连续累加,丢弃了进位。

    LRC简单函数如下:    

1 static unsiged char LRC(auchMsg,usDataLen)
2 unsigned char *auchMsg;/*要进行计算的消息*/
3 unsigned short usDataLen;/*LRC要处理的字节的数量*/
4 {
5      unsigned char uchLRC = 0;     /*LRC字节初始化*/
6      while (usDataLen--)     /*传送消息*/
7      uchLRC += *auchMsg++;   /*累加*/
8      return ((unsigned char)(-(char_uchLRC)));
9 }

  LRC算法:

  • 参与校验数据:从地址码到数据区的所有数据。
  • 算法:相邻2个16进制符相加求和。
  • 校验码:取其和的低8位的补码为校验码。

  例如:  

LRC算法举例
起始码 地址码 功能码 数据区 校验码 停止码
01 03 21 02 00 02 LRC CR/LF

   求和:H01+H03+H21+H02+H00+02 = H29

    求:H29的补码:HD7

      LRC校验码为:HD7

  3、CRC检测

    使用RTU模式,消息包括了一基于CRC方法的错误检测域。CRC域检测了整个消息的内容。CRC域是两个字节,包含一16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。    

    CRC码的计算方法是,先预置16位寄存器全为1。再逐步把每8位数据信息进行处理。在进行CRC码计算时只用8位数据位,起始位及停止位,如有奇偶校验位的话也包括奇偶校验位,都不参与CRC码计算。

     在计算CRC码时,8位数据与寄存器的数据相异或,得到的结果向低位移一字节,用0填补最高位。再检查最低位,如果最低位为1,把寄存器的内容与预置数相异或,如果最低位为0,不进行异或运算。

     这个过程一直重复8次。第8次移位后,下一个8位再与现在寄存器的内容相相异或,这个过程与以上一样重复8次。当所有的数据信息处理完后,最后寄存器的内容即为CRC码值。CRC码中的数据发送、接收时低字节在前。

   计算CRC码的步骤为:

  • 预置16位寄存器为十六进制FFFF(即全为1)。称此寄存器为CRC寄存器;
  • 把第一个8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器;
  • 把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位;
  • 如果最低位为0:重复第3步(再次移位); 如果最低位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;
  • 重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;
  • 重复步骤2到步骤5,进行下一个8位数据的处理;
  • 最后得到的CRC寄存器即为CRC码。

  参考:http://www.360doc.com/content/14/0120/10/7991404_346584755.shtml

转载于:https://www.cnblogs.com/wmcoder/p/5209329.html

Modbus通讯错误检测方法相关推荐

  1. crc错误 modbus poll_Modbus通讯错误检测方法

    标准的Modbus串行网络采用两种错误检测方法.奇偶校验对每个字符都可用,帧检测(LRC和CRC)应用于整个消息.它们都是在消息发送前由主设备产生的,从设备在接收过程中检测每个字符和整个消息帧. 用户 ...

  2. eset找不到服务器更新失败,ESET NOD32连接到服务器以更新常见的错误检测方法

    对于使用NOD32企业版的用户,客户端通常会在这种情况下更新内部服务器: (1)客户端提示"从更新服务器下载文件时出错"或"在服务器上找不到文件" 客户端显示& ...

  3. modbus通讯协议详解

    1.Modbus协议简介 Modbus协议是一种广泛应用于当今工业控制领域的通用通信协议.通过此协议,控制器相互之间.或者控制器经由网路(如以太网)可以和其他设备之间进行通信.Modbus协议使用的是 ...

  4. MODBUS通讯协议及编程【一】

    一.Modbus 协议简介   Modbus 协议是应用于电子控制器上的一种通用语言.通过此协议,控制器相互之间.控制器经由网络(例如以太网)和其它设备之间可以通信.它已经成为一通用工业标准.有了它, ...

  5. modbus通讯协议详解(转载)

    转载自:https://www.cnblogs.com/The-explosion/p/11512677.html modbus通讯协议详解 1.Modbus 协议简介  Modbus协议是一种已广泛 ...

  6. Modbus 通讯协议

    Modbus 通讯协议 摘要 工业控制已从单机控制走向集中监控.集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便.Modbus就是工业控制器的网络协议中的一种. 关键词 Modbus ...

  7. 程序代码错误检测_错误检测代码

    程序代码错误检测 错误检测代码 (Error Detecting Codes) A group of bits is known as words, and these words move as a ...

  8. MODBUS通讯:libmodbus库使用方法

    MODBUS通讯:libmodbus库使用方法 libmodbus是一个快速.跨平台的Modbus库,目前支持Linux, Mac OS X, FreeBSD, QNX和Windows系统.libmo ...

  9. flask使用第三方云通讯平台时,出现{'172001':'网络错误'}解决方法

    问题描述:flask使用第三方云通讯平台时,出现{'172001':'网络错误'} 解决方法: 在sms.py文件中添加如下代码 import ssl # 取消证书验证 ssl._create_def ...

最新文章

  1. 织梦手机站下一篇变上一篇而且还出错Request Error!
  2. HTML5新元素section和article的区别详解
  3. 很实用的Python运行提速方法
  4. JQuery $post函数
  5. newlisp 接受jenkins带空格的参数
  6. mysql5.5不兼容5.6sql文件_为什么这段sql在我的电脑上可以执行,另外一台不可以。使用的mysql5.6 另一台是5.5...
  7. Oracle 备份还原
  8. Android新建项目选择SDK的区别
  9. 蓝桥杯 试题 基础练习 芯片测试——12行代码AC
  10. 2019.9.18最小生成树知识点总结
  11. 软件测试系统学习流程和常见面试题
  12. C++虚函数及虚函数表解析
  13. DELL R430服务器做raid5以及安装操作系统过程
  14. DFS+剪枝:N个蛋放入M个篮子并可以任意取
  15. [转]虚函数实现原理
  16. Oracle中将小数转换成字符丢零.截取小数.除数为零解决法
  17. lisp型材库_STMX 1.3.2 发布,高性能的 Common Lisp 库
  18. x黑客X档案2006年07期
  19. 怒了,以后有文件保存到网上
  20. 工业物联网实施的6个常见误解

热门文章

  1. java数组长度怎么看,威力加强版
  2. 【迁移学习(Transfer L)全面指南】零次学习(Zero-Shot Learning)入门
  3. 9适应之力加多少攻击_NBA球星生涯最低分都是多少?詹皇碰上麦迪仅得3分,哈登最低1分...
  4. java方法定义 与调用_Java方法的定义及调用
  5. 进阶学习(3.11) Facade Pattern 门面模式
  6. excel文件直接双击打不开_实用电脑技巧excel 电脑办公技巧500招 高级电脑技巧
  7. 分布式服务框架原理与实践pdf_深度解析微服务治理的技术演进和架构实践
  8. 长沙计算机学校首问 长沙大计校区电话,长沙有哪些中专学校,长沙中专学校名单一览表...
  9. java 静态资源变量_Java中读取配置文件中的内容,并将其赋值给静态变量的方法...
  10. tensor torch 构造_TORCH.TENSOR