modbus库的04功能错误提示

13500720415 9月前 664

按照《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“”

不知道如何解决,请大佬费心帮忙,

最新回复 (8)
  • 小光芒 9月前
    0 2
    你这个重新编辑下 代码和文字混在一起了 论坛有 代码的功能呀
  • 13500720415 9月前
    0 3
    这全部是复制论坛代码的原文,未改动前,读取保持寄存器数据正常; 我只是将其中的 读保持寄存器的语句var v = m.readHoldingRegisters(id, addr, regValue) 改成读输入寄存器的语句var v = m.readInputRegisters(id, addr, 1)。 查modbus库,这两个语句参数完全一致,但是运行结果却不同, 因本人初学编程,基本是照葫芦画瓢,不能深刻理解参数的含义,请帮忙再详细讲解一下,不胜感激。
  • 光庆 9月前
    0 4
    看一下ZMB_ReadInputReg的第五个参数,根据函数需要的类型进行定义。
  • 13500720415 9月前
    0 5
    见上文,04功能码的第五个参数为 buff, self.ZMB_ReadInputReg(this.handle, id, addr, count, buff, 0)  //原 buff 改为 num。上一句的 var buff = ..raw.buffer(tonumber(count) * 2) 也做了相应的改动,运行后的值为 null 而失败, 以我目前的水平,根本无法对modbus 库函数进行定义,只是想作为工具使用而已,实在抱歉,不知下一步如何调试
  • axuanup 9月前
    0 6
    我来看看,不过我不怎么用这个库
  • axuanup 9月前
    0 7
    此楼层已删除
  • axuanup 9月前
    0 8
    https://aar.chengxu.online/thread-201.htm 修复了
  • 13500720415 9月前
    0 9
    很遗憾,错误依旧,见对8楼的回帖
返回
发新帖