昆仑通态, 脚本计算 标准modbus rtu 16 的 CRC字节 , 因为自带函数 标准modbus rtu 16 有问题.
局部变量定义 Dim 输入HEX字符串 As string 待计算CRC的原始HEX串如 0102AF0CDim CRC寄存器 As integer CRC累加寄存器初始值 0xFFFFDim CRC多项式 As integer 多项式 0xA001反转后的0x8005Dim 字节个数 As integer 输入HEX串包含的字节数Dim CRC_i As integer 外层循环计数字节序号从1开始Dim CRC_j As integer 内层循环计数移位次数1~8Dim 字节字符串 As string 当前处理的2位16进制字符对Dim 当前字节 As integer 当前字节的数值Dim CRC低八位 As integer 寄存器低8位暂存Dim CRC最低位 As integer 寄存器最低位暂存Dim CRC全字符串 As string CRC格式化后的4位16进制字符串Dim CRC低字节字符串 As string CRC低字节2位16进制Dim CRC高字节字符串 As string CRC高字节2位16进制Dim CRC结果字符串 As string 最终CRC低字节在前Dim 完整帧字符串 As string 输入 CRC 的完整帧测试输入实际使用时改为外部赋值或删除输入HEX字符串 0102AF0CCRC寄存器 65535 初始值 0xFFFFCRC多项式 40961 0xA001字节个数 !Len(输入HEX字符串) / 2CRC_i 1WHILE CRC_i 字节个数取第i个字节的16进制字符对转成数值字节字符串 !Mid(输入HEX字符串, (CRC_i - 1) * 2 1, 2)当前字节 !Hex2I(字节字符串)寄存器低8位与当前字节异或CRC低八位 !BitAnd(CRC寄存器, 255)CRC寄存器 !BitAnd(CRC寄存器, 65280) !BitXor(CRC低八位, 当前字节)每个字节循环右移8次CRC_j 1WHILE CRC_j 8CRC最低位 !BitAnd(CRC寄存器, 1)CRC寄存器 CRC寄存器 \ 2IF CRC最低位 1 THENCRC寄存器 !BitXor(CRC寄存器, CRC多项式)ENDIFCRC_j CRC_j 1ENDWHILECRC_i CRC_i 1ENDWHILE格式化为4位16进制字符串不足补0CRC全字符串 !I2Hex(CRC寄存器)WHILE !Len(CRC全字符串) 4CRC全字符串 0 CRC全字符串ENDWHILE拆高低字节并交换低字节在前Modbus RTU 帧序CRC低字节字符串 !Right(CRC全字符串, 2)CRC高字节字符串 !Left(CRC全字符串, 2)CRC结果字符串 CRC低字节字符串 CRC高字节字符串完整帧 输入 CRC完整帧字符串 输入HEX字符串 CRC结果字符串多联机工程师信息页.控件8.Text CRC结果字符串