Skip to content

Modbus 配置ModbusConfig

可用于Modbus 配置,睿尔曼机械臂在控制器和末端接口板上各提供一个RS485通讯接口,这些接口可通过接口配置为标准的Modbus RTU模式。在Modbus RTU模式下,用户可通过提供的接口对连接在端口上的外设进行读写操作。下面是Modbus配置ModbusConfig的详细成员函数说明,包含了方法原型、参数说明、返回值说明和使用示例。

注意

  • 控制器的RS485接口在未配置为Modbus RTU模式时,可用于直接控制机械臂。
  • Modbus RTU模式与机械臂控制模式不兼容。若需恢复机械臂控制模式,必须关闭该端口的Modbus RTU模式。
  • 关闭Modbus RTU模式后,系统将自动切换回机械臂控制模式,使用波特率460800BPS,停止位1,数据位8,无校验。

此外,第三代控制器还支持modbus-TCP主站配置,允许用户配置使用modbus-TCP主站,以连接外部设备的modbus-TCP从站。

配置通讯端口ModbusRTU模式rm_set_modbus_mode()

  • 方法原型:
python
rm_set_modbus_mode(self, port: int, baudrate: int, timeout: int) -> int:
  • 参数说明:
名称类型说明
portint通讯端口0-控制器RS485端口为RTU主站1-末端接口板RS485接口为RTU主站2-控制器RS485端口为RTU从站。
baudrateint支持 9600,115200,460800 三种常见波特率。
timeoutint超时时间,单位百毫秒。对Modbus设备所有的读写指令,在规定的超时时间内未返回响应数据,则返回超时报错提醒。超时时间不能为0,若设置为0,则机械臂按1进行配置。
  • 返回值: 函数执行的状态码:
参数类型说明
0int成功
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

print(arm.rm_set_modbus_mode(0,115200,2))

arm.rm_delete_robot_arm()

关闭通讯端口 Modbus RTU 模式rm_close_modbus_mode()

  • 方法原型:
python
rm_close_modbus_mode(self, port: int) -> int:
  • 参数说明:
名称类型说明
portint通讯端口0-控制器RS485端口为RTU主站1-末端接口板RS485接口为RTU主站2-控制器RS485端口为RTU从站
  • 返回值: 函数执行的状态码:
参数类型说明
0int成功
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

print(arm.rm_close_modbus_mode(2))

arm.rm_delete_robot_arm()

配置连接rm_set_modbustcp_mode()

  • 方法原型:
python
rm_set_modbustcp_mode(self, ip: str, port: int, timeout: int) -> int:
  • 参数说明:
名称类型说明
ipstr从机IP地址
portint端口号
timeoutint超时时间,单位秒
  • 返回值: 函数执行的状态码:
参数类型说明
0int成功
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

print(arm.rm_set_modbustcp_mode("192.168.1.120", 502, 2000))

arm.rm_delete_robot_arm()

关闭通讯端口ModbusRTU模式rm_close_modbustcp_mode()

  • 方法原型:
python
rm_close_modbustcp_mode(self) -> int:
  • 返回值: 函数执行的状态码
参数类型说明
0int成功
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

print(arm.rm_close_modbustcp_mode())

arm.rm_delete_robot_arm()

读线圈rm_read_coils()

  • 方法原型:
python
rm_read_coils(self, read_params: rm_peripheral_read_write_params_t) -> tuple[int, int]:

可以跳转rm_peripheral_read_write_params_t查阅结构体详细描述

  • 参数说明:
名称类型说明
read_paramsrm_peripheral_read_write_params_t线圈读取参数结构体,该指令最多一次性支持读 8 个线圈数据,即返回的数据不会超过一个字节
  • 返回值: tuple[int,int]: 包含两个元素的元组。
  1. int: 函数执行的状态码
参数类型说明
0int成功
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  1. int: 线圈状态
参数类型说明
-int返回线圈状态,数据类型:int8
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 配置控制器RS485端口为RTU主站
print(arm.rm_set_modbus_mode(0,115200,2))

