Skip to content
帮助

Modbus-RTU协议 触觉版

Modbus-RTU 协议是一种主从请求应答通讯协议,广泛应用于工业自动化系统中。协议帧包括了功能码、数据域、和 CRC 校验,以确保通信的可靠性。

1. Frame 结构

一个完整的 Modbus 帧包括以下几个部分:

Header/Device IDFunction CodeDataCRC16
1 Byte1 ByteN Bytes2 Bytes
  • Header/Device ID: 设备标识符,用于区分不同的设备。
  • Function Code: 功能码,指示请求的操作类型。
  • Data: 数据域,包含具体操作的数据。
  • CRC16: CRC 校验,用于校验数据的完整性。

2. 功能码

功能码用于指示主设备希望从设备执行的操作类型:

功能码描述
03H读保持寄存器
06H写单个保持寄存器
10H写多个保持寄存器
04H读输入寄存器

3. 寄存器

寄存器是设备内存中的一块,用于存储数据。以下是不同类型寄存器的详细描述:

地址类型描述长度属性
1000保持寄存器485 ID2 bytesW/R
1001保持寄存器波特率2 bytesW/R
1009保持寄存器存储数据/重启2 bytesW
1010保持寄存器位置设置值12 bytes (6 uint16)W/R
1016保持寄存器速度设置值12 bytes (6 uint16)W/R
1022保持寄存器LED设置2 bytesW/R
1023保持寄存器电流设置值12 bytes (6 uint16)W/R
1030保持寄存器Turbo模式2 bytesW/R
1031保持寄存器Turbo模式时间参数4 bytesR
1033保持寄存器位置自动校准2 bytesW/R
1034保持寄存器位置校准2 bytesW
1098保持寄存器动作序列ACTION_CMD_ID2 bytes (1 uint16)W
1099保持寄存器动作步骤数量ACTION_STEP_NUMBER2 bytes (1 uint16)W/R
1100保持寄存器动作步骤参数ACTION_STEP_PARAMS40 bytes (20 uint16)W/R
2000输入寄存器实际位置值12 bytes (6 uint16)R
2006输入寄存器实际速度值12 bytes (6 uint16)R
2012输入寄存器实际电流值12 bytes (6 uint16)R
2018输入寄存器电机状态12 bytes (6 uint16)R
2024输入寄存器工作电压2 bytesR
2025输入寄存器按键状态2 bytesR
3000输入寄存器FW Version20 bytes (10 uint16)R
3010输入寄存器SN20 bytes (10 uint16)R
4000输入寄存器拇指法向力_12bytesR
4001输入寄存器拇指切向力_12bytesR
4002输入寄存器拇指切向力方向_12bytesR
4003输入寄存器拇指法向力_22bytesR
4004输入寄存器拇指切向力_22bytesR
4005输入寄存器拇指切向力方向_22bytesR
4006输入寄存器拇指自接近_14bytes(2 uint16)R
4008输入寄存器拇指状态2bytesR
4009输入寄存器食指法向力_12bytesR
4010输入寄存器食指切向力_12bytesR
4011输入寄存器食指切向力方向_12bytesR
4012输入寄存器食指法向力_22bytesR
4013输入寄存器食指切向力_22bytesR
4014输入寄存器食指切向力方向_22bytesR
4015输入寄存器食指法向力_32bytesR
4016输入寄存器食指切向力_32bytesR
4017输入寄存器食指切向力方向_32bytesR
4018输入寄存器食指自接近_14bytes(2 uint16)R
4020输入寄存器食指自接近_24bytes(2 uint16)R
4022输入寄存器食指互接近_14bytes(2 uint16)R
4024输入寄存器食指状态2bytesR
4025输入寄存器中指法向力_12bytesR
4026输入寄存器中指切向力_12bytesR
4027输入寄存器中指切向力方向_12bytesR
4028输入寄存器中指法向力_22bytesR
4029输入寄存器中指切向力_22bytesR
4030输入寄存器中指切向力方向_22bytesR
4031输入寄存器中指法向力_32bytesR
4032输入寄存器中指切向力_32bytesR
4033输入寄存器中指切向力方向_32bytesR
4034输入寄存器中指自接近_14bytes(2 uint16)R
4036输入寄存器中指自接近_24bytes(2 uint16)R
4038输入寄存器中指互接近_14bytes(2 uint16)R
4040输入寄存器中指状态2bytesR
4041输入寄存器无名指法向力_12bytesR
4042输入寄存器无名指切向力_12bytesR
4043输入寄存器无名指切向力方向_12bytesR
4044输入寄存器无名指法向力_22bytesR
4045输入寄存器无名指切向力_22bytesR
4046输入寄存器无名指切向力方向_22bytesR
4047输入寄存器无名指法向力_32bytesR
4048输入寄存器无名指切向力_32bytesR
4049输入寄存器无名指切向力方向_32bytesR
4050输入寄存器无名指自接近_14bytes(2 uint16)R
4052输入寄存器无名指自接近_24bytes(2 uint16)R
4054输入寄存器无名指互接近_14bytes(2 uint16)R
4056输入寄存器无名指状态2bytesR
4057输入寄存器小指法向力_12bytesR
4058输入寄存器小指切向力_12bytesR
4059输入寄存器小指切向力方向_12bytesR
4060输入寄存器小指法向力_22bytesR
4061输入寄存器小指切向力_22bytesR
4062输入寄存器小指切向力方向_22bytesR
4063输入寄存器小指自接近_14bytes(2 uint16)R
4065输入寄存器小指状态2bytesR
4100保持寄存器拇指触觉复位2bytesW
4101保持寄存器食指触觉复位2bytesW
4102保持寄存器中指触觉复位2bytesW
4103保持寄存器无名指触觉复位2bytesW
4104保持寄存器小指触觉复位2bytesW
4105保持寄存器拇指触觉参数校准2bytesW
4106保持寄存器食指触觉参数校准2bytesW
4107保持寄存器中指触觉参数校准2bytesW
4108保持寄存器无名触觉参数校准2bytesW
4109保持寄存器小指触觉参数校准2bytesW
4110保持寄存器拇指触觉开关2bytesW/R
4111保持寄存器食指触觉开关2bytesW/R
4112保持寄存器中指触觉开关2bytesW/R
4113保持寄存器无名指触觉开关2bytesW/R
4114保持寄存器小指触觉开关2bytesW/R
4200输入寄存器拇指触觉版本20bytes (10 unint16)R
4210输入寄存器食指触觉版本20bytes (10 unint16)R
4220输入寄存器中指触觉版本20bytes (10 unint16)R
4230输入寄存器无名指触觉版本20bytes (10 unint16)R
4240输入寄存器小指触觉版本20bytes (10 unint16)R
4300输入寄存器拇指触觉原始数据28 bytes (14 uint16)R
4314输入寄存器食指触觉原始数据44 bytes (22 uint16)R
4336输入寄存器中指触觉原始数据44 bytes (22 uint16)R
4358输入寄存器无名指触觉原始数据44 bytes (22 uint16)R
4380输入寄存器小指触觉原始数据28 bytes (14 uint16)R

