Modbus通信接口

1 modbus_set_master_parameter - 设置ModbusRTU主站参数

方法: modbus_set_master_parameter(socketFd, master_id, param)

参数:

  • socket_fd:连接句柄
  • master_id:主站ID(0~8)
  • param:Modbus主站参数对象(包含RTU串口配置)

返回值:

  • int:执行结果
    • 0:成功
    • 非0:失败,错误码见错误码详情

使用示例:

Python
#1 配置ModbusRTU参数
param = nrc.ModbusMasterParameter()
param.type = "RTU"
param.startAddress = True  # False=地址从1开始
#RTU串口参数
param.RTU.slaveId = 2  # 从站ID
param.RTU.port = 2  # 串口号 控制器都是接到串口2
param.RTU.baudrate = 115200  # 波特率
param.RTU.checkBit = "None"  # 校验位
param.RTU.dataBit = 8  # 数据位
param.RTU.stopBit = 1  # 停止位

#2 写入主站参数
ret = nrc.modbus_set_master_parameter(arm_test.socket_fd, master_id, param)
arm_test.logger.info(f"设置ModbusRTU参数返回值(ret)={ret}")
if ret != nrc.SUCCESS:
    arm_test.logger.error("设置ModbusRTU参数失败")
else:
    arm_test.logger.info("设置ModbusRTU参数成功")

2 modbus_open_master - 打开Modbus主站

方法: modbus_open_master(socketFd, master_id)

参数:

  • socketFd:连接句柄
  • master_id:主站ID(0~8)

返回值:

  • int:执行结果
    • 0:成功
    • 非0:失败,错误码见错误码详情

使用示例:

在打开前先配置ModbusRTU参数

Python
#打开Modbus主站
ret = nrc.modbus_open_master(arm_test.socket_fd, master_id)
arm_test.logger.info(f"打开Modbus主站返回值(ret)={ret}")
if ret != nrc.SUCCESS:
    arm_test.logger.error("打开Modbus主站失败")
else:
    arm_test.logger.info("打开Modbus主站成功")
time.sleep(1)

3 modbus_write_multiple_holding_registers - 写多个保持寄存器

方法: modbus_write_multiple_holding_registers(socket_fd, master_id, address, data)

参数:

  • socket_fd:连接句柄
  • master_id:主站ID(0~8)
  • address:寄存器起始地址
  • data:待写入的数据列表

返回值:

  • int:执行结果
    • 0:成功
    • 非0:失败,错误码见错误码详情

使用示例:

Python
control_data = [20000, 0, 0, 0, 0]
ret = nrc.modbus_write_multiple_holding_registers(
    socketFd,
    master_id,
    1135,  # 起始地址
    control_data  # 数据
)
if ret != nrc.SUCCESS:
    print("写多个寄存器失败")
    return
print("写多个寄存器成功")
time.sleep(1)

4 modbus_read_holding_registers - ModbusRTU读取多个保持寄存器

方法: modbus_read_holding_registers(socketfd, id, address, quantity, data)

参数:

  • socketfd:连接句柄
  • id:主站ID(0~8)
  • address:寄存器起始地址
  • quantity:要读取的寄存器个数
  • data:读取到的数据(输出向量)

返回值:

  • int:执行结果
    • 0:成功
    • 非0:失败,错误码见错误码详情

使用示例:

Python
#读取寄存器验证
read_back = nrc.VectorInt()
ret = nrc.modbus_read_holding_registers(
    arm_test.socket_fd,
    master_id,
    1155,  # 起始地址
    5,      # 读取数量
    read_back
)
arm_test.logger.info(f"读取寄存器返回值(ret)={ret}")
if ret != nrc.SUCCESS:
    arm_test.logger.error("读取寄存器失败")
else:
    arm_test.logger.info("读取寄存器成功")
    arm_test.logger.info(f"[结果]读取数据:{list(read_back)}")
    arm_test.logger.info("[完成]灵巧手ModbusRTU Demo执行完毕!")