# 通过控制器RS485接口读数据,起始地址为10, 外设设备地址为2,读2个数据
read_params = rm_peripheral_read_write_params_t(0, 10, 2, 2)
print(arm.rm_read_coils(read_params))

arm.rm_delete_robot_arm()

读离散量输入rm_read_input_status()

  • 方法原型:
python
rm_read_input_status(self, read_params: rm_peripheral_read_write_params_t) -> tuple[int, int]:

可以跳转rm_peripheral_read_write_params_t查阅结构体详细描述

  • 参数说明:
名称类型说明
read_paramsrm_peripheral_read_write_params_t离散量输入读取参数结构体,该指令最多一次性支持读 8 个离散量数据,即返回的数据不会超过一个字节
  • 返回值: tuple[int,int]: 包含两个元素的元组。
  1. int: 函数执行的状态码
参数类型说明
0int成功
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  1. int: 寄存器数据
参数类型说明
-int返回离散量,数据类型:int8
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 配置控制器RS485端口为RTU主站
print(arm.rm_set_modbus_mode(0,115200,2))

# 通过控制器RS485接口读数据,起始地址为10, 外设设备地址为2,读3个数据
read_params = rm_peripheral_read_write_params_t(0, 10, 2, 3)
print(arm.rm_read_input_status(read_params))

arm.rm_delete_robot_arm()

读保持寄存器rm_read_holding_registers()

  • 方法原型:
python
rm_read_holding_registers(self, read_params: rm_peripheral_read_write_params_t) -> tuple[int, int]:

可以跳转rm_peripheral_read_write_params_t查阅结构体详细描述

  • 参数说明:
名称类型说明
read_paramsrm_peripheral_read_write_params_t保持寄存器数据读取参数结构体,该指令每次只能读 1 个寄存器,即 2 个字节的数据,不可一次性读取多个寄存器数据,该结构体成员num无需设置
  • 返回值: tuple[int,int]: 包含两个元素的元组。
  1. int: 函数执行的状态码
参数类型说明
0int成功
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  1. int: 寄存器数据
参数类型说明
-int返回寄存器数据,数据类型:int8
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 配置控制器RS485端口为RTU主站
print(arm.rm_set_modbus_mode(0,115200,2))

# 通过控制器RS485端口读取数据,起始地址为10, 外设设备地址为2
param = rm_peripheral_read_write_params_t(0, 10, 2)
print("读保持寄存器: ", arm.rm_read_holding_registers(param))

arm.rm_delete_robot_arm()

读输入寄存器rm_read_input_registers()

  • 方法原型:
python
rm_read_input_registers(self, read_params: rm_peripheral_read_write_params_t) -> tuple[int, int]:

可以跳转rm_peripheral_read_write_params_t查阅结构体详细描述

  • 参数说明:
名称类型说明
read_paramsrm_peripheral_read_write_params_t输入寄存器数据读取参数结构体,该指令每次只能读 1 个寄存器,即 2 个字节的数据,不可一次性读取多个寄存器数据,该结构体成员num无需设置,该指令每次只能读 1 个寄存器,即 2 个字节的数据,不可一次性读取多个寄存器数据,该结构体成员num无需设置
  • 返回值:tuple[int,int]: 包含两个元素的元组。
  1. int: 函数执行的状态码
参数类型说明
0int成功
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  1. int: 寄存器数据
参数类型说明
-int返回寄存器数据,数据类型:int16
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 配置控制器RS485端口为RTU主站
print(arm.rm_set_modbus_mode(0,115200,2))

# 通过控制器RS485端口读取数据,起始地址为10,外设设备地址为2
param = rm_peripheral_read_write_params_t(0, 10, 2)
print("读保持寄存器: ", arm.rm_read_input_registers(param))

arm.rm_delete_robot_arm()

写单圈数据rm_write_single_coil()

  • 方法原型:
