claude-3.5-sonnet 编写的Modbus CRC16校验函数

mndsoft 2月前 277

这个示例总共问了 Claude 3.5 Sonnet 2次,第一次 十六进制字符串转换为字节数组 函数错误,然后提示了下,第2次就正确了。

发现Claude 3.5 Sonnet很贴心,注释,解释都很本地化,并给出恰当的示例,感觉对中文的理解能力很强。

Claude 3.5 Sonnet 对于记不住一些函数,计算等确实提供了很大的便利。

当然,提示词很重要。

import win.ui;
import console
/*DSG{{*/
var winform = win.form(text="Modbus CRC-16 校验示例";right=759;bottom=469)
winform.add(
button={cls="button";text="计算 CRC";left=10;top=50;right=100;bottom=80;z=2};
edit={cls="edit";left=10;top=10;right=749;bottom=40;edge=1;z=1};
static={cls="static";text="CRC 结果:";left=110;top=55;right=749;bottom=75;z=3}
)
/*}}*/

// Modbus CRC-16 校验函数
modbusCRC16 = function(data) {
    var crc = 0xFFFF;
    for(i=1; #data; 1) {
        crc = crc ^ data[i];
        for(j=1; 8; 1) {
            if(crc & 0x0001) {
                crc = (crc >> 1) ^ 0xA001;
            } else {
                crc = crc >> 1;
            }
        }
    }
    return crc;
}

// 将十六进制字符串转换为字节数组
function hexStringToTable(hexStr) {
    var parts = string.split(hexStr," ");
    var table = {};
    for(i = 1; #parts; 1) {
        table[i] = tonumber(parts[i],16);
    }
    return table;
}


// 按钮点击事件
winform.button.oncommand = function(id,event){
    var inputStr = winform.edit.text;
    var tab = hexStringToTable(inputStr)
    
    var crc = modbusCRC16(tab);
    
    // CRC 结果(低字节在前,高字节在后)
    var crcLow = crc & 0xFF;
    var crcHigh = (crc >> 8) & 0xFF;
    
    var result = string.format("CRC: 0x%04X (低字节: 0x%02X, 高字节: 0x%02X)",crc, crcLow, crcHigh);
    //var result = string.format("%02X",crcLow) ++ " " ++ string.format("%02X",crcHigh)
    winform.static.text = result;
}

// 设置默认文本
winform.edit.text = "01 31 F0 00 00 00 00 14 00 1E 00 00 00 32 00 3C 00 00 00 50 00 5A";

winform.show();
win.loopMessage();


最新回复 (4)
  • Viewer8122 2月前
    0 2
    666 多多分享ai使用心得。 对了,你使用校长配置的,还是你自己的?
  • mndsoft 2月前
    0 3
    自己弄了一个,年纪大了,记不住一些东西,Claude 3.5 Sonnet 可以帮助,哈哈
  • dzkaiwen 2月前
    0 4
    好东西!
  • 光庆 2月前
    0 5
    666
返回