以前一直用LAD写程序的,两三天前想写个CRC16的FC,发现用LAD不好搞定。查查资料,决定用STL编写。因为以前没用过STL,所以比较费力。现在已经写好了,运算结果与网上下载的CRC16计算器算出的结果一致。各位高手看看那些地方需要改进。如下:
接口:
IN: start_add DInt 起始地址
count Int 校验字节数
DB_No Int 数据块号
OUT: CRC_hi Byte 校验结果高字节
CRC_lo Byte 校验结果低字节
TEMP: TEMP1 Int 0.0 DB块地址寄存器
TEMP2 Int 2.0 校验寄存器
TEMP3 Int 4.0 校验字节数计数
TEMP4 DInt 6.0 地址指针寄存器
TEMP5 Int 10.0 校验位计数
程序代码:
L #DB_No
T #TEMP1
OPN DB [#TEMP1] //打开数据块
L W#16#FFFF
T #TEMP2 //初始化校验寄存器
L #start_add
SLD 3
T #TEMP4 //地址指针寄存器
L #count //装载校验字节数计数初值
lab1: T #TEMP3 //循环1开始
L DBB [#TEMP4]
L LB 3
XOW //低字节异或
T LB 3
L #TEMP4
L P#1.0
+D
T #TEMP4
L 8 //装载校验位计数初值
lab2: T #TEMP5 //循环2开始
L #TEMP2
SRW 1
JP x001 //如果移出位为1跳转x001
JU x002 //否则跳转x002
x001: T #TEMP2
L #TEMP2
L W#16#A001
XOW //字异或
x002: T #TEMP2
L #TEMP5
LOOP lab2 //循环2结束
L #TEMP3
LOOP lab1 //循环1结束
L LB 2
T #CRC_hi //校验结果高字节
L LB 3
T #CRC_lo //校验结果低字节
哈哈,献丑了。