python
rm_write_single_coil(self, write_params: rm_peripheral_read_write_params_t, data: int) -> int:

可以跳转rm_peripheral_read_write_params_t查阅结构体详细描述

  • 参数说明:
名称类型说明
write_params/单圈数据写入参数结构体,该结构体成员num无需设置。
dataint16要写入线圈的数据。
  • 返回值: 函数执行的状态码:
参数类型说明
0int成功
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 配置控制器RS485端口为RTU主站
print(arm.rm_set_modbus_mode(0,115200,2))

# 通过控制器RS485端口写单圈数据,起始地址为20,外设设备地址为2
write_params = rm_peripheral_read_write_params_t(0, 20, 2)
print("写单圈数据: ", arm.rm_write_single_coil(write_params, 1))

arm.rm_delete_robot_arm()

写单个寄存器rm_write_single_register()

  • 方法原型:
python
rm_write_single_register(self, write_params: rm_peripheral_read_write_params_t, data: int) -> int:

可以跳转rm_peripheral_read_write_params_t查阅结构体详细描述

  • 参数说明:
名称类型说明
read_paramsrm_peripheral_read_write_params_t单个寄存器数据写入参数结构体,该结构体成员num无需设置
dataint要写入寄存器的数据,数据类型:int16
  • 返回值: 函数执行的状态码:
参数类型说明
0int成功
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 配置控制器RS485端口为RTU主站
print(arm.rm_set_modbus_mode(0,115200,2))

# 通过控制器RS485接口写100数据,起始地址为10, 外设设备地址为2
write_params = rm_peripheral_read_write_params_t(0, 10, 2)
print(arm.rm_write_single_register(write_params, 100))

arm.rm_delete_robot_arm()

写多个寄存器rm_write_registers()

  • 方法原型:
python
rm_write_registers(self, write_params: rm_peripheral_read_write_params_t, data: list[int]) -> int:

可以跳转rm_peripheral_read_write_params_t查阅结构体详细描述

  • 参数说明:
名称类型说明
read_paramsrm_peripheral_read_write_params_t多个寄存器数据写入参数结构体。其中寄存器每次写的数量不超过10个,即该结构体成员num<=10。
datalist[int]要写入寄存器的数据数组,类型:byte。
  • 返回值: 函数执行的状态码:
参数类型说明
0int成功
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 配置控制器RS485端口为RTU主站
print(arm.rm_set_modbus_mode(0,115200,2))

# 通过控制器RS485接口写数据,起始地址为10, 外设设备地址为2,寄存器数量为2
write_params = rm_peripheral_read_write_params_t(0, 10, 2, 2)
print(arm.rm_write_registers(write_params), [15, 20, 25, 30])

arm.rm_delete_robot_arm()

写多圈数据rm_write_coils()

  • 方法原型:
python
rm_write_coils(self, write_params: rm_peripheral_read_write_params_t, data: list[int]) -> int:

可以跳转rm_peripheral_read_write_params_t查阅结构体详细描述

  • 参数说明:
名称类型说明
write_paramsrm_peripheral_read_write_params_t多圈数据写入参数结构体。每次写的数量不超过 160 个,即该结构体成员num<=160。
datalist[int]要写入线圈的数据数组,类型:byte。
  • 返回值: 函数执行的状态码:
参数类型说明
0int成功。
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 配置控制器RS485端口为RTU主站
print(arm.rm_set_modbus_mode(0,115200,2))

# 通过控制器RS485接口写数据,起始地址为10, 外设设备地址为2,线圈数量为16
write_params = rm_peripheral_read_write_params_t(0, 10, 2, 16)
print(arm.rm_write_coils(write_params, [15, 20]))

arm.rm_delete_robot_arm()

读多圈数据rm_read_multiple_coils()

  • 方法原型:
python
rm_read_multiple_coils(self, read_params: rm_peripheral_read_write_params_t) -> tuple[int, list[int]]:

