通过RealMan机械臂ModBus控制Ohand灵巧手

# 通过RealMan机械臂ModBus控制Ohand灵巧手
## 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)

主站请求帧格式:

| 从站地址 | 功能码 | 起始寄存器(高位) | 起始寄存器(低位) | 寄存器数量(高位) | 寄存器数量(低位) | CRC16 |
| -------- | ------ | ------------------ | ------------------ | ------------------ | ------------------ | ----- |
| 0x11     | 0x03   | 0x6B               | 0x00               | 0x00               | 0x02               | XXXX  |

含义:读 17 号(0x11)号从站保持寄存器,起始地址=0x006B;寄存器个数=0x0002,结束地址=0x006B+2-1=0x006C,即读 17 号从站保持寄存器 0x006B-0x006C,共两个寄存器。

从站应答帧格式:

| 从站地址 | 功能码 | 字节计数 | 寄存器(高位) | 寄存器(低位) | 寄存器(高位) | 寄存器(低位) | CRC16 |
| -------- | ------ | -------- | -------------- | -------------- | -------------- | -------------- | ----- |
| 0x11     | 0x03   | 0x04     | 0x00           | 0x01           | 0x00           | 0x02           | XXXX  |

含义:返回 17(0x11)号从站保持寄存器 0x006B-0x006C,共两个寄存器,0x006B 寄存器数值是 0x0001,0x0062 寄存器数值是 0x0002。

从站执行请求帧发生错误时,应答帧格式:

| 从站地址 | 功能码 | 错误码 | CRC16 |
| -------- | ------ | ------ | ----- |
| 0x11     | 0x83   | XX     | XXXX  |

其中,功能码为请求帧功能码和 0x80 位或后的值。

### 3.2. 预置单寄存器(功能码 0x06)

主站请求帧格式:

| 从站地址 | 功能码 | 起始寄存器(高位) | 起始寄存器(低位) | 数据内容(高位) | 数据内容量(低位) | CRC16 |
| -------- | ------ | ------------------ | ------------------ | ---------------- | ------------------ | ----- |
| 0x11     | 0x06   | 0x00               | 0x6B               | 0x10             | 0x00               | XXXX  |

含义:设置 17 号(0x11)号从站保持寄存器,寄存器地址 0x006B,数据内容是 0x1000。

从站应答帧格式:

| 从站地址 | 功能码 | 起始寄存器(高位) | 起始寄存器(低位) | 数据内容(高位) | 数据内容量(低位) | CRC16 |
| -------- | ------ | ------------------ | ------------------ | ---------------- | ------------------ | ----- |
| 0x11     | 0x06   | 0x00               | 0x6B               | 0x10             | 0x00               | XXXX  |

含义:为请求帧的原样复制。

从站执行请求帧发生错误时,应答帧格式:

| 从站地址 | 功能码 | 错误码 | CRC16 |
| -------- | ------ | ------ | ----- |
| 0x11     | 0x86   | XX     | XXXX  |

其中,功能码为请求帧功能码和 0x80 位或后的值。

### 3.3 预置多寄存器(功能码 0x10)

主站请求帧格式:

| 从站地址 | 功能码 | 起始寄存器(高位) | 起始寄存器(低位) | 寄存器数量(高位) | 寄存器数量(低位) | 字节计数 | 数据(高位) | 数据(低位) | 数据(高位) | 数据(低位) | CRC16 |
| -------- | ------ | ------------------ | ------------------ | ------------------ | ------------------ | -------- | ------------ | ------------ | ------------ | ------------ | ----- |
| 0x11     | 0x10   | 0x00               | 0x01               | 0x00               | 0x02               | 0x04     | 0x00         | 0x0A         | 0x01         | 0x02         | XXXX  |

含义:设置 17 号(0x11)号从站保持寄存器,寄存器起始地址 0x0001,寄存器个数为 0x0002,数据内容字节计数是 0x04,数据内容分别是 0x000A、0x0102。

从站应答帧格式:

| 从站地址 | 功能码 | 起始寄存器(高位) | 起始寄存器(低位) | 寄存器数量(高位) | 寄存器数量(低位) | CRC16 |
| -------- | ------ | ------------------ | ------------------ | ------------------ | ------------------ | ----- |
| 0x11     | 0x10   | 0x00               | 0x01               | 0x00               | 0x02               | XXXX  |

含义:从站地址、功能码 、起始寄存器、寄存器数量和请求帧保持一致。

