按照《Modbus TCP&modbus rtu协议库 上位机开发 》 axuanup 5月前 提供的程序,
测试了 03功能,很成功。
但是测试04功能时,却中断,执行不下去。
改动如下:
mainForm.button_读单个寄存器.oncommand = function(id, event) {
var addr = mainForm.edit_单寄存器地址.text;
var regValue = mainForm.edit_单寄存器值.text;
var id = mainForm.edit_TCP_id.text
var v = m.readInputRegisters(id, addr, 1) //****此句由原保持寄存器改为输入寄存器。
mainForm.edit_单寄存器值.text = tonumber(v[1], 16);
}
出现的错误是
查modbus库,
//04功能码,读输入寄存器
readInputRegisters = function(id, addr, count) { //源库没有参数,我后来加上的
if (this.handle) {
var buff = ..raw.buffer(tonumber(count) * 2)
self.ZMB_ReadInputReg(this.handle, id, addr, count, buff, 0) //原 buff 改为 num。值为 null 失败,后又改回来。
var arr = ..string.split(..string.trimright(..string.replace(..string.hex(buff, ""), "(....)", "\1 "), " "), " ")
for (i = 1; #arr; 1) {
arr[i] = ..string.format("%02X%02X", tonumber(arr[i], 16) % 256, tonumber(arr[i], 16) / 256) //高位和低位转换
}
//返回一个表
return arr;
}
}
//程序运行到此,自动终止程序,“” 预期number 实际获取 buffer“”
不知道如何解决,请大佬费心帮忙,