• 使用Python的确能快速的推进项目,特别是做工业控制和自动化控制程序,最近在忙富X康的一个SMT AGV项目,采用了Python直接通过串口,TCP/IP等,与远程IO,485IO等模块通讯并实现调度和控制物料的转移。在对485IO板通讯时会用到CRC16 Modbus校验,CSDN里和百度里找了很多方法,其中有crcmod 库的使用,但不是直接对串口报文数组进行操作。为了方便直接操作串口HEX报文特整理了以下文档,供大家参考和自己记录。
  • 本方法是直接计算得出校验码并直接跟在报文后面,代码如下:
buffer = [0x01, 0x02, 0x00, 0x00, 0x00, 0x08]# ===============================================================
def CalCRC16(data, length):#print(data, length)                          #打印数据,长度crc=0xFFFFif length == 0:length = 1j = 0while length != 0:crc ^= list.__getitem__(data, j)#print('j=0x%02x, length=0x%02x, crc=0x%04x' %(j,length,crc))for i in range(0,8):if crc & 1:crc >>= 1crc ^= 0xA001else:crc >>= 1length -= 1j += 1return crc
# ===============================================================
def CRCBuffer(buffer):     crc_transformation = CalCRC16(buffer,len(buffer))    #crc_calculation = hex(crc_transformation)#print('crc_calculation:',crc_calculation)tasd = [0x00,0x00]tasd[0] = crc_transformation & 0xFFtasd[1] = (crc_transformation >> 8) & 0xFFH =hex(tasd[0])L =hex(tasd[1])H_value = int(H,16)L_value = int(L,16)buffer.append(H_value)buffer.append(L_value)return buffer
# ===============================================================if __name__ == '__main__':print(CRCBuffer(buffer))
  • 打印结果是:[1, 2, 0, 0, 0, 8, 121, 204],是十进制显示的,使用串口输出是16进制的[0x01, 0x02, 0x00, 0x00, 0x00, 0x08, 79, CC],可用串口调试工具验证。相对其他用法个人觉得这个更好理解和使用,也不用依赖crcmod库,参考 楚格 的博客,特此感谢!https://www.cnblogs.com/caochucheng/p/9612336.html

python Modbus CRC16 校验计算公式加源码相关推荐

  1. python实现crc16校验

    python实现crc16校验 前阵子由于"摸鱼"需要,笔者学习了crc16校验这一小小的通信领域知识.也就有了这篇博客.在此笔者不求甚解(通信大佬可以自行略过),有错漏的地方还望 ...

  2. java版 modbus crc16校验 (已测试成功)_java版 ModBus CRC16校验 (已测试成功)

    ModBus 的Crc16校验 package testCase; public class CRC16M { static final String HEXES = "0123456789 ...

  3. Modbus crc16校验

    CRC-16 / MODBUS : 1)CRC寄存器初始值为 FFFF:即16位全为1: 2)CRC-16 / MODBUS的多项式A001H (1010 0000 0000 0001B) 'H'表示 ...

  4. Modbus CRC16校验方法及实现代码

    0.前言 项目中所用到的DI数字开关模块通信方式为串口通信,内置数据校验方式为Modbus CRC16. 这种校验方式第一次遇到,于是百度了一下,找到这篇文章,按照步骤,自己写了下代码,对比了下文中代 ...

  5. crc16校验c语言程序源码,CRC16代码(C语言实现)

    Modbus CRC16校验代码 嵌入式系统crc16校验码计算函数记录 /************************************************** * CRC 高位字节值 ...

  6. python crc-16 crc-16校验码 crc-16校验算法 ppp(MAC)帧检验序列FCS

    python crc-16 crc-16校验码 crc-16校验算法 ppp(MAC)帧检验序列FCS 想弄明白这里要看多几遍,配合下面的例子能更快理解. 第一.CRC-16校验码计算方法: 常用查表 ...

  7. PHP CRC16 校验码的算法怎么使用

    PHP CRC16 校验码的算法如何使用 最近用到CRC16, 我现在就是要把 010301180001 算出CRC16的校验码,通过其他工具,可以得到 校验码是 05F1 最后完整的代码就是 010 ...

  8. php实现 crc16 xmode校验,基于Modbus三种CRC16校验方法的性能对比

    [toc] #1.背景介绍 主要应用场景在物联网中,底端设备注册报文的上报,需要对报文的有效载荷(data)进行CRC16的复验,验证与设备端的CRC校验是否相等,如果相等,报文有效,设备上报就会注册 ...

  9. PLC中用scl语言编写算法求解modbus crc校验码

    PLC中用scl语言编写算法求解modbus crc校验码 因为不是严格的modbus协议,是用的自由口通讯,传输数据里面得加上CRC校验,所以得搞个算法根据发送不同的数据生成相应的CRC校验码. 现 ...

最新文章

  1. 推荐个所见即所得的编辑器
  2. 图解web前端开发工具教程
  3. Linux shell创建空文件(0字节大小)文件方法
  4. swift 雨燕 新手教程
  5. Win10系统如何设置开机启动密码
  6. 监控linux内存,系统运维|用 Bash 脚本监控 Linux 上的内存使用情况
  7. 阻塞、非阻塞、同步、异步的区别
  8. 一个简单的dos命令实现无限弹窗,卡死电脑
  9. PROTEL PCB放置汉字
  10. 剖析STM32F103读写W25Q64
  11. 数学基础(1)线性代数总结
  12. 三维浮雕软件 linux,三维立体浮雕软件下载
  13. CodeForces 645D Robot Rapping Results Report
  14. 《私募股权基金投资基础知识》---第二章
  15. Arcgis for Android加载tpk文件遇到的错误,求大神指导下。
  16. 文章推荐列表(个人收藏)
  17. 安卓11 Sdcard文件读取权限问题
  18. 全球及中国TNFα抑制剂行业竞争调查分析及项目可行性研究报告2021-2027年
  19. WPF补充(二) 资源(Resource)
  20. 【每日一GO】时间处理库—Carbon

热门文章

  1. 陈志武:教育不转型,国家只能卖苦力
  2. 老外用批处理写的系统文件替换
  3. 周立发的 Linux 视频讲座(VeryCD下载)
  4. 新浪微博互粉 http://weibo.com/51centos
  5. andriod APP
  6. DFS最棒—失恋巧克力职人
  7. 解决小程序打包不能超过2M的方法
  8. JavaScript代码 在项目中高效、快速开发
  9. C#爬取百度图片最新(20220627)
  10. 数据以Excel导出