MCGS组态屏CRC16(Modbus)校验计算脚本
说明:该脚本可对任意字节长度的字符型变量进行CRC校验码计算,首先在实时数据库中新建以下变量:
inputString——字符型
stringLength——数值型
mid_n——数值型
CRCFull——数值型
CRCLSB——数值型
i——数值型
CRC1——字符型
CRC0——字符型
CRC码——字符型
然后编写脚本代码:
stringLength=!len(inputString) '读取字符串长度
mid_n=1 '计数变量
CRCFull=65535 '0XFFFF
while(mid_n<=stringLength)
i=0
CRCFull=!BitXor(CRCFull,!Hex2I(!mid(inputString,mid_n,2))) '按位异或
while(i<8)
CRCLSB=!BitAnd(CRCFull,1)
IF CRCLSB=1 THEN
CRCFull=!BitAnd(!BitRShift(CRCFull,1),32767)
CRCFull=!BitXor(CRCFull,40961) 'A001对应40961
ELSE
CRCFull=!BitAnd(!BitRShift(CRCFull,1),32767)
ENDIF
i=i+1
endwhile
mid_n=mid_n+2
endwhile
CRC1=!I2Hex(!BitAnd(!BitRShift(CRCFull,8),255)) '高八位
CRC0=!I2Hex(!BitAnd(CRCFull,255)) '低八位
CRC码=CRC1+CRC0
将该脚本嵌入策略或其他模块,即可运行。
程序运行结果:
例如 inputString 为 “010600030001”,经脚本计算,CRC码为 “0AB8”