可以跳转rm_peripheral_read_write_params_t查阅结构体详细描述

  • 参数说明:
名称类型说明
read_paramsrm_peripheral_read_write_params_t多圈数据读取参数结构体,要读的线圈的数量 8< num <= 120,该指令最多一次性支持读 120 个线圈数据, 即 15 个 byte
  • 返回值: tuple[int,list[int]]: 包含两个元素的元组。
  1. int: 函数执行的状态码
参数类型说明
0int成功
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  1. int: 线圈状态列表
参数类型说明
-int返回线圈状态列表,数据类型:int8
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 配置控制器RS485端口为RTU主站
print(arm.rm_set_modbus_mode(0,115200,2))

# 通过控制器RS485端口读取数据,起始地址为10,外设设备地址为2,线圈数量为24
param = rm_peripheral_read_write_params_t(0, 10, 2, 24)
print(arm.rm_read_multiple_coils(param))

arm.rm_delete_robot_arm()

读多个保存寄存器rm_read_multiple_holding_registers()

  • 方法原型:
python
rm_read_multiple_holding_registers(self, read_params: rm_peripheral_read_write_params_t) -> tuple[int, list[int]]:

可以跳转rm_peripheral_read_write_params_t查阅结构体详细描述

  • 参数说明:
名称类型说明
read_paramsrm_peripheral_read_write_params_t多个保存寄存器读取参数结构体,要读的寄存器的数量 2 < num < 13,该指令最多一次性支持读 12 个寄存器数据, 即 24 个 byte
  • 返回值: tuple[int,list[int]]: 包含两个元素的元组。
  1. int: 函数执行的状态码
参数类型说明
0int成功
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  1. int: 寄存器数据列表
参数类型说明
-int返回寄存器数据列表,数据类型:int8
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 配置控制器RS485端口为RTU主站
print(arm.rm_set_modbus_mode(0,115200,2))

# 通过控制器RS485端口读取数据,起始地址为10,外设设备地址为2,寄存器数量为5
param = rm_peripheral_read_write_params_t(0, 10, 2, 5)
print(arm.rm_read_multiple_holding_registers(param))

arm.rm_delete_robot_arm()

读多个输入寄存器rm_read_multiple_input_registers()

  • 方法原型:
python
rm_read_multiple_input_registers(self, read_params: rm_peripheral_read_write_params_t) -> tuple[int, list[int]]:

可以跳转rm_peripheral_read_write_params_t查阅结构体详细描述

  • 参数说明:
名称类型说明
read_paramsrm_peripheral_read_write_params_t多个输入寄存器读取参数结构体。要读的寄存器的数量 2 < num < 13,该指令最多一次性支持读 12 个寄存器数据, 即 24 个 byte
  • 返回值: tuple[int,list[int]]: 包含两个元素的元组。
  1. int: 函数执行的状态码
参数类型说明
0int成功
1int控制器返回false,参数错误或机械臂状态发生错误。
-1int数据发送失败,通信过程中出现问题。
-2int数据接收失败,通信过程中出现问题或者控制器长久没有返回。
-3int返回值解析失败,接收到的数据格式不正确或不完整。
  1. int: 寄存器数据列表
参数类型说明
-int返回寄存器数据列表,数据类型:int8
  • 使用示例
python
from Robotic_Arm.rm_robot_interface import *

# 实例化RoboticArm类
arm = RoboticArm(rm_thread_mode_e.RM_TRIPLE_MODE_E)

# 创建机械臂连接,打印连接id
handle = arm.rm_create_robot_arm("192.168.1.18", 8080)
print(handle.id)

# 配置控制器RS485端口为RTU主站
print(arm.rm_set_modbus_mode(0,115200,2))

# 通过控制器RS485端口读取数据,起始地址为10,外设设备地址为2,寄存器数量为5
param = rm_peripheral_read_write_params_t(0, 10, 2, 5)
print(arm.rm_read_multiple_input_registers(param))

arm.rm_delete_robot_arm()