4. 寄存器描述

以下是对一些关键寄存器的详细描述及其设置参数的解释。

4.1 设备 ID保持寄存器1000

485 设备 ID,可设置范围为 1 - 254,0 表示广播地址。设置 ID 后,需要通过设置 存储数据/重启寄存器(1009) 来重启设备使其生效。

4.2 设备波特率保持寄存器1001

485 设备波特率,可以设置以下参数:

设置参数代表的波特率
0115200
157600
219200
3460800

默认波特率为 115200

4.3 存储数据/重启保持寄存器1009

设置此寄存器会将 设备 ID设备波特率 参数写入到 Flash 并重启设备使设置生效。

4.4 控制位置保持寄存器1010

每个机械手有 6 个电机,其中大拇指有 2 个电机。下表是寄存器对应的手指电机。寄存器值范围 0 - 100,其中 0 表示张开,100 表示闭合。

寄存器地址手指寄存器值
1010大拇指 Flex0 - 100
1011大拇指 Aux0 - 100
1012食指0 - 100
1013中指0 - 100
1014无名指0 - 100
1015小指0 - 100

4.5 控制速度保持寄存器1016

此寄存器用于设置各个手指的速度,手指会按照设置的速度值运动,直到堵转。值范围在 -100 到 100 之间。正数表示内收,负数表示外展。

寄存器地址手指寄存器值
1016大拇指 Flex-100 - 100
1017大拇指 Aux-100 - 100
1018食指-100 - 100
1019中指-100 - 100
1020无名指-100 - 100
1021小指-100 - 100

4.6 LED 控制保持寄存器1022

此寄存器用于控制 LED 的工作模式和颜色。以下是可设置的 LED 模式和颜色参数:

LED 模式

寄存器值模式描述
1LED_MODE_SHUTDOWN
2常亮
31Hz闪烁
4闪一次
50.5Hz闪烁
62Hz闪烁

LED 颜色

寄存器值颜色描述
1
2绿
3
4
5
6
7

4.7 电流 控制保持寄存器1023

此寄存器用于设置各个手指的电流,参数范围-100~-20, 20~100, 正数表示内收,负数表示外展。

