上位机计算modbus的CRC16校验值的程序

By admin at 2019-09-09 • 0人收藏 • 1371人看过

如题:

import console; 
//计算modbus的CRC16校验值
var modbus_calc_CRC=function(pucCommandData,ucCommandLen){
	var  usCRC = 0xFFFF;

    for(i=1;ucCommandLen;1){
    	usCRC ^= pucCommandData[i];
    	for(j=1;8;1){
    		if (usCRC & 1)
            {
                usCRC >>= 1;
                usCRC ^= 0xA001;
            }
            else
            {
                usCRC >>= 1;
            }
    	}
    }
    //低字节在前
    pucCommandData[ucCommandLen + 1] = usCRC&0x0ff;
    //高字节在后
    pucCommandData[ucCommandLen + 2] = (usCRC >> 8) & 0x0ff;
    return pucCommandData;
}
//举例
var tab = {0x12;0x22};
//计算
var ret = modbus_calc_CRC(tab,#tab);
for(i=1;#ret;1){
    //输出结果
	console.log( string.format("%02X",ret[i]) );
}

console.pause(true);

image.png

4 个回复 | 最后更新于 2021-12-05
2021-12-02   #1

捉bug,里面循环的变量应该是j吧

2021-12-02   #2

回复#1 @sunbeam :

写成 j 是更好, , 更容易区分, 不过这里 for套for没问题因为里面第二个for没用到i只是为了循环, 并不会改变外面那个i的值.

代码里已修改.

2021-12-05   #3

回复#2 @admin :

var i,j;

完全没必要,还容易误导新人,计数器变量仅在循环内部有效

2021-12-05   #4

回复#3 @nlysh007 :

已改

登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
aardio可以快速开发上位机,本站主要记录了学习过程中遇到的问题和解决办法及aardio代码分享

这里主要专注于aardio学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.

AARDIO语言QQ群:70517368
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
C大Aardio论坛:Aar爱好者论坛
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
赞助商:才仁机械
Loading...