串口调试的时候校验和怎么计算 点击:21979 | 回复:17



hyf0517

    
  • 精华:0帖
  • 求助:8帖
  • 帖子:9帖 | 16回
  • 年度积分:0
  • 历史总积分:58
  • 注册:2012年2月24日
发表于:2012-11-15 20:54:57
楼主
求助帖10分-已结帖
我想问下校验和是怎么计算的啊!例如30H+31H。又或者3AH+3BH+3CH+35H+38H是多少,怎么加的啊?



dianqisu

  • 精华:5帖
  • 求助:0帖
  • 帖子:23帖 | 804回
  • 年度积分:1
  • 历史总积分:9138
  • 注册:2008年12月19日
发表于:2012-11-16 10:33:40
1楼
ASCII 字符相加就可以了。

秦君_1

  • 精华:8帖
  • 求助:22帖
  • 帖子:148帖 | 4867回
  • 年度积分:1651
  • 历史总积分:39896
  • 注册:2005年6月28日
发表于:2012-11-16 11:11:10
2楼

有专门的计算器,在网上下载一个,不需要研究具体怎么加。例如下面这个:

1

秦君_1

  • 精华:8帖
  • 求助:22帖
  • 帖子:148帖 | 4867回
  • 年度积分:1651
  • 历史总积分:39896
  • 注册:2005年6月28日
发表于:2012-11-16 11:16:03
3楼

你实在要想自己计算,请下载台达的这个文档——台达PLC通讯协议v1.1,里面有详细计算方法。

1212

行天-王者之师

  • 精华:0帖
  • 求助:0帖
  • 帖子:13帖 | 821回
  • 年度积分:300
  • 历史总积分:4676
  • 注册:2003年1月21日
发表于:2012-11-16 12:10:30
4楼
我一直没去计算过校验值,偷懒,只用了PLC自带的指令,不管校验码。

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2012-11-16 13:10:35
5楼

首先搞清楚是仕么校验码? 校验码有很多种, 典型的Modbus 协议中 ,有 RTU 协议对应的 CRC (冗余循环校验码),ASCII     协议中的 LRC (累加和校验码) 。 还有奇偶校验 等等。

 

到网上查一下,具体的校验码 计算公式,原理。。。。。

 

一般来说,校验码 就是对通讯 数据帧 当字节流 按一定公式计算后 得出校验码!

 

龙游乾坤2007

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 215回
  • 年度积分:0
  • 历史总积分:2849
  • 注册:2010年12月23日
发表于:2012-11-16 13:58:13
6楼

校验和是吧,根据协议定义,也不一样,通常的做法是去掉头尾,将所有的字节相加,取一个自己大小作为校验和

ljbcompany

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 1289回
  • 年度积分:0
  • 历史总积分:5847
  • 注册:2011年4月24日
发表于:2012-11-21 11:00:04
7楼

(1)求和:11E;

(2)转化成2进制:100011110;

(3)然后取反:011100001;

(4)再加1:11100010 = E2(最终结果校验码)

hyf0517

  • 精华:0帖
  • 求助:8帖
  • 帖子:9帖 | 16回
  • 年度积分:0
  • 历史总积分:58
  • 注册:2012年2月24日
发表于:2012-11-30 09:37:18
8楼
回复内容:
对:秦君_1关于有专门的计算器,在网上下载一个,不需要研究具体怎么加。例如下面这个:内容的回复:


你可以发一个到我邮箱吗?好像下载都注册那些。。。395841487@qq.com

杭州双星普天

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 725回
  • 年度积分:0
  • 历史总积分:1683
  • 注册:2012年3月02日
发表于:2012-11-30 10:17:36
9楼

校验的方法很多

比如求和校验,异或校验等等吧,这类校验,只注重校验值的大小,比如校验用一个字节,前面的数据按规则进行就可以了,最后一个字节是什么就是什么,这种校验相对比较简单,速度快,但是对于多数据传输可靠性比较低。

还有比较常用的 比如CRC校验,这个校验比较可靠,用的很多,实现相对也方便,大致实现的方法有两种,从底层上讲 比如使用查表,比如按照流程对校验值进行按步骤操作最后得到CRC校验码,这个流程都是固定的,网上很多。

 

关键看你使用的是哪种校验

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2012-11-30 11:38:07
10楼

留下邮箱,我发给你一个 自己 DIY 的 码制转换工具,自带CRC 校验哦,

conny2

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 186回
  • 年度积分:97
  • 历史总积分:167
  • 注册:2012年11月30日
发表于:2012-11-30 11:50:03
11楼
我也要一個.謝謝.conny2hk@yahoo.com

研讨会宣传员_3259

  • [版主]
  • 精华:3帖
  • 求助:110帖
  • 帖子:1927帖 | 14403回
  • 年度积分:102
  • 历史总积分:64749
  • 注册:2020年3月27日