寄存器地址手指寄存器值
1023大拇指 Flex-100 - 20, 20 - 100
1024大拇指 Aux-100 - 20, 20 - 100
1025食指-100 - 20, 20 - 100
1026中指-100 - 20, 20 - 100
1027无名指-100 - 20, 20 - 100
1028小指-100 - 20, 20 - 100

4.8 Turbo模式保持寄存器1030

此寄存器用于控制 Turbo 模式。掉电后,Turbo 模式会恢复到默认关闭状态。

寄存器值描述
0关闭
1开启

4.9 Turbo模式时间参数保持寄存器1031

Turbo 模式基于堵转功能实现。在堵转后电机停止一段时间(堵转时间),然后继续运动,周期性执行停止和继续运动。

寄存器地址描述
1031堵转时间,不运动,单位 ms,默认 500ms
1032继续运动时间,单位 ms,默认 500ms

4.10 位置自动校准保持寄存器1033

此寄存器用于开启或关闭灵巧手在上电后自动执行位置校准。位置校准指上电后灵巧手查找手指起始位置的过程,在此期间所有的手指都会被打开。该寄存器的有效值为 1 和 0, 其中 1是开启位置自动校准, 为默认状态;0是关闭位置自动校准。

当位置自动校准关闭时,用户需要进行手动位置校准。手动位置校准有两种方式, 通过 位置校准 (1032) 保持寄存器,或者在上电后长按 7 秒手背灯。

寄存器值描述
1开启位置自动校准(默认状态)
0关闭位置自动校准

关闭自动校准时,需要手动进行位置校准,可以通过位置校准寄存器(1034)或上电后长按 7 秒手背灯进行。

设置生效需调用存储数据/重启(1009)寄存器。

注意:

  1. 位置校准过程中,如灵巧手有抓握物体,可能存在跌落风险。
  2. 灵巧手上电后,必须执行一次位置校准。

4.11 位置校准保持寄存器1034

此寄存器用于手动触发位置校准,仅在 位置自动校准(1033)关闭时有效。

寄存器值描述
1开始位置校准

4.12 动作序列保持寄存器1098

此寄存器用于设置和读取动作序列的命令和索引。

c
uint8_t cmd = 1;
uint8_t id = 2;
uint16_tregister_value = ((uint16_t)cmd << 8) + id;

命令

CMD描述
1SET_START
2SET_FINISH
3READ_START
4READ_FINISH
5SAVE
6RUN

动作序列 ID

Action ID描述
1内置动作序列 1R
2内置动作序列 2R
3内置动作序列 3R
4内置动作序列 4R
5内置动作序列 5R
6内置动作序列 6R
10用户定义动作序列 1W/R
11用户定义动作序列 2W/R
12用户定义动作序列 3W/R
13用户定义动作序列 4W/R
14用户定义动作序列 5W/R
15用户定义动作序列 6W/R

4.13 动作步骤数量保持寄存器/1099

可读可写,此寄存器用于表示一个动作序列中包含的步骤数量,最多可包含 32 个步骤。

4.14 动作步骤参数保持寄存器/1100

此寄存器用于存储和读取动作步骤的顺序、时间及位置速度力量参数。

寄存器地址寄存器名称描述
1100index动作顺序,范围 0-31
1101duration_ms步骤持续时间,单位 ms
1102positions[0]第一个位置值
1103positions[1]第二个位置值
1104positions[2]第三个位置值
1105positions[3]第四个位置值
1106positions[4]第五个位置值
1107positions[5]第六个位置值
1108speeds[0]第一个速度值
1109speeds[1]第二个速度值
1110speeds[2]第三个速度值
1111speeds[3]第四个速度值
1112speeds[4]第五个速度值
1113speeds[5]第六个速度值
1114force[0]第一个力量值
1115force[1]第二个力量值
1116force[2]第三个力量值
1117force[3]第四个力量值
1118force[4]第五个力量值
1119force[5]第六个力量值

4.14.1 写入动作序列

通过此寄存器可以写入完整的动作序列。

img

4.14.2 读取动作序列

通过此寄存器可以读取已存储的动作序列。

img

4.15 实际位置值输入寄存器2000

此寄存器用于读取各个手指的实际位置值,范围从 0 到 100,其中 0 表示张开,100 表示闭合。

寄存器地址手指寄存器值
2000大拇指 Flex0 - 100
2001大拇指 Aux0 - 100
2002食指0 - 100
2003中指0 - 100
2004无名指0 - 100
2005小指0 - 100

4.16 实际速度值输入寄存器2006

此寄存器用于读取各个手指的实际速度值,范围从 0 到 100,表示速度大小,但不包含电机运动方向。

寄存器地址手指寄存器值
2006大拇指 Flex0 - 100
2007大拇指 Aux0 - 100
2008食指 Flex0 - 100
2009中指 Flex0 - 100
2010无名指 Flex0 - 100
2011小指 Flex0 - 100