从站执行请求帧发生错误时,应答帧格式:

| 从站地址 | 功能码 | 错误码 | CRC16 |
| -------- | ------ | ------ | ----- |
| 0x11     | 0x90   | XX     | XXXX  |

其中,功能码为请求帧功能码和 0x80 位或后的值。

## 3.4. ROH 灵巧手错误代码

| 错误名                     | 代码 | 说明                           |
| -------------------------- | ---: | ------------------------------ |
| EC01_ILLEGAL_FUNCTION      |    1 | 无效的功能码                   |
| EC02_ILLEGAL_DATA_ADDRESS  |    2 | 无效的数据地址                 |
| EC03_ILLEGAL_DATA_VALUE    |    3 | 无效的数据(协议层,非应用层) |
| EC04_SERVER_DEVICE_FAILURE |    4 | 设备故障                       |

在错误码为 EC04_SERVER_DEVICE_FAILURE 的情况下,寄存器 ROH_SUB_EXCEPTION 保存了具体的错误代码:

| 子错误名         | 代码 | 说明                         |
| ---------------- | ---: | ---------------------------- |
| ERR_STATUS_INIT  |    1 | 正在初始化,不接受此读写操作 |
| ERR_STATUS_CALI  |    2 | 等待校正,不接受此读写操作   |
| ERR_INVALID_DATA |    3 | 无效的寄存器值               |
| ERR_STATUS_STUCK |    4 | 电机堵转                     |
| ERR_OP_FAILED    |    5 | 操作失败                     |
| ERR_SAVE_FAILED  |    6 | 保存失败                     |

## 4.OHand ModBus 寄存器说明
### 4.1. 寄存器表

| 寄存器名称                | 寄存器地址 | 读/写权限 | 设置项的出厂默认值 | 说明                                                                                 |
| ------------------------- | ---------: | --------- | ------------------ | ------------------------------------------------------------------------------------ |
| ROH_FW_VERSION            |       1000 | R         |                    | 固件版本号(uint16),高字节为主版本号,低字节为次版本号                             |
| ROH_FW_REVISION           |       1001 | R         |                    | 固件修订版本号(uint16)                                                             |
| ROH_HW_VERSION            |       1002 | R         |                    | 硬件版本号(uint16),高字节为硬件类型,低字节为硬件版本                             |
| ROH_BOOT_VERSION          |       1003 | R         |                    | boot loader 版本号(uint6),高字节为主版本号,低字节为次版本号                      |
| ROH_SUB_EXCEPTION         |       1004 | R         |                    | 错误子代码                                                                           |
| ROH_NODE_ID               |       1005 | R/W       | 2                  | ROH 灵巧手 ID,仅低 8 位有效,写入成功后 ROH 会保存并重启                            |
| ROH_BATTERY_VOLTAGE       |       1006 | R         |                    | ROH 电压值,单位 mV,暂时不可用                                                      |
| ROH_SELF_TEST_SWITCH      |       1007 | R/W       | 1                  | 开机自检开关,设成 1 时允许自检,设成 0 时不自检,设置时保存到非易失存储器           |
| ROH_BEEP_SWITCH           |       1008 | R/W       | 1                  | 蜂鸣器开关,设成 1 时允许发声,设成 0 时蜂鸣器静音,设置时保存到非易失存储器         |
| ROH_BEEP_PERIOD           |       1009 | W         |                    | 蜂鸣器发声,单位毫秒                                                                 |
| ROH_BUTTON_PRESS_CNT      |       1010 | R/W       |                    | 按键按下次数,对 ROH 而言是作为校正时确认用                                          |
| ROH_RECALIBRATE           |       1011 | W         |                    | 重新校正,写入特定值(非公开)会让 ROH 灵巧手进入校正状态                            |
| ROH_RESERVED0             |       1012 | R/W       |                    | 保留                                                                                 |
| ROH_RESERVED1             |       1013 | R/W       |                    | 保留                                                                                 |
| ROH_RESERVED2             |       1014 | R/W       |                    | 保留                                                                                 |
| ROH_RESERVED3             |       1015 | R/W       |                    | 保留                                                                                 |
| ROH_RESERVED4             |       1016 | R/W       |                    | 保留                                                                                 |
| ROH_RESERVED5             |       1017 | R/W       |                    | 保留                                                                                 |
| ROH_RESERVED6             |       1018 | R/W       |                    | 保留                                                                                 |
| ROH_RESERVED7             |       1019 | R/W   &nb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值