发表于:2012-11-30 15:20:13
12楼

校验方式有很多:有奇校验和偶校验,CRC校验

楼上几位说的都是CRC校验应用也比较多,下边介绍一下

CRC校验计算方法

1、循环校验码(CRC码):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

2、生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。

3、CRC码集选择的原则:若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得

V(x)=A(x)g(x)=xRm(x)+r(x);

其中:    m(x)为K次信息多项式, r(x)为R-1次校验多项式,

         g(x)称为生成多项式:

g(x)=g0+g1x+ g2x2+...+g(R-1)x(R-1)+gRxR

发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码字。

标准CRC生成多项式如下表:

   名称        生成多项式              简记式*   标准引用
  
CRC-4       x4+x+1                  3         ITU G.704
   CRC-8       x8+x5+x4+1              0x31                   
   CRC-8       x8+x2+x1+1              0x07                   
   CRC-8       x8+x6+x4+x3+x2+x1       0x5E
   CRC-12      x12+x11+x3+x+1          80F
   CRC-16      x16+x15+x2+1            8005      IBM SDLC
   CRC16-CCITT x16+x12+x5+1            1021      ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS
   CRC-32      x32+x26+x23+...+x2+x+1 04C11DB7 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS
   CRC-32c     x32+x28+x27+...+x8+x6+1 1EDC6F41 SCTP

基本算法(人工笔算):
   以CRC16-CCITT为例进行说明,CRC校验码为16位,生成多项式17位。假如数据流为4字节:BYTE【3】、BYTE【2】、BYTE【1】、BYTE【0】;
数据流左移16位,相当于扩大256×256倍,再除以生成多项式0x11021,做不借位的除法运算(相当于按位异或),所得的余数就是CRC校验码。
发送时的数据流为6字节:BYTE【3】、BYTE【2】、BYTE【1】、BYTE【0】、CRC【1】、CRC【0】;

举例:

信息字段代码为: m(x)=x6+x4+x3+1    代码为:1011001

生成多项式:    g(x)=x4+x3+1       代码为:11001

m(x)x4=x10+x8+x7+x4 对应的代码记为:10110010000     即 左移4位

m(x)x4 在与 g(x)进行 模2的除法运算,相当于按位异或,计算过程如下:

1 0 1 1 0 0 1 0 0 0 0
1 1 0 0 1
-----------------------------
0 1 1 1 1 0 1 0 0 0 0
1 1 0 0 1
-----------------------------
0 0 0 1 1 1 1 0 0 0 0
      1 1 0 0 1
-----------------------------
      0 0 1 1 1 0 0 0
          1 1 0 0 1
-----------------------------
          0 0 1 0 1 0             --------------> 余数     即 校验码

 

 

发送数据码为: 10110011010

纵横军团-棋影

  • [版主]
  • 精华:5帖
  • 求助:21帖
  • 帖子:728帖 | 5626回
  • 年度积分:78
  • 历史总积分:82244
  • 注册:2004年5月28日
发表于:2012-12-04 16:19:13
13楼
廖常初老师自己开发的串口调试助手可以计算多种校验:异或校验、求和校验、CRC校验、LRC校验等

需要的话,分给我,联系我QQ149034219。我发给你!

hyf0517

  • 精华:0帖
  • 求助:8帖
  • 帖子:9帖 | 16回
  • 年度积分:0
  • 历史总积分:58
  • 注册:2012年2月24日
发表于:2012-12-04 20:55:28
14楼
回复内容:
对:miy_gongkong关于留下邮箱,我发给你一个 自己 DIY 的 码制转换工具,自带CRC 校验哦,内容的回复:


395841487@qq.com

miy_gongkong

  • 精华:0帖
  • 求助:2帖
  • 帖子:23帖 | 3065回
  • 年度积分:0
  • 历史总积分:12421
  • 注册:2008年9月18日
发表于:2012-12-05 10:09:22
15楼
已发送给上面两位了,“ 395841487@qq.com   我也要一個.謝謝.conny2hk@yahoo.com “

any zhang

  • 精华:1帖
  • 求助:0帖
  • 帖子:79帖 | 1053回
  • 年度积分:0
  • 历史总积分:1982
  • 注册:2006年3月25日
发表于:2012-12-25 11:16:16
16楼
用vb自己写一个小软件用或者网上下载一个这样的啊!

宋小健

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2010年5月20日
发表于:2017-03-12 22:14:50
17楼

回复内容:

对: ljbcompany (1)求和:11E;(2)转化成2进制:1000111... 内容的回复!

 哥,我觉得你讲的最简单直观而且容易理解。帮我大忙了。


热门招聘
相关主题

官方公众号

智造工程师