QQ登录

只需一步,快速开始

威纶通触摸屏宏指令,通讯校验函数,详解与实操

[ 复制链接 ]
我们知道工业控制,通讯是很常用的一种功能。
威纶自带支持市面上绝大多数品牌硬件的通讯。
但市场之大,它支持是也只是
常见的品牌。所以我们掌握
宏通讯相关的指令就尤为重要。
因为我们可以通过宏让触摸屏
和任意硬件通讯。如图,这小
节我们介绍校验码计算函数。

威纶通触摸屏宏指令,通讯校验函数,详解与实操

威纶通触摸屏宏指令,通讯校验函数,详解与实操



校验码计算分类下的函数有4个,
ADDSUM. XORSUM,BCC ,CRC。
但常用的也就两个, ADDSUM 和CRC。
我们在实践这四个函数前,
可以事先准备一个数值显示元件,
用于将函数执行的结果显示出来。
元件我们设计其读写地址为LW0,
格式设计为16位16进制格式。
如下图

威纶通触摸屏宏指令,通讯校验函数,详解与实操

威纶通触摸屏宏指令,通讯校验函数,详解与实操

1.ADDSUM.
函数使用算术和计算数据的校验码。
也就是传递一维数组,计算数组元素的总和。
例如
char data[5] ={1,2,3,4,5}
short checksum
ADDSUM(data[0],checksum,5)
SetData(checksum, "Local HMI", LW, 0, 1)
结果checksum=1+2+3+4+5=0XF

2.XORSUM,BCC
函数XORSUM使用算术异或计算数据的校验码。
也就是传递一维数组,计算数组元素的异或结果。
函数BCC等同于XORSUM。
例如
char data[5] ={1,2,3,4,5}
short checksum
//BCC(data[0], checksum, 5)
XORSUM(data[0], checksum, 5)
SetData(checksum, "Local HMI", LW, 0, 1)
结果checksum = 1^2^3^4^5=0X1

3.CRC。
函数使用16位循环冗余校验法计算数据的校验码。
CRC算法在通讯里是一种很常用的校验码计算方法。
分类很多,算法也挺复杂。
当前威纶使用的是CRC-16/MODBUS类型的CRC算法。
因为是一种很流行的算法,所以网络资源很多,有在线计算器,有现成C++代码。
算法可以总结为下面几个步骤,我们在使用函数时,
并不需要知道计算过程,所以简单了解下就好。
1)CRC寄存器初始值为 FFFF;即16个字节全为1;
2)CRC-16 / MODBUS的多项式A001H
算步骤为:
(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 码。

例如
char data[5] ={0x1,0x2,0x3,0x4,0x5}
short checksum
CRC(data[0], checksum, 5)
checksum = 0XBB2A

我们可以在宏编辑界面里执行下面每个函数,查看执行结果。
macro_command main()
char data[5] ={0x1,0x2,0x3,0x4,0x5}
short checksum
//ADDSUM(data[0], checksum, 5)
//BCC(data[0], checksum, 5)
//XORSUM(data[0], checksum, 5)
CRC(data[0], checksum, 5)
SetData(checksum, "Local HMI", LW, 0, 1)
end macro_command


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索