【睿尔曼-RealMan】使用睿尔曼机械臂末端MODBUS-RTU控制OHand灵巧手
Forrest 2024-08-10
【睿尔曼-RealMan】
OHand 参数:
尺寸:
大拇指旋转:0 ~ 90°
大拇指弯曲:-13.28 ~ 36.33°
食指:36.22 ~ 170.25°
中指:39.96 ~ 169.81°
无名指:38.33 ~ 167.05°
小拇指:42.77 ~ 167.23°
储存、运输和使用环境
技术参数
载荷和速度
重量:
# OHand ModBus-RTU 协议
## 1. ModBus 通信协议概要
ModBus-RTU 协议使用的是主从请求应答通讯方式,协议帧包括了功能码、数据域、和 CRC16 校验。
ModBus-RTU 主控单元通过读写 ROH 灵巧手内部寄存器来实现对灵巧手的状态获取和控制。
*读寄存器*是指上位系统读取 ROH 灵巧手内部寄存器数值(可成组读取,成组的是指若干名称相同地址相邻寄存器),上位系统向 ROH 灵巧手发送读请求帧(包含寄存器组首地址、寄存器组的长度等内容),ROH 灵巧手收到请求帧并校验成功后,灵巧手将包含寄存器数据内容的应答帧返回给上位系统。
*写寄存器*是指上位系统向 ROH 灵巧手内部寄存器写入相应的数据(可成组写入),上位系统向 ROH 灵巧手发送写请求帧(包含寄存器组首地址、欲写入的数据内容)发送给灵巧手,ROH 灵巧手收到请求帧并校验成功后,返回应答帧给上位系统。
ROH ModBus 协议支持 读取保持寄存器(功能码 0x03)、预置单寄存器(功能码 0x06)、预置多寄存器(功能码 0x10)操作。
## 2. RS232、RS485 通讯参数
RS232、RS485 通讯参数都是 115200bps、8 数据位、1 停止位、无奇偶校验。
## 3. ROH ModBus 数据帧格式
### 3.1. 读取保持寄存器(功能码 0x03)
主站请求帧格式:
含义:读 17 号(0x11)号从站保持寄存器,起始地址=0x006B;寄存器个数=0x0002,结束地址=0x006B+2-1=0x006C,即读 17 号从站保持寄存器 0x006B-0x006C,共两个寄存器。
从站应答帧格式:
含义:返回 17(0x11)号从站保持寄存器 0x006B-0x006C,共两个寄存器,0x006B 寄存器数值是 0x0001,0x0062 寄存器数值是 0x0002。
从站执行请求帧发生错误时,应答帧格式:
其中,功能码为请求帧功能码和 0x80 位或后的值。
### 3.2. 预置单寄存器(功能码 0x06)
主站请求帧格式:
含义:设置 17 号(0x11)号从站保持寄存器,寄存器地址 0x006B,数据内容是 0x1000。
从站应答帧格式:
含义:为请求帧的原样复制。
从站执行请求帧发生错误时,应答帧格式:
其中,功能码为请求帧功能码和 0x80 位或后的值。
### 3.3 预置多寄存器(功能码 0x10)
主站请求帧格式:
含义:设置 17 号(0x11)号从站保持寄存器,寄存器起始地址 0x0001,寄存器个数为 0x0002,数据内容字节计数是 0x04,数据内容分别是 0x000A、0x0102。
从站应答帧格式:
含义:从站地址、功能码 、起始寄存器、寄存器数量和请求帧保持一致。
从站执行请求帧发生错误时,应答帧格式:
其中,功能码为请求帧功能码和 0x80 位或后的值。
## 3.4. ROH 灵巧手错误代码
在错误码为 EC04_SERVER_DEVICE_FAILURE 的情况下,寄存器 ROH_SUB_EXCEPTION 保存了具体的错误代码:
## 4. ModBus 寄存器说明
### 4.1. 寄存器表
### 4.3. ROH_FINGER_STATUS 状态码
使用睿尔曼机械臂JSON和API的控制示例:
打开机械臂末端modbus RTU
JSON: {"command":"set_modbus_mode","port":1,"baudrate":115200,"timeout":2}
API: Set_Modbus_Mode (1,115200,1,True)
打开末端24V电源,“voltage_type”:电源输出类型,范围:0~3。,0-0V,1-5V,2-12V,3-24V,电源输出设置为 5V 时,工具端的IO 暂不支持输入输出功
JSON: {"command":"set_tool_voltage","voltage_type":3}
API: Set_Tool_Voltage(3, True)
手闭合动作(分两步)
闭合动作1(除拇指外,其他手指完全闭合)
JSON: {"command":"write_registers","port":1,"address":1135,"num":6,"data":[0,0,255,255,255,255,255,255,255,255,0,0],"device":2}
API: Write_Registers(1,1125,6,single_data, 2, True)
闭合动作2(拇指贴近食指)
{"command":"write_registers","port":1,"address":1135,"num":6,"data:[230,0,255,255,255,255,255,255,255,255,255,255],"device":2}
手张开动作(分两步)
张开动作1(拇指展开)
{"command":"write_registers","port":1,"address":1135,"num":6,"data"[0,0,255,255,255,255,255,255,255,255,0,0],"device":2}
张开动作2(手指完全展开)
{"command":"write_registers","port":1,"address":1135,"num":6,"data":[0,0,0,0,0,0,0,0,0,0,0,0],"device":2}
拇指立起
{"command":"write_registers","port":1,"address":1135,"num":6,"data":[0,0,0,0,0,0,0,0,0,0,255,0],"device":2}
握住瓶子、哑铃
{"command":"write_registers","port":1,"address":1135,"num":6,"data":[255,0,255,0,255,0,255,0,255,0,255,0],"device":2}
使用睿尔曼机械臂在线编程的控制示例:
进制转换说明
以写入1125地址的寄存器数据为例:
手指角度:高字节0XFF 低字节0X00
使用JSON协议写入的示例为:
{"command":"write_registers","port":1,"address":1135,"num":6,"data":[255,0,255,0,255,0,255,0,255,0,255,0],"device":2}
高低位组合,以16进制表示位:
0XFF00
使用在线编程写入则需要将0XFF00转换为10进制 65280
撰写评论