Skip to content

xArm 控制器 RS-485(Modbus RTU)功能使用手册

1. 概述

本手册用于说明 UFACTORY xArm 控制器的 RS-485 通信功能,以及其在 Modbus RTU 协议下的使用方法。

当前控制器已支持:

  • Modbus RTU 主站(Master)功能
  • Modbus RTU 从站(Slave)功能(控制器AC1310或以上,固件V2.7.104或以上)

2. Modbus RTU 主站模式

xArm 作为 Modbus 主机,主动访问外部 485 从机。

2.1 接口定义

端子说明
M_ARS-485 A / D+主机
M_BRS-485 B / D-主机
GND信号地

2.2 通信参数

参数默认
波特率20000004800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1000000, 1500000, 2000000, 2500000
数据位8
停止位11,2
校验位None无(N),奇校验(O), 偶校验(E); (0-2)
超时时间501-9999ms

2.3 控制方式

2.3.1 UFACTORY Studio

RS-485端口: 控制器 协议:Modbus RTU

此页面会在填入的命令后自动增加CRC。 alt text

2.3.2 Python SDK

  1. 设置控制器端波特率
arm.set_rs485_baudrate(200000, target='control_box')
  1. 设置超时时间
arm.set_rs485_timeout(1000, target='control_box')
  1. 发送数据
arm.set_rs485_data([0x08, 0x06, 0x01, 0x00, 0x00, 0x01], target='control_box')

3. Modbus RTU 从站模式

xArm 作为 Modbus 从机,被 PLC 或上位机访问。

3.1 接口定义

端子说明
L_ARS-485 A / D+从机
L_BRS-485 B / D-从机
GND信号地

3.2 通信参数

参数默认参数范围
从机地址11-247
波特率9600(1)4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1000000, 1500000, 2000000; (0-12)
数据位8
停止位11, 2
校验位None(0)无(N),奇校验(O), 偶校验(E); (0-2)

3.3 参数修改

修改参数

python
arm.set_modbusrtu_params(slave_id=1, baudrate=9600, stopbits=1, parity=0)

获取参数

python
arm.get_modbusrtu_params()

输出示例

text
(0, [1, 9600, 1, 0])

3.4 寄存器映射示例

3.4.1 功能码

  • 离散输入寄存器
    • 0x02:读取多个寄存器的值
  • 输入寄存器
    • 0x04:读取多个寄存器的值
  • 线圈状态寄存器:
    • 0x01:读取多个寄存器的值
    • 0x05:写单个寄存器的值
    • 0x0F:写多个寄存器的值
  • 保持寄存器:
    • 0x03:读取多个寄存器的值
    • 0x06:写单个寄存器的值
    • 0x10:写多个寄存器的值
    • 0x16:以掩码的形式写单个寄存器的值
    • 0x17:写多个寄存器的值,并读多个寄存器的值

3.4.2 状态寄存器(只读)

