关于部颁CDT规约中校验码的算法
摘 要 :用实际应用中的简单例子,详细介绍了部颁循环式远动规约(CDT)规约中校验码的计算方法。
关键词:CRC 编码 规约 算法
在电力系统计算机通信过程中,由于信道大多是为传输语音设计的,能达到的误码率仅在10-3~10-5范围内,若再考虑天气、人为等各种因素的影响,误码率会更高,要显著改善这一指标,只能借助各种差错控制技术,而差错控制的核心就是校验编码,其中循环冗余校验码(简称CRC校验)更是一种得到广泛应用的校验方法,在部颁循环式远动规约中,即采用了CRC校验,但是,对CRC校验码的具体算法作详细说明的书籍、资料却相对较少,笔者总结了实际工作中的具体经验,在翻阅大量参考资料的基础上,对这一部分作简要说明,希望能对广大电力系统通信、自动化人员现场的实际工作起到一些帮助作用。
1 校验的基本原理
站端的远程数据终端设备(RTU)通过数模转换(A/D)将实时数据(包括YX、YC、SOE等等)转换为二进制码传送到收端,在通道传输过程中,由于线路杂音或其他各种串扰,极易使这些编排好的信息码产生错误,收端的前置机负责识别错误的信息码,在CDT规约中,前置机还负责将这些错码舍弃。那么,前置机是如何识别这些错码并将其舍弃的呢?这就用到了校验。在发端,由RTU按照规约的不同,根据所传送的具体信息计算出一个称为CRC的值附加在数据的尾部一并传送。在收端,用同样的方法生成一个CRC值,与收到的CRC值进行比较,若两个值相同,则认为信息传输是正确的,若不同,则可判别信息传输过程中有错误,于是将该错误信息字舍弃。
2 编码及校验的方法
信道编码的方法很多,常用的有奇偶校验码、奇偶加正反校验码、BCH码、等比码、卷积码等,部颁CDT规约采用的是BCH(Bose、Chaudhuri、Hocguenghem三个人名的字头缩写)码,校验方法是CRC(Cyclic Redundancy Check)校验。
3 部颁CDT规约中的CRC校验
我国微机远动系统中循环传送方式的码制是(48、40)码,这种码有两个特点:1、n-k=8,比较小;2、k=40,是n-k的整数倍。这样,编码和算法会相对容易实现一些。
我们知道,无论是控制字,还是信息字,它们的字结构是一样的,后8位均为校验码,按照部颁CDT规约,这种(48、40)码组的生成多项式为G(X)=X8+X2+X+1或G(X)=107H,陪集码为FFH。部颁CDT规约中,字节和位的排列规则是:字节由低到高上下排列,字节的位由高到低左右排列。按照这个规则,假设有一个K位的信息字,对应多项式为K(X),它的CRC值的计算方法是:用一个r(r=8)次的多项式即G(X)做除数,把在信息字尾部增添r(r=8)个0所构成的新信息字对应的多项式作为被除数,二者做模2除法,最后得到的r位余数即余式R(X)就是K(X)的CRC值校验码。
4 具体详解方法
下面举一具体例子来说明这一算法。
例:收到某站某时刻一信息字为f10000000094,我们来判断一下检验码的正确性,从中也就可以看出这个信息字是否正确。
方法一:① 首先将f10000000094写成二进制码形式,并补加8个0;
② 用上述二进制编码除以生成多项式G(X)=X8+X2+X+1,即100000111;
③ 用模2加法(即不进位加法,相同出0,相异出1)算余式;
④ 得出余式后,加陪集码FFH,即逐位取反,所得R(X)即为校验码。
111100111 ……
100000111 111100010000000000000000000000000000000000000000
100000111
0111001010
100000111
0110011010
100000111
0100111010
100000111
000111101000
100000111
0111011110
100000111
0110110010
……
1101011
1101011(D)+FF(H)=10010100(D)=94(H)
由此可判断该校验码是正确的,那么,该信息字也就是正确的。
我们还可以用如下方法(查表法)判断校验码的正确性。
方法二: ① 将40个码字分为5个8位消息段;
② 查出第一段对应的部分余式r1;
③ 用第二段M2+r1=M2ˊ,再查出M2ˊ对应的部分余式r2;
④ 以此类推,得出r5;
⑤ r5再与陪集码FFH相加,即得到最后的R(x)。
首先,将40个码字分为5个8位消息段
M1=11110001、 M2=00000000、 M3=00000000、 M4=00000000 、M5=00000000
查G(x)=X8 +X2 +X +1 生成(8i+8,8i)码的软件表,如下表所示:
0 1 2 3 4 5 6 7 8 9 a b c d e f
0 00 07 0e 09 1c 1b 12 15 38 3f 36 31 24 23 2a 2d
1 70 77 7e 79 6c 6b 62 65 48 4f 46 41 54 53 5a 5d
2 e0 e7 ee e9 fc fb f2 f5 d8 df d6 d1 c4 c3 ca cd
3 90 97 9e 99 8c 8b 82 85 a8 af a6 a1 b4 b3 ba bd
4 c7 c0 c9 ce db dc d5 d2 ff f8 f1 f6 e3 e4 ed ea
5 b7 b0 b9 be ab ac a5 a2 8f 88 81 86 93 94 9d 9a
6 27 20 29 2e 3b 3c 35 32 1f 18 11 16 03 04 0d 0a
7 57 50 59 5e 4b 4c 45 42 6f 68 61 66 73 74 7d 7a
8 89 8e 87 80 95 92 9b 9c b1 b6 bf b8 ad aa a3 a4
9 f9 fe f7 f0 e5 e2 eb ec c1 c6 cf c8 dd da d3 d4
a 69 0e 67 60 75 72 7b 7c 51 56 5f 58 4d 4a 43 44
b 19 1e 17 15 05 02 0b 0c 21 26 2f 28 3d 3a 33 34
c 4e 49 40 47 52 55 5c 5b 76 71 78 7f 6a 6d 64 63
d 3e 39 30 37 22 25 2c 2b 06 01 03 0f 1a 1d 14 13
e ae a9 a0 a7 b2 b5 bc bb 96 91 98 9f 8a 8d 84 83
f de d9 d0 d7 c2 c5 cc cb e6 e1 e8 ef fa fd f4 f3
查上表可知:
M1对应的部分余式r1=d9;
M2ˊ= M2+r1=d9, 查表r2=01;
M3ˊ= M3+r2=01, 查表r3=07;
M4ˊ= M4+r3=07, 查表r4=15;
M5ˊ= M5+r4=15, 查表r5=6b;
6b(H)+FF(H)
=01101011(D)+11111111(D)
=10010100(D)=94(H)
由此亦可判断该校验码和该信息字的正确性。
相信通过以上的例子,大家一定会对部颁CDT规约中的CRC校验方法有了一个较详尽的了解。
5 结束语
在通信方式中有同步通信方式和异步通信方式之分,CRC校验是一种多用于同步通信方式中的差错检测手段。使用CRC校验虽然不能保证100%检测错误,但它不需花费试图获得完善检测所需的巨大开销。目前,在Lonworks等信息传送技术及ARJ、PKZIP数据压缩解压技术中,CRC校验也被广泛采用,作为校验手段,效果很是显著。
以上,是针对部颁CDT规约,对CRC校验码的计算方法及应用作得一些简要说明,另外,关于这方面的计算,还可以通过编程等方法加以实现,在此,不再一一赘述。同时,由于我们水平有限,不当之处,敬请各位专家、同仁指正。
参考文献
1、部颁《循环式远动规约》
2、《数据通信技术》 汤吉群 张德民李玲·人民邮电出版社·1999
3、《通信系统原理》 张树京·中国铁道出版社 ·1989
4、《电力系统远动原理及微机远动装置》柳永智 编著·教材