当前位置: 首页 > 知识库问答 >
问题:

Modbus读取成功,但Modbus写入返回null(使用最少的Modbus)

彭高畅
2023-03-14
    # serial line
    import traceback
    import minimalmodbus as mmRtu

    regsSp = 6
    portName = 'com4'
    baudrate = 9600

    timeoutSp = 0.5 + regsSp * 0
    mmc = mmRtu.Instrument(portName,5,mode=mmRtu.MODE_RTU)
    mmc.serial.baudrate = baudrate
    mmc.serial.timeout = timeoutSp
    mmc.serial.parity = 'O'

    tb = None
    errCnt = 0
    mmc.address = 5
    try:
        data = mmc.read_registers(3, 6)
    except:
        tb = traceback.format_exc()
        errCnt += 1
    mmc.serial.close()
    print(errCnt)
    print(data)

但是,我的write_register在这里失败了。我正在读取设备的第5寄存器。代码如下所示。

    # serial line
    import traceback
    import minimalmodbus as mmRtu

    regsSp = 6
    portName = 'com4'
    baudrate = 9600

    timeoutSp = 0.5 + regsSp * 0
    mmc = mmRtu.Instrument(portName,5,mode=mmRtu.MODE_RTU)
    mmc.serial.baudrate = baudrate
    mmc.serial.timeout = timeoutSp
    mmc.serial.parity = 'O'

     tb = None
    errCnt = 0
    mmc.address = 5
    try:
        data = mmc.read_registers(3, 6)
    except:
        tb = traceback.format_exc()
        errCnt += 1
    mmc.serial.close()
    print(errCnt)
    print(data)

回溯(最近的调用为last):文件“C://users/admin/pycharmprojects/weight_calibrate/weight_calibrate.py”,第17行,在mmc.write_register(4,5,0,6,False)文件“C:\users\admin\appdata\local\programs\python\python36\lib\site-packages\minimalmodbus-0.7-py3.6.geg\minimalmodbus.py”,第296行,在write_register self._genericcommand(\minimalmodbus-0.7-py3.6.egg\minimalmodbus.py“,第697行,在_genericcommand payloadFromSlave=self._performcommand(functioncode,payloadToSlave)文件”C:\users\admin\appdata\local\programs\python\python36\lib\site-packages\minimalmodbus-0.7-py3.6.egg\minimalmodbus.py“,第795行,在_performcommand响应=self._communction,Bus.py”,第930行,在_Communication raise IOError(“与仪器无通信(无应答)”)OSERROR:与仪器无通信(无应答)

我已经检查了请求中的数据包是完美的,甚至CRC。然而,来自设备的响应是空的,这就是代码失败的地方。

    if len(answer) == 0:
        raise IOError('No communication with the instrument (no answer)')

我可以使用简单的modbus Master8.0.7工具写到我的设备的寄存器,在这两种情况下,请求数据包具有相同的内容。这表明我有写端口的权限。另外,由于即使是读操作实际上也会将请求写入端口,所以我认为文件权限可能不是问题所在。

我还尝试了modbus_tk库,在这种情况下也失败了。

共有1个答案

晋俊贤
2023-03-14

我从未使用过这个库,但您似乎是以以下方式调用write_register函数的:

write_register(4, 5, 0, 6, False)
 类似资料:
  • Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的。事实上,它已经成为工业领域通信协议标准,并且现在是工业电子设备之间相当常用的连接方式。Modbus比其他通信协议使用的更广泛的主要原因有: 公开发表并且无版税要求 相对容易的工业网络部署 对供应商来说,修改移动原生的位或字节没有很多限制 Modbus允许多个设备连接在同一个网络上进行通信,举个例

  • 找了一些modbus的开源库,很多没有实现收发分离,借此自己写了一个开发库,也是为了向各位请教,能够指出开发过程中的一些疑问!项目目前只是一个雏形,还不是很完善,希望大家多多指点!

  • iot-modbus 是一个物联网通讯协议。 基础架构采用Spring Boot2.x + Netty4.X + Maven3.6.x 日志采用 logback。 使用 netty 通讯实现 java 控制智能设备。 支持COM(串口)和TCP协议,支持服务端和客户端两种模式。 同时支持设备组多台设备高并发通讯。 采用工厂设计模式,代码采用继承和重写的方式实现高度封装,可作为SDK提供封装的接口,

  • 问题内容: 我必须使用串行接口控制Modbus设备。我没有使用modbus的经验。但是我的简短研究发现了几个Modbus库 pymodbus 最小Modbus Modbus-tk uModbus 优点/缺点是什么,还有更好的替代方法吗? 问题答案: 大约在同一时间,我遇到了同样的问题-为python modbus master实现选择哪个库,但对于串行通信(modbus RTU),则我的观察仅对m

  • 我正试图使用ARM板上的UART连接从RS485适配器读取寄存器,但没有成功 ARM板:CM-T335-TI AM335x Computer-on-Module http://www.computerab.co.il/products/Computer-on-modules/CM-T335/ PC:运行Ubuntu的x86计算机 从设备:Elnet Pico(能量功率计)-作为modbus从设备工

  • 我可以读它,修改标志,然后写回来,但这是正确的方法吗? 我见过一些写线圈的命令,但我不太确定线圈是什么--是不是有点?如果是,如何得到线圈的地址?