CRC校验及其C语言dll文件的生成与LabVIEW调用

CRC校验及其C语言dll文件的生成与LabVIEW调用

本文将详细记录用CodeBlocks生成C语言的CRC校验的dll库文件,然后在Labview中进行调用的过程。

一、CRC校验原理

1)CRC寄存器初始值为 FFFF;即16个字节全为1;

2)CRC-16 / MODBUS的多项式A001H (1010 0000 0000 0001B) ‘H’表示16进制数,‘B’表示二进制数

计算步骤为:
(1).预置 16 位寄存器为十六进制 FFFF(即全为 1) ,称此寄存器为 CRC 寄存器;
(2).把第一个 8 位数据与 16 位 CRC 寄存器的低位相异或,把结果放于 CRC 寄存器;
(3).检测相异或后的CRC寄存器的最低位,若最低位为1:CRC寄存器先右移1位,再与多项式A001H进行异或;若为0,则CRC寄存器右移1位,无需与多项式进行异或。
(4).重复步骤 3 ,直到右移 8 次,这样整个 8 位数据全部进行了处理;
(5).重复步骤 2 到步骤4,进行下一个 8 位数据的处理;
(6).最后得到的CRC寄存器就是CRC校验码。
以0106020C000B为例,校验码为B609.

C程序如下:
#include
int main(void)
{
unsigned short tmp = 0xffff;
unsigned short ret1 = 0;
unsigned char buff[6] = {0};
buff[0] = 0x01;
buff[1] = 0x06;
buff[2] = 0x02;
buff[3] = 0x0C;
buff[4] = 0x00;
buff[5] = 0x0B;
for(int n = 0; n < 6; n++){/此处的6 – 要校验的位数为6个/
tmp = buff[n] ^ tmp;
for(int i = 0;i < 8;i++){ /此处的8 – 指每一个char类型又8bit,每bit都要处理/
if(tmp & 0x01){
tmp = tmp >> 1;
tmp = tmp ^ 0xa001;
}
else{
tmp = tmp >> 1;
}
}
}
/CRC校验后的值/
printf("%X\n",tmp);
/将CRC校验的高低位对换位置/
ret1 = tmp >> 8;
ret1 = ret1 | (tmp << 8);
printf(“ret: %X\n”,ret1);
return 0;
}

输出结果为:B609
ret1:09B6
(声明:此处借鉴了下面提到的博主文章,在其上增加了新的东西,若是侵权,留言删帖)


作者:___Eirc
来源:CSDN
原文:https://blog.csdn.net/u013625451/article/details/81239572

二、生成CRC校验的dll文件

1、在codeblocks中选中Dynamic Link Library,新建项目:
CRC校验及其C语言dll文件的生成与LabVIEW调用_第1张图片
2、新建的项目中包含main.cpp和mian.h文件,根据需要将这两个文件重新命名
CRC校验及其C语言dll文件的生成与LabVIEW调用_第2张图片
3、将C程序改写进这两个文件,编译检查无错后,选中项目名La-CRC,右键Build,即可在…\La-CRC\bin\Debug下生成La-CRC.dll文件。
CRC校验及其C语言dll文件的生成与LabVIEW调用_第3张图片
CRC校验及其C语言dll文件的生成与LabVIEW调用_第4张图片
CRC校验及其C语言dll文件的生成与LabVIEW调用_第5张图片

三、LabVIEW调用dll文件

1、新建VI,在后面板程序右键出现函数菜单,如下图选择调用库函数节点
CRC校验及其C语言dll文件的生成与LabVIEW调用_第6张图片
2、双击该图标节点或者右键选择配置:按照自己保存已生成dll文件的路径添加到库名/路径,下拉函数菜单,选择给定的函数名;
CRC校验及其C语言dll文件的生成与LabVIEW调用_第7张图片
参数的设定需要根据自己的输入输出设置输入参数和返回类型。我的输入参数由6个,类型为数值,数据类型为无符号8位整型;返回类型为数值,数据类型为无符号16位整型;然后确定保存设置。
CRC校验及其C语言dll文件的生成与LabVIEW调用_第8张图片
CRC校验及其C语言dll文件的生成与LabVIEW调用_第9张图片
3、添加输入输出控件,并将输入输出控件的数据显示格式设置为十六进制
CRC校验及其C语言dll文件的生成与LabVIEW调用_第10张图片
CRC校验及其C语言dll文件的生成与LabVIEW调用_第11张图片
至此,就完成了LabVIEW的dll文件调用
验证输入:0106020C000B
CRC校验及其C语言dll文件的生成与LabVIEW调用_第12张图片
结果:09B6

标题结语

第一次写博客,只是想将自己做出来的小东西与大家分享,为需要的人提供小小的帮助,仅仅是抛砖引玉,写的不好的地方还请见谅!

你可能感兴趣的:(CRC校验及其C语言dll文件的生成与LabVIEW调用)