4.17 实际电流值输入寄存器2012

此寄存器用于读取各个手指的实际电流值,范围从 0 到 100,表示电流大小,但不包含电机运动方向。手固件有堵转保护,手指停止一段时间后电流降为0。

寄存器地址手指寄存器值
2012大拇指 Flex0 - 100
2013大拇指 Aux0 - 100
2014食指 Flex0 - 100
2015中指 Flex0 - 100
2016无名指 Flex0 - 100
2017小指 Flex0 - 100

4.18 电机状态输入寄存器2018

此寄存器用于读取各个手指的电机状态,范围从 0 到 2,表示不同的状态。

寄存器地址手指寄存器值
2018大拇指 Flex0 - 2
2019大拇指 Aux0 - 2
2020食指 Flex0 - 2
2021中指 Flex0 - 2
2022无名指 Flex0 - 2
2023小指 Flex0 - 2

关节状态

序号关节状态说明
0MOTOR_IDLE关节空闲
1MOTOR_RUNNING关节运行中
2MOTOR_STALL关节堵转

4.19 电压输入寄存器2024

此寄存器用于读取电压值,单位为 mV,数据类型为 uint16。

4.20 按键状态输入寄存器2025

此寄存器用于读取按键状态。0 表示未按下,1 表示按下。

4.21 FW Version输入寄存器3000

此寄存器用于读取固件版本信息,占用 10 个寄存器,最大长度为 20 的字符串。字符串采用大端转换到多个 uint16_t 寄存器。

大端 uint16_tChar
0x302E, 0x302E, 0x342E, 0x530030 2E 30 2E 34 2E 53 00

4.22 SN输入寄存器3010

此寄存器用于读取 SN (序列号),占用 10 个寄存器,最大长度为 20 的字符串。字符串采用大端转换到多个 uint16_t 寄存器。

大端 uint16_tChar
0x534E, 0x3132, 0x3334, 0x3738, 0x3930, 0x3132, 0x3334, 0x350053 4E 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 00

5. 触觉寄存器描述

用户可以通过 40004300寄存器组来获取手指的三维力,自接近,互接近以及触觉通道值。

数据长度(位)
三维力自接近互接近触觉通道
法向力切向力切向力方向
161616323232

法向力,切向力是 16 位的无符号数据。数值单位是 100 * N, 例如切向力 1000 表示 1000 / 100 N, 即 10 N。法向力,切向力的测量范围是 0 ~ 25 N。

切向力方向是 16 位的无符号数据。单位是角度,数值范围为 0 ~ 359 度。靠近指尖的方向为 0 度,按顺时针旋转最大到 359 度,当数值为 65535 (0xFFFF) 时,表示切向力方向无效。

自接近和互接近都是 32 位的无符号数据。自接近指自电容接近, 互接近指互电容接近。

触觉通道值为 32 位的无符号数据。

由于 Modbus-RTU 协议的限制,对于 32 位的数据,需要读取两个寄存器才能得到完整数据。同时需要将读到的数据做一次大小端转换,例如读到的是 0x4433,0x2211, 以大端模式转换为数组 [0x44, 0x33, 0x22, 0x11];然后再以小端模式理解,即 0x11223344。

5.1 状态

状态寄存器指示当前触觉传感器的状态,0表示数据正常,1表示数据异常,2表示与传感器通信异常。

当有数据异常时,可通过通道复位寄存器对触觉传感器进行复位。

5.2 通道复位4100

通道复位寄存器接受输入值1,用于触发传感器采集通道复位指令。在执行该指令时,手指传感器尽量不要受力。

5.3 参数校准4105

参数校准寄存器接受输入值1,用于触发参数校准指令。 当空闲状态下的三维力数值不为0时,可通过该寄存器进行校准。该指令的执行时间较长,期间的数据无法作为参考。建议忽略在该参数校准寄存器设置后十秒内的数据。, 否则将导致校准后的传感器数据异常。

5.4 触觉开关4110

触觉开关支持单独开启/关闭手指的触觉功能。支持读取操作, 写 1表示打开对应手指的触觉, 0表示关闭对应手指的触觉。 读取到 1表示触觉通道为开启状态, 0表示触觉通道处于关闭状态。

5.5 版本4200

版本寄存器用于获取触觉传感器版本,长度为 10 个寄存器。

5.5 常见问题

  1. 没有触觉数据,读不到触觉版本
    • 使用触觉开关寄存器组,确认手指触觉是否开启
  2. 状态寄存器一直返回1
    • 通道复位寄存器组,复位触觉通道
  3. 未接触时,触觉数据不为零
    • 使用参数校准寄存器组,对手指触觉进行重新校准