离散输入状态寄存器(1位,只读)
地址(十进制)地址(十六进制)说明
0 ~ 310x00 ~ 0x1F32路控制器的数字输⼊IO (当前仅16路有效)
32 ~ 390x20 ~ 0x278路末端⼯具的数字输⼊IO (当前仅2路有效)
40 ~ 1270x28 ~ 0x7F保留
输⼊寄存器(16位, 只读)
地址(十进制)地址(十六进制)说明
0 ~ 10x00 ~0x0132路控制器的数字输⼊IO, 每1位表⽰1路IO (当前仅16路有效)
20x028路末端⼯具的数字输⼊IO, 每1位表⽰1路IO (当前仅2路有效)
3 ~ 60x03 ~0x064路控制器的模拟输⼊IO, 寄存器的值是实际值的1000倍 (当前仅2路 有效)
7 ~ 100x07 ~0x0A4路末端⼯具的模拟输⼊IO, 寄存器的值是实际值的1000倍 (当前仅2 路有效)
11 ~ 310x0B ~0x1F保留
320x20机械臂的错误码
330x21机械臂的警告码
34 ~ 350x22 ~0x23计数器的值 (0x22存储计数器的⾼16位, 0x23存储计数器的低16位)
36 ~ 630x23 ~0x3F保留
64 ~ 720x40 ~0x48机械臂的x/y/z/roll/pitch/yaw/rx/ry/rz值, 寄存器的值是实际值的10倍 (单位: mm, 度)
73 ~ 760x49 ~0x4C机械臂的TCP负载mass(1000倍)/center_x(10倍)/center_y(10 倍)/center_z(10倍) (单位: kg, mm)
77 ~ 820x4D ~0x52机械臂的TCP偏移, 寄存器的值是实际值的10倍(单位: mm, 度)
83 ~ 880x53 ~0x58机械臂的基座标偏移, 寄存器的值是实际值的10倍(单位: mm, 度)
89 ~ 950x59 ~0x5F机械臂各关节(J1-J7)的⾓度, 寄存器的值是实际值的10倍(单位: 度)
86 ~ 1020x60~0x66机械臂各关节(J1-J7)的温度 (单位: 摄⽒度)
103 ~ 1090x67~0x6D机械臂各关节(J1-J7)的速度, 寄存器的值是实际值的10倍(单位: 度/s)
1100x6E机械臂的TCP速度, 寄存器的值是实际值的10倍(单位: mm/s)
111 ~ 1270x6F ~0x7F保留

3.4.3 控制寄存器(读写)

线圈状态寄存器(1位, 可读可写)
地址(十进制)地址(十六进制)说明
0 ~ 310x00 ~ 0x1F32路控制器的数字输出IO (当前仅16路有效)
32 ~ 390x20 ~ 0x278路末端⼯具的数字输出IO (当前仅2路有效)
40 ~ 1270x28 ~ 0x7F保留
128 ~ 1340x80 ~ 0x86关节(J1-J7)的报闸状态
135 ~ 1410x87 ~ 0x8D关节(J1-J7)的使能使能状态
1420x8E缩减模式(0关闭, 1开启)
1430x8F围栏模式(0关闭, 1开启)
1440x90暂停运动控制(0表⽰不是暂停, 1表⽰暂停)
1450x91停⽌运动控制(0表⽰不是停⽌, 1表⽰停⽌)
146 ~ 1590x92 ~ 0x9F运动模式(0表⽰不是处于该模式, 1表⽰处于该模式), 分别对应模式0-13
160 ~ 2550xA0 ~ 0xFF保留
256 ~ 5110x100 ~ 0x1FF⽤户⾃定义使⽤
保持寄存器(16位, 可读可写)
地址(十进制)地址(十六进制)说明
0 ~ 10x00~0x0132路控制器的数字输出IO, 每1位表⽰1路IO (当前仅16路有效)
20x028路末端⼯具的数字输出IO, 每1位表⽰1路IO (当前仅2路有效)
3 ~ 60x03 ~ 0x064路控制器的模拟输出IO, 寄存器的值是实际值的1000倍 (当前仅2路有效)
7 ~ 100x07 ~ 0x0A4路末端⼯具的模拟输出IO, 寄存器的值是实际值的1000倍 (当前仅0路有 效)
110x0BModbus RTU从机ID
120x0CModbus RTU串口波特率
130x0DModbus RTU串口停止位
140x0EModbus RTU串口校验位
15~310x0F ~ 0x1F保留
320x20机械臂模式
330x21机械臂状态
34 ~ 470x22 ~ 0x2F保留
48 ~ 630x30 ~ 0x3F离线(Blockly)任务 (仅⽀持通过0x10功能码往0x30地址写最多16个寄存器 的值来触发离线任务, 每个寄存器的值对应Blockly⼯程名, 1对应00001, 12对应00012)
64 ~ 2550x40~0xFF保留
256 ~ 5110x100~0x1FF保留