Modbus 通信协议详解:https://www.cnblogs.com/txwtech/p/11104428.html
Modbus 通信协议详解

下面是在QT5 C++控制台测试程序。

#include <QCoreApplication>
#include <QTextStream>
#include <stdio.h>//然后,在使用cin、cout、cerr之前,创建下列变量:
QTextStream cin(stdin,  QIODevice::ReadOnly);
QTextStream cout(stdout,  QIODevice::WriteOnly);
QTextStream cerr(stderr,  QIODevice::WriteOnly);template <typename T, size_t N>
inline size_t GetArrayLength(const T(&)[N])
{return N;
}/* CRC 高位字节值表 */
static unsigned char auchCRCHi[] = {0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
};/* CRC低位字节值表*/
static unsigned char auchCRCLo[] = {0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06,
0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD,
0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09,
0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A,
0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4,
0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3,
0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3,
0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4,
0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A,
0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29,
0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED,
0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26,
0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67,
0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F,
0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68,
0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E,
0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,
0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71,
0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92,
0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C,
0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B,
0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B,
0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,
0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42,
0x43, 0x83, 0x41, 0x81, 0x80, 0x40
};/*=====================================================
功能:CRC16冗余循环校验
参数:unsigned char *puchMsg ; //要进行CRC校验的消息unsigned short usDataLen ; //消息中字节数
=====================================================*/
unsigned short CRC16(unsigned char *puchMsg, unsigned short usDataLen)
{unsigned char uchCRCHi = 0xFF; /* 高CRC字节初始化 */unsigned char uchCRCLo = 0xFF; /* 低CRC 字节初始化 */unsigned uIndex ; /* CRC循环中的索引 */while (usDataLen--) /* 传输消息缓冲区 */{uIndex = uchCRCHi ^ *puchMsg++ ; /* 计算CRC */uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex];uchCRCLo = auchCRCLo[uIndex];}return (uchCRCHi << 8 | uchCRCLo);
}//测试数组
unsigned char Combuffer[]={0x01,0x06,0x00,0x00,0x00,0x08,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00};/*主函数*/
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);unsigned int crc=CRC16(Combuffer,GetArrayLength(Combuffer));unsigned char crcHi=crc/256;//CRC16高8位unsigned char crcLo=crc%256;//CRC16低8位//输出观察结果cout<<crcHi<<endl;cout<<crcLo<<endl;return a.exec();
}

Modbus通信协议之CRC16冗余循环校验函数相关推荐

  1. CRC16冗余循环检测计算器-好用。modbus RTU

    开始使用 http://cht.nahua.com.tw/index.php?url=http://cht.nahua.com.tw/software/crc16/&key=Modbus,%2 ...

  2. MODBUS 通信协议概述

    Modbus 通信协议 概述 图片以及英文描述摘自: MODBUS APPLICATION PROTOCOL SPECIFICATION V1.1b3 .pdf 侵删 用户数据单元(Applicati ...

  3. Modbus通信协议应用——风速传感器HS-FS01(串口显示)

    风速传感器HS-FS01 485型采用Modbus-Rtu通信协议,本代码部分基于正点原子f1战舰V3. 首先,了解一下什么是Modbus协议. Modbus是一种串行通信协议,是Modicon公司( ...

  4. 编写一个字节数的rtu C语言校验程序,Modbus通信协议中CRC校验的快速C语言算法

    Modbus通信协议中CRC校验的快速C语言算法 2004年第11期 福 建 电 脑 63 Modbus通信协议中CRC校验的快速C语言算法 孟开元 (西安石油大学计算机学院陕西西安710065) [ ...

  5. 详解Modbus通信协议---清晰易懂

    本文旨在让您对Modbus有一个很直观的了解,总结关于Modbus相关的知识,非常适合初学的同学,同时如有错误,欢迎修改意见和建议,将在第一时间修改 什么是协议 什么是RS-485 RS-232 Mo ...

  6. STM32:RS485通信和Modbus通信协议汇总

    RS485通信和Modbus通信协议汇总 1. 主从模式 RS-485上的软件层协议ModBus主要依赖于主从模式.主从模式是指在半双工通讯方式上,2个或者2个以上的设备组成的通讯系统中: (1) 至 ...

  7. 大神带你秒懂Modbus通信协议

    摘要:昨天有小伙伴在群里问关于Modbus通信协议的,大家都比较积极地解答,所以今天果子哥总结一下关于Modbus相关的知识,适合正在入门的小伙伴"食用".同样还是理论+实战的方式 ...

  8. 干货分享:RS485通信和Modbus通信协议汇总

    https://zhuanlan.zhihu.com/p/24134130 在工业控制.电力通讯.智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换.最初采用的方式是RS232接口,由于工业现 ...

  9. 【知识分享】Modbus通信协议详解

    协议 这里分两部分,Modbus和协议,首先什么是协议?百度解释下就是:意思是共同计议,协商:经过谈判.协商而制定的共同承认.共同遵守的文件.比如大学毕业找工作的时候,一般要签一份叫"三方协 ...

最新文章

  1. 7000 字 23 张图,Pandas一键生成炫酷的动态交互式图表
  2. python 如何编写图像标定(标记)(annotation)画框程序?
  3. 买卖股票的最佳时机含手续费
  4. Cloud for Customer ApplicationStarter.js和fQuickLogin
  5. VirtualDOM与diff(Vue实现)
  6. centos 卸载ffmpeg_CentOS Linux 操作系统安装 FFmpeg 教程
  7. Springmvc+mybatis配置前台页面传递JSON串给后台接收。
  8. C++_基础部分_C++文件操作_文件的写入操作---C++语言工作笔记076
  9. 深度学习模型参数初始化的方法
  10. 原生js对数组操作(find,findIndex)
  11. 如何在IOS平台上使用js直接调用OC方法
  12. poi导出excel写入公式_POI导出Excel增加公式核心代码
  13. 【线性代数(6)】范德蒙德行列式及克莱姆法则
  14. 统一社会信用代码的编码格式以及js正则校验
  15. JAVA计算机毕业设计针织企业外包系统Mybatis+系统+数据库+调试部署
  16. call(zoom)_如何解决您的Zoom Call问题
  17. 【SSL】记录一次PEM转P12证书
  18. 程序员英语阅读学习笔记
  19. sklearn代码21 2-2020天猫双十一销量
  20. ubuntu18.04 安装HP打印机

热门文章

  1. 「作文素材详解」写作必知篇:语言优美不是作文第一要求
  2. 为何有些程序员总是想要“干掉”产品经理?
  3. 全新的membership框架Asp.net Identity(1)——.Net membership的历史
  4. 关Jquery判断input type=checkbox元素是否被选中的判断
  5. iOS平台快速发布HT for Web拓扑图应用
  6. HDOJ---2546 饭卡[DP01背包问题]
  7. Sql Server中自动序号的方法
  8. Workbench has not been created yet
  9. Jetty实战之 安装 运行 部署
  10. Oracle expdp/impdp导出导入命令及数据库备份