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

By admin at 2019-09-09 • 2人收藏 • 2507人看过

如题:

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 :

已改

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...