1 modbus_set_master_parameter - 设置ModbusRTU主站参数
方法: modbus_set_master_parameter(socketFd, master_id, param)
参数:
socket_fd:连接句柄
master_id:主站ID(0~8)
param:Modbus主站参数对象(包含RTU串口配置)
返回值:
使用示例:
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)
返回值:
使用示例:
在打开前先配置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:待写入的数据列表
返回值:
使用示例:
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:读取到的数据(输出向量)
返回值:
使用示例:
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执行完毕!" )