modbus-crc16——c语言】的更多相关文章

CRC- / MODBUS : )CRC寄存器初始值为 FFFF:即16个字节全为1: )CRC- / MODBUS的多项式A001H ( 0001B) ‘H’表示16进制数,‘B’表示二进制数 计算步骤为:  ().预置 位寄存器为十六进制 FFFF(即全为 ) ,称此寄存器为 CRC  寄存器:   ().把第一个  位数据与  位 CRC  寄存器的低位相异或,把结果放于 CRC  寄 存器:  ().检测相异或后的CRC寄存器的最低位,若最低位为1:CRC寄存器先右移1位,再与多项式A0…
typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef int int32_t; const uint16_t polynom = 0xA001; uint16_t crc16bitbybit(uint8_t *ptr, uint16_t len) { uint8_t i; uint16_t crc = 0xffff; ) { len = ; } while (len--) { crc ^= *ptr; ;…
要求:输入字符串“00 AA FF CC AA 01 00” 得到校验码“79B1” 方法1: // ConsoleApplication1.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" unsigned short CRC_GetModbus16(unsigned char *pdata, int len); int main() { unsigned char value[] = { 0x00, 0xAA , 0xFF , 0xCC , 0x…
/** * CRC校验算法工具类 */ public class CRCUtil { public static String getCRC(String data) { data = data.replace(" ", ""); int len = data.length(); if (!(len % 2 == 0)) { return "0000"; } int num = len / 2; byte[] para = new byte[nu…
%ws   WCHAR wszName CRC原理 设编码前的原始信息多项式为P(x),P(x)的最高幂次加1等于k:生成多项式为G(x),G(x)的最高幂次等于r:CRC多项式为R(x):编码后的带CRC的信息多项式为T(x).发送方编码方法:将P(x)乘以xr(即对应的二进制码序列左移r位),再除以G(x),所得余式即为R(x).用公式表示为 T(x)=xrP(x)+R(x)接收方解码方法:将T(x)除以G(x),如果余数为0,则说明传输中无错误发生,否则说明传输有误. 程序可以如下实现:…
代码摘自:https://www.cnblogs.com/lujiannt/p/9246256.html 1.CRC16算法 public class CRC16Util { /** * 计算CRC16校验码 * * @param bytes * @return */ public static String getCRC(byte[] bytes) { int CRC = 0x0000ffff; int POLYNOMIAL = 0x0000a001; int i, j; for (i = 0…
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定. 1 byte checksum CRC-16 CRC-16 (Modbus)             CRC-16 (Sick)             CRC-CCITT (XModem)             CRC-CCITT (0xFFFF) CRC-CCITT (0x1D0F) CRC-CCITT (Kermit)     …
unsigned short CRC16_Modbus ( unsigned char *pdata, int len){ unsigned short crc=0xFFFF; int i, j; for ( j=0; j<len;j++) { crc=crc^pdata[j]; for ( i=0; i<8; i++) { if( ( crc&0x0001) >0) { crc=crc>>1; crc=crc^ 0xa001; } else crc=crc>&…
一.CRC16校验码的使用 现选择最常用的CRC-16校验,说明它的使用方法. 根据Modbus协议,常规485通讯的信息发送形式如下: 地址 功能码 数据信息 校验码 1byte 1byte nbyte 2byte CRC校验是前面几段数据内容的校验值,为一个16位数据,发送时,低8位在前,高8为最后. 例如:信息字段代码为: 1011001,校验字段为:1010. 发送方:发出的传输字段为: 1 0 1 1 0 0 1 1 0 10 信息字段 校验字段 接收方:使用相同的计算方法计算出信息字…
源:安卓能用的modebus CRC16计算,附上对应的C语言的CRC16 “源”即是原文地址,想了解作都更多文章及思想请移步到“源”.转过只是为了本人感兴趣的文章查找方便. 正文: 最近写安卓串口通信需要用到modebus 的crc16通信,网上找了很多都是字符串的,我需要byte的,由于java没有无符号数,转换有点小麻烦,对着C一部一部测试 代码如下: //java int CRC16_Check(byte Pushdata[],int length) { int Reg_CRC=0xff…
在工业控制中,Modbus RTU CRC16的校验码用的比较广泛,包括本人富士产品中,PC与伺服电机以及PC与VP系列的变频器的Modbus RTU通讯中都使用到了CRC16.     而对CRC16的计算的方式基本上有2种:第一种,使用双循环依照CRC的计算方法进行计算,第二种,采用查表的方式.本人愚钝无比,从网络上搜来的查表法都与实际的正确CRC16的结果有所差异,因此编写了一个小程序供自己使用.    软件的界面很简单,输入诸如“010303020014”的值,然后每2个字符作为一个字节…
CRC校验(循环冗余校验)小知识 CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性. CRC算法参数模型解释: NAME:参数模型名称. WIDTH:宽度,即CRC比特数. POLY:生成项的简写,以16进制表示.例如:CRC-32即是…
CRC-16/MODBUS的多项式为:x16+x15+x2+1(8005),宽度为16.运算时,首先将一个16位的寄存器预置为11111111 11111111,然后连续把数据帧中的每个字节中的8位与该寄存器的当前值进行运算.仅仅每个字节的8位数据位参与生成CRC. 在生成CRC时,每个字节的8位与寄存器中的内容进行异或,然后将结果向低位位移,高位则用0补充,最低位(LSB)移出并检测,如果是1,该寄存器就与一个预设的固定值(0A001H)进行一次异或运算,如果低位为0,不作任何处理. 上述处理…
目录 1.背景介绍 2. CRC校验的三种方法 2.1. 直接计算CRC校验 2.2. 查短表法计算CRC16校验 2.3.查大表法计算CRC16校验 3.三种校验方式的测试方法 3.1.直接计算CRC校验的时间测试 3.2.查短表计算CRC校验的时间测试 3.3.查长表计算CRC校验的时间测试 4.校验结果的测试 4.1. CRC静态帮助类中的校验结果方法 4.2. CRC验证方法的顶层调用 5. 不同校验方式的性能差异 6. 结果输出 7.小结 1.背景介绍 主要应用场景在物联网中,底端设备…
开始使用 http://cht.nahua.com.tw/index.php?url=http://cht.nahua.com.tw/software/crc16/&key=Modbus,%20RTU,%20CRC16&title=計算%20Modbus%20RTU%20CRC16 向寄存器40125写入数据:0x0066(十六进制的0066),40125-40000-1=124,转成十六进制即可得到:0x007C, 十进制124=十六进制7C 报文: 01 06 00 7C 00 66…
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WaterBubbleCheck { public class Crc { /// <summary> /// 判断数据中crc是否正确 /// </summary> /// <param name="datas&qu…
文章首发于浩瀚先森博客 CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验.它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制.实际上,除 数据通信外,CRC在其它很多领域也是大有用武之地的.例如我们读软盘上的文件,以及解压一个ZIP文件时,偶尔会碰到"Bad CRC"错误,由此它在数据存储方面的应用可略见一斑. 差错控制理论是在代数理论基础上建立起来的.这里我们着眼于介绍CRC的算法与实现,对原理只能捎带…
typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #define CRC_POLY_16 0xA001 #define CRC_START_MODBUS 0xFFFF ]; static bool crc_tab16_init = false; static void init_crc16_tab(void) { uint16_t i; uint16_t j…
function CheckCrc16(const ABuf; ALen: Integer): Boolean;var uwTemp: WORD; i, j: BYTE; P: PByte;begin  Result := False; P := PByte(@ABuf); uwTemp := $FFFF;  for i := 1 to ALen do  begin    uwTemp := uwTemp xor P^;    for j := 1 to 8 do    begin       …
我的Modbus Slave/Client开发历程(Rtu/AscII/Tcp) 分类: [自动化]2007-07-19 10:04 34038人阅读 评论(38) 收藏 举报 vb嵌入式dostcp语言医疗 其实很早就想写写关于Modbus的开发历程,但牵扯项目较多,不同语言版本较多,头绪繁杂,一时不知从何写起.最近的医疗项目的通信部分,重新调整为Modbus协议,并且内容几乎涵盖了Modbus的方方面面(Rtu/Tcp,Slave/Client相关开发),所以更坚定了写Modbus信心,今天…
修订版 1.0,1999 年3 月29 日Andy SwalesSchneider 电气公司aswales@modicon.com目录目录............................................................................................................................ 21.该规范的发展概况.............................................…
附:http://www.360doc.com/content/14/0214/13/15800361_352436989.shtml 一.Modbus 协议简介 Modbus 协议是应用于电子控制器上的一种通用语言.通过此协议,控制器相互之间.控制器经由网络(例如以太网)和其它设备之间可以通信.它已经成为一通用工业标准.有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控. 此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的.它描述了一控制器请求访问其它设备…
简介 公司给的一个小任务,这篇文章进行详细讲解 题目: modbus串口通讯 主要内容如下: 1.实现使用modbus通讯规约的测试软件: 2.具有通信超时功能: 3.分主站从站,并能编辑报文.生成报文等: 4.计算发送报文次数,接收报文次数,失败通信次数: 5.对接收的数据进行解析. 下面图片可以看出具体的内容: 知识点讲解 该小软件使用的知识如下: 1.modbus通信规约: 2.串口通讯: 3.定时器: 4.多线程: 1.modbus通讯规约 modbus是一个工业上常用的通讯协议,一个通…
摘要 工业控制已从单机控制走向集中监控.集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便.Modbus就是工业控制器的网络协议中的一种. 关键词 Modbus协议,串行通信,LRC校验,CRC校验,RS-232C 1. Modbus 协议简介 Modbus 协议是应用于电子控制器上的一种通用语言.通过此协议,控制器相互之间.控制器经由网络(例如以太网)和其它设备之间可以通信.它已经成为一通用工业标准.有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控. 此协议定义了一…
转自:http://www.51hei.com/bbs/dpj-23230-1.html 在工业控制.电力通讯.智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换.最初采用的方式是RS232接口,由于工业现场比较复杂,各种电气设备会在环境中产生比较多的电磁干扰,会导致信号传输错误.除此之外,RS232接口只能实现点对点通信,不具备联网功能,最大传输距离也只能达到几十米,不能满足远距离通信要求.而RS485则解决了这些问题,数据信号采用差分传输方式,可以有效的解决共模干扰问题,最大距离可以…
一.Modbus 协议简介     Modbus 协议是应用于电子控制器上的一种通用语言.通过此协议,控制器相互之间.控制器经由网络(例如以太网)和其它设备之间可以通信.它已经成为一通用工业标准.有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控. 此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的.它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录.它制定了消息域格局和内容的公共格式.    当在一Modbus网络上…
转载:https://www.cnblogs.com/DreamRecorder/p/9081127.html 一.Modbus 协议简介     Modbus 协议是应用于电子控制器上的一种通用语言.通过此协议,控制器相互之间.控制器经由网络(例如以太网)和其它设备之间可以通信.它已经成为一通用工业标准.有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控. 此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的.它描述了一控制器请求访问其它设备的过程,如果回应…
Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式. 所以这也是我们工控领域软件开发的所必懂的通讯协议,我也是初次学习,先贴上我的学习笔记 一 .协议概述 (1)Modbus协议是应用于控制器上的一种通用语言,实现控制器之间,控制器通过网络和其他设备之间的通信,支持传统RS232/RS422/RS485和以太网设备,它已经成为一种通用的工业标准,有了它不同厂商生产的控制设备可以连成工业网络,进行集中控制,此协议定义了一个控制器能认识使用的…
为确保消息数据的完整性,除了验证消息CRC之外,建议实现检查串行端口(UART)成帧错误的代码.如果接收消息中的CRC与接收设备计算的CRC不匹配,则应忽略该消息.下面的C语言代码片段显示了如何使用逐位移位和异或运算来计算Modbus消息CRC.使用消息帧中的每个字节计算CRC,除了包含CRC本身的最后两个字节. 参考:https://www.cnblogs.com/skullboyer/p/8342167.html 一.CRC16校验码的使用 现选择最常用的CRC-16校验,说明它的使用方法.…
为确保消息数据的完整性,除了验证消息CRC之外,建议实现检查串行端口(UART)成帧错误的代码.如果接收消息中的CRC与接收设备计算的CRC不匹配,则应忽略该消息.下面的C语言代码片段显示了如何使用逐位移位和异或运算来计算Modbus消息CRC.使用消息帧中的每个字节计算CRC,除了包含CRC本身的最后两个字节. 参考:https://www.cnblogs.com/skullboyer/p/8342167.html 一.CRC16校验码的使用 现选择最常用的CRC-16校验,说明它的使用方法.…