You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pymodbus写入保持寄存器报错‘required argument is not an integer’求助

问题分析与解决

可能的错误原因及对应解决方案

1. 参数类型不匹配(最可能)

报错required argument is not an integer说明传入的某个参数不是整数类型,重点检查以下几点:

  • 地址参数类型:确认modbus_address_reset(或直接写的41023)是整数而非字符串。如果是从配置文件/输入读取的地址,必须转换为整数:
    modbus_address_reset = int(41023)  # 确保是整数类型
    
  • 写入值的类型:单寄存器写入时,value必须是整数,若传入浮点数会触发类型错误(比如write_register(41023, 0.0, unit=1)就会报错,需改为0)。

2. 类初始化方法错误

你的类初始化方法写的是def init(self):,但Python类的标准初始化方法是__init__(双下划线)。如果没有手动调用init()方法,self.client可能未被正确创建,导致后续写入操作异常。修正为:

class modbusRW(object):
    def __init__(self, method, port, stopbits, bytesize, baudrate, timeout):
        self.method = method
        self.port = port
        self.stopbits = stopbits
        self.bytesize = bytesize
        self.baudrate = baudrate
        self.timeout = timeout
        self.client = ModbusClient( 
            method=self.method,
            port=self.port,
            parity='N',
            stopbits=self.stopbits,
            bytesize=self.bytesize,
            baudrate=self.baudrate,
            timeout=self.timeout)

实例化时直接传入参数,无需手动调用初始化方法。

3. BinaryPayloadBuilder使用问题

确保已导入Endian常量,否则会触发其他错误,同时确认build()返回的是整数列表:

from pymodbus.constants import Endian

# 打印payload确认类型
print(payload_reset)  # 正常应为[0, 0]这样的整数列表

另外,write_registers的count参数是可选的,可省略(会自动取len(values)作为计数),避免手动传入时出现不匹配:

result_reset = self.client.write_registers(
            address=modbus_address_reset,
            values=payload_reset,
            unit=modbus_unit)

4. 客户端连接状态问题

确保connect()方法正确调用了客户端的连接逻辑,比如:

def connect(self):
    return self.client.connect()

写入前可检查连接状态:

if not self.connect():
    print("连接失败")
    return

验证步骤

  1. 在写入代码前添加类型检查:
    print(type(modbus_address_reset))  # 应为<class 'int'>
    print(type(payload_reset[0]))       # 应为<class 'int'>
    
  2. 用最简代码测试写入:
    # 直接创建客户端测试,排除类的问题
    client = ModbusClient(method='rtu', port='COM3', baudrate=9600, timeout=1)
    if client.connect():
        result = client.write_register(41023, 0, unit=1)
        print(result)
        client.close()
    

内容的提问来源于stack exchange,提问作者CTAspec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 14:54:55