6.4 基于通信协议包开发
Gcode指令介绍(适用于串口、WiFi、蓝牙通信)
通信方式
串口通信
| 参数 | 值 |
|---|---|
| 波特率 | 115200/1000000(可通过指令修改或者屏幕设置) |
| 数据位 | 8 |
| 停止位 | 1 |
| 校验位 | 无 |
WiFi通信
- 通信方式:TCP Client模式
- 连接方式:外部设备与屏幕连接到同一WiFi网络,外部设备作为TCP客户端连接屏幕的IP地址和端口
- 数据格式:与串口通信相同,使用Gcode指令格式
蓝牙通信
- 通信方式:蓝牙
- 连接方式:屏幕开启蓝牙后,外部设备搜索并连接屏幕蓝牙设备即可通信
- 数据格式:与串口通信相同,使用Gcode指令格式
指令格式
$- 起始标记,表示数据包含校验*- 校验分隔符XX- 两位十六进制XOR校验值(对$之后、*之前的所有字符进行XOR计算)\r\n- 行结束符
示例
- 原始指令:
G0 X10 - 带校验指令:
$G0 X10*2B\r\n(假设XOR结果为0x2B)
返回值格式
- 成功:
指令 OK或指令 返回值 - 失败:
指令 ERROR:错误码 - 运动到位反馈:
EndEnd
指令分类
基础控制
读取主控版本号 指令:
G6返回值:G6 GetSystemVersion:12(例如版本V1.2) 说明:返回主次版本号,取小数点后一位。屏幕获取失败时返回G6 ERROR:0读取修正版本号 指令:
G7返回值:G7 GetModifyVersion:5(例如修正版本号5) 说明:返回修正版本号。屏幕获取失败时返回G7 ERROR:0读取错误状态 指令:
G8返回值:G8 ERROR:uint32_t说明:返回32位错误状态,共32位代表32种错误,对应错误码查看"高频读取数据"中的byte43-46升级STM32固件 指令:
G11返回值:G11 OK/G11 ERROR:0~4说明:屏幕发送指令与主控板握手确认,握手成功后主控板进入boot进行数据接收和升级 错误情况:- ERROR:0 - 未找到bin文件
- ERROR:1 - 升级固件打开文件失败
- ERROR:2 - STM32进入升级模式失败
- ERROR:3 - SD打开失败
ERROR:4 - 文件名不匹配
读取电机使能状态 指令:
M22返回值:M22 MotorEnable:1,1,1,1,1说明:5个电机使能状态(J1~J4 + 传送带),1为使能,0为失能放松所有电机 指令:
M17 J[0-4]参数:J=0放松所有关节,J=1~4放松对应关节 返回值:M17 OK/M17 ERROR:0抱紧所有电机 指令:
M18 J[0-4]参数:J=0抱紧所有关节,J=1~4抱紧对应关节 返回值:M18 OK/M18 ERROR:0读取主控运行状态 指令:
M200返回值:M200 MainMoving:0(0-静止,1-运动中)获取执行点位缓冲区大小 指令:
M600返回值:M600 Queue_size:50
运动控制
- 运动控制速度范围:1-100(百分比),每1%约对应1.6°/s
- 运动到位反馈:
EndEnd - 限位报错自动上报:
LimitError:0(1:J1超限,2:J2超限,4:J3超限,8:J4超限,16:J2/J3耦合) - 碰撞检测自动上报:
CollisionDetectionError:1(1:J1,2:J2,3:J3)
1. 坐标控制(最大速度)
指令:G0
参数:X X轴坐标(mm),Y Y轴坐标(mm),Z Z轴坐标(mm),R R轴角度(°),F 速度(1%-100%)
返回值:EndEnd
示例:G0 X100 Y200 Z300 F100
说明:以最大速度运动到目标坐标
2. 坐标控制(规定速度)
指令:G1
参数:X X轴坐标(mm),Y Y轴坐标(mm),Z Z轴坐标(mm),R R轴角度(°),F 速度(1%-100%)
返回值:EndEnd
示例:G1 X223.500 Y0 Z-250 F100
说明:按规定速度运动到目标坐标
3. 多关节控制
指令:G1
参数:A J1关节角度(°),B J2关节角度(°),C J3关节角度(°),D J4关节角度(°),F 速度(1%-100%)
返回值:EndEnd
示例:G1 A10 B10 C10 F20
说明:机械臂各关节根据给定速度运动到目标角度
4. 单关节控制
指令:G1
参数:A/B/C/D 目标关节角度(°),F 速度(1%-100%)
返回值:EndEnd
示例:G1 A10 F20
说明:指定关节根据给定速度运动到目标角度
5. 单坐标控制
指令:G1
参数:X/Y/Z/R 目标坐标值,F 速度(1%-100%)
返回值:EndEnd
示例:G1 X10 F20
说明:机械臂末端沿指定坐标轴直线运动到目标位置
6. 持续关节运动(JogAngle)
指令:M13
参数:J 关节(1-4),D 方向(0-负向,1-正向),F 速度(1%-100%)
返回值:EndEnd
示例:M13 J3 D0 F100
说明:指定关节从当前角度沿指定方向持续运动,直到达到限位
7. 持续坐标运动(JogCoord)
指令:M14
参数:J 坐标轴(1-X,2-Y,3-Z,4-Rx),D 方向(0-负向,1-正向),F 速度(1%-100%)
返回值:EndEnd
示例:M14 J3 D0 F100
说明:机械臂末端沿指定坐标轴方向持续运动,直到达到限位
8. 关节步进控制
指令:M19
参数:J 关节(1-4),T 步进值(°),F 速度(1%-100%)
返回值:EndEnd
示例:M19 J3 T10 F100
说明:指定关节相对当前位置运动指定角度增量
- J1步进范围:±(0.1~316)°
- J2步进范围:±(0.1~103)°
- J3步进范围:±(0.1~101)°
- J4步进范围:±(0.1~358)°
9. 坐标步进控制
指令:M20
参数:J 坐标轴(1-X,2-Y,3-Z,4-Rx),T 步进值(mm/°),F 速度(1%-100%)
返回值:EndEnd
示例:M20 J3 T10 F100
说明:机械臂末端沿指定坐标轴相对运动指定距离
- X步进范围:±(0.1~316)mm
- Y步进范围:±(0.1~360)mm
- Z步进范围:91~-157mm
- R步进范围:±180°
10. 运动急停
指令:M15
返回值:M15 OK / M15 ERROR:0
说明:立即终止当前运动,清空缓冲区所有未执行的运动规划指令
11. 碰撞检测后解锁
指令:M5
返回值:M5 OK / M5 ERROR:0
说明:碰撞后系统进入锁定状态,无法运动控制,该指令用于解除运动限制
12. 强制回零
指令:M37
返回值:EndEnd / M37 ERROR:0
说明:机械臂先回到A0B40C30D0位置,再回到零位(A0B0C90D0),防止回零中途发生耦合
13. 逆解:输入坐标读取角度
指令:M46
参数:X X轴坐标(mm),Y Y轴坐标(mm),Z Z轴坐标(mm),R R轴角度(°)
返回值:M46 angle:A-3.501 B33.398 C156.709 D-167.168
错误:M46 ERROR:1(超限),M46 ERROR:2(耦合),M46 ERROR:3(无解)
示例:M46 X215.517 Y-13.185 Z-60.710 R-170.669
14. 正解:输入角度读取坐标
指令:M47
参数:A J1关节角度(°),B J2关节角度(°),C J3关节角度(°),D J4关节角度(°)
返回值:M47 coord:X215.516 Y-13.185 Z-60.710 R-170.669
错误:M47 ERROR:1(超限),M47 ERROR:2(耦合)
示例:M47 A-3.501 B33.398 C156.709 D-167.168
15. 预览模式
指令:M51
参数:X X轴坐标(mm),Y Y轴坐标(mm),Z Z轴坐标(mm),R R轴角度(°)
返回值:M51 OK(坐标可到达) / M51 ERROR:0(坐标无法到达)
示例:M51 X223.500 Y0 Z50 R50
说明:输入完整坐标,判断坐标是否可达,不产生实际运动
辅助功能
配置
零位校准 指令:
M30参数:J关节(0-4),0-所有关节,1~4-对应关节 返回值:EndEnd示例:M30 J1说明:机器手动移到刻度线后进行关节校准,设置J1J2J4当前位置为0度,J3为90度读取零位校准状态 指令:
M119返回值:M119 ZEROSTATE:0,0,0,0(1-已校准,0-未校准)零位校准状态擦除 指令:
M32参数:J关节(1-4) 返回值:M32 OK/M32 ERROR:0设置RGB颜色 指令:
M23参数:R红色(0-255),G绿色(0-255),B蓝色(0-255) 返回值:M23 OK/M23 ERROR:0示例:M23 R50 G50 B50末端按钮使能 指令:
M35返回值:M35 OK/M35 ERROR:0说明:使能后可用末端按钮进行机械臂全关节放松末端按钮失能 指令:
M36返回值:M36 OK/M36 ERROR:0读取末端按钮状态 指令:
M64返回值:M64 BTN:0(1-按下,0-松开)获取碰撞检测阈值 指令:
M3返回值:M3 CollisionThreshold:0,0,0,0(范围:0.5~5)设置碰撞检测阈值 指令:
M21参数:J关节(0-4,0-所有),P阈值(0.5~5°) 返回值:M21 OK/M21 ERROR:0示例:M21 J1 P2清除错误状态 指令:
M40返回值:M40 OK/M40 ERROR:0说明:一次性清除所有错误状态,硬件错误需修复硬件后才可正常清除
IO控制
底座IO
设置底座IO输出 指令:
M60参数:P引脚号(1-10),K模式(0-输入,1-输出),S状态(0-低电平,1-高电平) 返回值:M60 OK/M60 ERROR:0示例:M60 P5 K0 S0说明:默认1-5输入,6-10输出。输入模式下,上下拉仅用于提供默认电平,实际电平由外部信号决定读取底座IO状态 指令:
M61返回值:M61 IO:0,0,0,0,0,2,2,2,2,2说明:0-输入低电平,1-输入高电平,2-输出低电平,3-输出高电平
末端IO
设置末端IO输出 指令:
M62参数:P引脚号(3-4,控制IO3/IO4),S状态(0-低电平,1-高电平) 返回值:M62 OK/M62 ERROR:0示例:M62 P3 S1说明:IO1、IO2为输入引脚,IO3、IO4为输出引脚读取末端IO状态 指令:
M63返回值:M63 IO:0,0,0,0说明:0-输入低电平,1-输入高电平,2-输出低电平,3-输出高电平
夹爪控制
控制夹爪角度 指令:
M25参数:P角度(1-100,对应实际0.5~50°),F速度(1-100) 返回值:M25 OK/M25 ERROR:0示例:M25 P50 F50读取夹爪角度 指令:
M50返回值:M50 GRIPPERANGLE:50(0-100,100为张开)设置夹爪参数 指令:
M24参数:J地址(1-69),K模式(1-值范围0-255,2-值范围>255),L值(0-65535) 返回值:M24 OK/M24 ERROR:0示例:M24 J5 K1 L20读取夹爪参数 指令:
M26参数:J地址(1-69),K模式(1-值范围0-255,2-值范围>255) 返回值:M26 GripperParameters:0读取夹爪运动状态 指令:
M27返回值:M27 MotionState:0(0-静止,1-运动)设置夹爪使能状态 指令:
M28参数:S状态(0-失能,1-使能) 返回值:M28 OK/M28 ERROR:0说明:使能后人为掰动会自动复位夹爪校准 指令:
M29返回值:M29 OK/M29 ERROR:0说明:夹爪张开最大里程进行校准,校准后当前位置为100
吸泵控制
- 设置吸泵开合状态
指令:
M70参数:S状态(0-吸,1-吹,2-关) 返回值:M70 OK/M70 ERROR:0示例:M70 S1
激光/PWM控制
开关激光 指令:
M80参数:K状态(0-关闭,1-开启) 返回值:M80 OK/M80 ERROR:0示例:M80 K1设置PWM档位(激光) 指令:
M81参数:S占空比(0-255) 返回值:M81 OK/M81 ERROR:0示例:M81 S50开关自定义PWM 指令:
M82参数:K状态(0-关闭,1-开启) 返回值:M82 OK/M82 ERROR:0示例:M82 K1设置PWM档位(自定义) 指令:
M83参数:S占空比(0-255) 返回值:M83 OK/M83 ERROR:0示例:M83 S50读取PWM设置状态 指令:
M84返回值:M84 PWM:0,0,0,0(激光开关状态,激光档位,自定义PWM开关状态,自定义PWM档位)
传送带控制
传送带控制 指令:
M38参数:J开关(1-开,0-关),K方向(0-向前,1-向后),L速度(1-125mm/s),S距离(0-连续运动,1-1200mm) 返回值:M38 OK/M38 ERROR:0示例:M38 J1 K1 L20 S1000传送带停止 指令:
M39返回值:M39 OK/M39 ERROR:0说明:传送带在运动状态下缓慢停止,减速时间约500ms
状态查询
读取角度 指令:
M405返回值:M405 angles:0.00,0.00,0.00,0.00读取坐标 指令:
M406返回值:M406 coords:0.00,0.00,0.00,0.00开启或关闭定时上报角度数据 指令:
M407参数:S模式(0-关,1-串口1定时上报,2-串口0定时上报,3-WiFi定时上报,4-蓝牙定时上报) 返回值:M407 angles:...;coords:...;pwr:1;run:0;err:0读屏幕主次版本 指令:
M401返回值:M401 GetSystemVersion:12(例如版本V1.2)读屏幕更正版本 指令:
M402返回值:M402 GetModifyVersion:5(例如更正版本号5)获取屏幕是否在控制页面 指令:
M601返回值:M601 ControlPage:1(1-控制页面,0-非控制页面)通知屏幕PC是否在控制页面 指令:
M602参数:S状态(1-PC在控制页面,0-PC不在控制页面) 返回值:M602 OK/M602 ERROR:0获取限位开关状态 指令:
M52返回值:M52 SIG:0
I2C通信
I2C数据写操作 指令:
M300参数:I会话号(0-255),U包号(0-255),S操作(1-写),L从机地址(0-125),H寄存器地址(0-65535),N数据长度(1-255),K数据(十六进制,长度由N决定) 返回值:M300 OK/M300 ERROR:0~7示例:M300 I1 U1 S1 L13 H45 N2 K8f 1E说明:ERROR:1-缺少必要参数,ERROR:2-数据长度N和实际数据数量不匹配,ERROR:3-缺少K参数,ERROR:4-地址错/设备未接,ERROR:5-从机无应答,ERROR:6-参数非法,ERROR:7-二进制帧CRC错误I2C数据读操作 指令:
M300参数:I会话号(0-255),U包号(0-255),S操作(0-读),L从机地址(0-125),H寄存器地址(0-65535),N数据长度(1-255) 返回值:M300 data:0f 24(读取的数据)/M300 ERROR:0~7示例:M300 I1 U1 S0 L23 HFFFF N2
Modbus指令介绍(适用于RS485通信)
通信参数
| 参数 | 值 |
|---|---|
| 波特率 | 115200 |
| 数据位 | 8 |
| 停止位 | 1 |
| 校验位 | 无 |
| 设备地址 | 46(0x2E) |
| 写功能码 | 16(0x10) |
| 读功能码 | 03(0x03) |
说明:校验位(串口硬件层)和校验码(Modbus协议层)是不同的概念:
- 校验位:UART串口通信层面的硬件校验,本协议采用"无校验位"(8N1模式)
- 校验码:Modbus协议层面的软件校验,采用CRC-16循环冗余校验,附加在数据帧末尾
收发格式
通信帧格式
1. 写命令(主机 → 设备)
| 字段 | 长度 | 说明 |
|---|---|---|
| 地址 | 1字节 | 设备地址:46(0x2E) |
| 功能码 | 1字节 | 0x10(写多个寄存器) |
| 起始寄存器地址 | 2字节 | 寄存器起始地址(高字节在前) |
| 寄存器数量 | 2字节 | 要写入的寄存器数量N |
| 数据字节数 | 1字节 | 数据字节数 = 2×N |
| 数据 | 2×N字节 | 实际数据(高字节在前) |
| 校验码 | 2字节 | Modbus CRC16(低字节在前) |
格式: [地址-0x2E][功能码-0x10][寄存器地址-2字节][寄存器数量-2字节][数据字节数-1字节][数据-2*N字节][校验码-2字节]
2. 写反馈(设备 → 主机)
| 字段 | 长度 | 说明 |
|---|---|---|
| 地址 | 1字节 | 0x2E |
| 功能码 | 1字节 | 0x10 |
| 起始寄存器地址 | 2字节 | 寄存器起始地址 |
| 寄存器数量 | 2字节 | 已写入的寄存器数量 |
| 校验码 | 2字节 | Modbus CRC16(低字节在前) |
3. 读命令(主机 → 设备)
| 字段 | 长度 | 说明 |
|---|---|---|
| 地址 | 1字节 | 0x2E |
| 功能码 | 1字节 | 0x03 |
| 起始寄存器地址 | 2字节 | 寄存器起始地址 |
| 寄存器数量 | 2字节 | 要读取的寄存器数量N |
| 校验码 | 2字节 | Modbus CRC16(低字节在前) |
4. 读反馈(设备 → 主机)
| 字段 | 长度 | 说明 |
|---|---|---|
| 地址 | 1字节 | 0x2E |
| 功能码 | 1字节 | 0x03 |
| 数据字节数 | 1字节 | 数据字节数 = 2×N |
| 数据 | 2×N字节 | 读取的数据 |
| 校验码 | 2字节 | Modbus CRC16(低字节在前) |
注意: 寄存器地址00 xx表示转发给STM32的指令,01 xx表示屏幕本地指令。 Modbus中使用16位补码表示有符号整数。 校验码计算使用Modbus CRC16,低字节在前。
案例
读取主次版本号:
2E 03 00 01 00 CRC1 CRC2反馈:2E 03 00 01 02 00 0C CRC1 CRC2(版本V1.2)坐标控制:
2E 10 00 04 0A XX XX XX XX XX XX XX XX XX XX CRC1 CRC2到位反馈:2E 10 00 5B 00 CRC1 CRC2
Modbus指令列表
基础控制
| 指令(只是作为参考Gcode指令,并不是Modbus指令内容) | 功能码 | 寄存器地址 | 数据字节数 | 数据格式 | 返回字节数 | 返回数据格式 | 说明 |
|---|---|---|---|---|---|---|---|
| G6 | 03 | 00 01 | 0 | - | 2 | byte1-2: 主次版本号(如V1.2则为12) | 读取主控主次版本号 |
| G7 | 03 | 00 02 | 0 | - | 2 | byte1-2: 更正版本号 | 读取主控更正版本号 |
| G8 | 03 | 01 06 | 0 | - | 4 | byte1-4: 32位错误状态 | 读错误状态(32位) |
| G11 | 16 | 01 08 | 0 | - | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 升级STM32固件 |
| M5 | 16 | 00 09 | 0 | - | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 碰撞检测后解锁 |
| M17 | 16 | 00 10 | 2 | byte1-2: J(0-4, 0=所有关节) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 放松电机 |
| M18 | 16 | 00 11 | 2 | byte1-2: J(0-4, 0=所有关节) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 抱紧电机 |
| M22 | 03 | 00 12 | 0 | - | 5 | byte1-5: J1~J4+传送带使能状态(1=使能,0=失能) | 读电机使能状态 |
| M200 | 03 | 01 07 | 0 | - | 1 | byte1: 1=运动中,0=静止 | 读取主控运行状态 |
| M600 | 03 | 01 09 | 0 | - | 2 | byte1-2: 缓冲区大小 | 获取执行点位缓冲区大小 |
运动控制
| 指令(只是作为参考Gcode指令,并不是Modbus指令内容) | 功能码 | 寄存器地址 | 数据字节数 | 数据格式 | 返回字节数 | 返回数据格式 | 说明 |
|---|---|---|---|---|---|---|---|
| G0 | 16 | 00 03 | 10 | byte1-2:X100, byte3-4:Y100, byte5-6:Z100, byte7-8:R100, byte9-10:F*100 | - | 到位反馈: 2E 10 00 5B 00 CRC |
坐标控制(最大速度) |
| G1 | 16 | 00 04 | 10 | byte1-2:X100, byte3-4:Y100, byte5-6:Z100, byte7-8:R100, byte9-10:F*100 | - | 到位反馈: 2E 10 00 5B 00 CRC |
坐标控制(规定速度) |
| G1 | 16 | 00 05 | 10 | byte1-2:A100, byte3-4:B100, byte5-6:C100, byte7-8:D100, byte9-10:F*100 | - | 到位反馈: 2E 10 00 5B 00 CRC |
多关节控制 |
| G1 | 16 | 00 06 | 6 | byte1-2:坐标(1-4=X-R), byte3-4:数据100, byte5-6:F100 | - | 到位反馈: 2E 10 00 5B 00 CRC |
单坐标控制 |
| G1 | 16 | 00 07 | 6 | byte1-2:关节(1-4=A-D), byte3-4:角度100, byte5-6:F100 | - | 到位反馈: 2E 10 00 5B 00 CRC |
单关节控制 |
| M13 | 16 | 00 0A | 6 | byte1-2:关节(1-4), byte3-4:方向(0=负,1=正), byte5-6:F*100 | - | 到位反馈: 2E 10 00 5B 00 CRC |
持续关节运动 |
| M14 | 16 | 00 0B | 6 | byte1-2:坐标(1-4=X-R), byte3-4:方向(0=负,1=正), byte5-6:F*100 | - | 到位反馈: 2E 10 00 5B 00 CRC |
持续坐标运动 |
| M15 | 16 | 00 0F | 0 | - | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 运动急停 |
| M19 | 16 | 00 0C | 6 | byte1-2:关节(1-4), byte3-4:步进角度100, byte5-6:F100 | - | 到位反馈: 2E 10 00 5B 00 CRC |
关节步进控制 |
| M20 | 16 | 00 0D | 6 | byte1-2:坐标(1-4=X-R), byte3-4:步进值100, byte5-6:F100 | - | 到位反馈: 2E 10 00 5B 00 CRC |
坐标步进控制 |
| M37 | 16 | 00 1A | 0 | - | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 强制回零 |
| M46 | 03 | 00 33 | 8 | byte1-2:X100, byte3-4:Y100, byte5-6:Z100, byte7-8:R100 | 8 | byte1-2:A100, byte3-4:B100, byte5-6:C100, byte7-8:D100 | 逆解:输入坐标读取角度 |
| M47 | 03 | 00 34 | 8 | byte1-2:A100, byte3-4:B100, byte5-6:C100, byte7-8:D100 | 8 | byte1-2:X100, byte3-4:Y100, byte5-6:Z100, byte7-8:R100 | 正解:输入角度读取坐标 |
| M51 | 03 | 00 1D | 8 | byte1-2:X100, byte3-4:Y100, byte5-6:Z100, byte7-8:R100 | 2 | byte1: 可达1/不可达0, byte2: 失败种类 | 预览模式 |
配置
| 指令(只是作为参考Gcode指令,并不是Modbus指令内容) | 功能码 | 寄存器地址 | 数据字节数 | 数据格式 | 返回字节数 | 返回数据格式 | 说明 |
|---|---|---|---|---|---|---|---|
| M23 | 16 | 00 13 | 6 | byte1-2:R(0-255), byte3-4:G(0-255), byte5-6:B(0-255) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | RGB末端灯控制 |
| M30 | 16 | 00 14 | 2 | byte1-2:J(0-4, 0=所有关节) | - | 到位反馈: 2E 10 00 5B 00 CRC |
零位校准 |
| M32 | 16 | 00 16 | 2 | byte1-2:J(1-4) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 零位校准状态擦除 |
| M35 | 16 | 00 18 | 0 | - | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 末端按钮使能 |
| M36 | 16 | 00 19 | 0 | - | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 末端按钮失能 |
| M40 | 16 | 00 1C | 0 | - | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 清除错误状态 |
| M119 | 03 | 00 1F | 0 | - | 4 | byte1-4: J1~J4校准状态(1=已校准,0=未校准) | 读零位校准状态 |
IO控制
| 指令(只是作为参考Gcode指令,并不是Modbus指令内容) | 功能码 | 寄存器地址 | 数据字节数 | 数据格式 | 返回字节数 | 返回数据格式 | 说明 |
|---|---|---|---|---|---|---|---|
| M60 | 16 | 00 28 | 6 | byte1-2:P(1-10), byte3-4:K(0=输入,1=输出), byte5-6:S(0=低,1=高) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 设置底座IO输出 |
| M61 | 03 | 00 29 | 0 | - | 10 | byte1-10: 10个IO状态(0=输入低,1=输入高,2=输出低,3=输出高) | 读取底座IO状态 |
| M62 | 16 | 00 2A | 4 | byte1-2:P(3-4), byte3-4:S(0=低,1=高) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 设置末端IO输出 |
| M63 | 03 | 00 2B | 0 | - | 4 | byte1-4: 4个IO状态(0=输入低,1=输入高,2=输出低,3=输出高) | 读取末端IO状态 |
| M64 | 03 | 01 0C | 0 | - | 1 | byte1: 1=按下,0=松开 | 读取末端按钮状态 |
夹爪控制
| 指令(只是作为参考Gcode指令,并不是Modbus指令内容) | 功能码 | 寄存器地址 | 数据字节数 | 数据格式 | 返回字节数 | 返回数据格式 | 说明 |
|---|---|---|---|---|---|---|---|
| M24 | 16 | 00 22 | 4 | byte1-2:J(1-69), byte3-4:L(0-65535) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 设置夹爪参数 |
| M25 | 16 | 00 21 | 4 | byte1-2:P(1-100)*100, byte3-4:F(1-100) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 控制夹爪角度 |
| M26 | 03 | 00 23 | 2 | byte1-2:J(1-69) | 2 | byte1-2: 夹爪参数值 | 读取夹爪参数 |
| M27 | 03 | 00 24 | 0 | - | 2 | byte1-2: 运动状态(0=静止,1=运动) | 读取夹爪运动状态 |
| M28 | 16 | 00 25 | 2 | byte1-2:S(0=失能,1=使能) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 设置夹爪使能状态 |
| M29 | 16 | 00 26 | 0 | - | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 夹爪零位校准 |
| M50 | 03 | 00 20 | 0 | - | 2 | byte1-2: 夹爪角度*100 | 读取夹爪角度 |
吸泵/激光/PWM/传送带
| 指令(只是作为参考Gcode指令,并不是Modbus指令内容) | 功能码 | 寄存器地址 | 数据字节数 | 数据格式 | 返回字节数 | 返回数据格式 | 说明 |
|---|---|---|---|---|---|---|---|
| M70 | 16 | 00 27 | 2 | byte1-2:S(0=吸,1=吹,2=关) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 设置吸泵开合状态 |
| M80 | 16 | 00 2C | 2 | byte1-2:K(0=关,1=开) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 开关激光 |
| M81 | 16 | 00 2D | 2 | byte1-2:S(0-255) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 设置PWM档位(激光) |
| M82 | 16 | 00 2E | 2 | byte1-2:K(0=关,1=开) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 开关自定义PWM |
| M83 | 16 | 00 2F | 2 | byte1-2:S(0-255) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 设置PWM档位(自定义) |
| M84 | 03 | 00 32 | 0 | - | 4 | byte1:激光开关, byte2:激光档位, byte3:自定义PWM开关, byte4:自定义PWM档位 | 读取PWM设置状态 |
| M38 | 16 | 00 1B | 10 | byte1-2:J(0-1), byte3-4:K(0=前,1=后), byte5-8:L(50-500000), byte9-10:S(0=连续,1-1200mm) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 传送带控制 |
| M39 | 16 | 00 35 | 0 | - | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 传送带停止 |
I2C通信
| 指令(只是作为参考Gcode指令,并不是Modbus指令内容) | 功能码 | 寄存器地址 | 数据字节数 | 数据格式 | 返回字节数 | 返回数据格式 | 说明 |
|---|---|---|---|---|---|---|---|
| M300写 | 16 | 00 36 | N+6 | byte1:I(0-255), byte2:U(0-255), byte3:L(0-125), byte4-5:H(0-65535), byte6:N(1-255), byte7-(6+N):K数据 | 2 | byte1: 成功1/失败0, byte2: 失败种类 | I2C数据写操作 |
| M300读 | 03 | 00 37 | 6 | byte1:I(0-255), byte2:U(0-255), byte3:L(0-125), byte4-5:H(0-65535), byte6:N(1-255) | 1-255 | byte1~N: 读取的数据(十六进制) | I2C数据读操作(注意:错误时可能返回寄存器地址00 36) |
状态查询
| 指令(只是作为参考Gcode指令,并不是Modbus指令内容) | 功能码 | 寄存器地址 | 数据字节数 | 数据格式 | 返回字节数 | 返回数据格式 | 说明 |
|---|---|---|---|---|---|---|---|
| M52 | 03 | 00 38 | 0 | - | 1 | byte1: 限位开关返回值 | 获取限位开关状态 |
屏幕相关
| 指令(只是作为参考Gcode指令,并不是Modbus指令内容) | 功能码 | 寄存器地址 | 数据字节数 | 数据格式 | 返回字节数 | 返回数据格式 | 说明 |
|---|---|---|---|---|---|---|---|
| M401 | 03 | 01 01 | 0 | - | 2 | byte1-2: 屏幕主次版本号 | 读屏幕主次版本 |
| M402 | 03 | 01 02 | 0 | - | 2 | byte1-2: 屏幕更正版本号 | 读屏幕更正版本 |
| M405 | 03 | 01 04 | 0 | - | 8 | byte1-2:J1100, byte3-4:J2100, byte5-6:J3100, byte7-8:J4100 | 读角度 |
| M406 | 03 | 01 05 | 0 | - | 8 | byte1-2:X100, byte3-4:Y100, byte5-6:Z100, byte7-8:R100 | 读坐标 |
| M601 | 03 | 01 0A | 0 | - | 2 | byte1: 1=控制页面,0=非控制页面, byte2: 失败种类 | 获取屏幕是否在控制页面 |
| M602 | 16 | 01 0B | 2 | byte1-2:S(1=PC控制中,0=PC非控制中) | 2 | byte1: 成功1/失败0, byte2: 失败种类 | 通知屏幕PC是否在控制页面 |
自动上报
| 事件 | 功能码 | 寄存器地址 | 数据字节数 | 数据格式 | 返回字节数 | 返回数据格式 | 说明 |
|---|---|---|---|---|---|---|---|
| 限位报错 | 16 | 00 30 | - | - | 1 | byte1: 错误值(1=J1,2=J2,4=J3,8=J4,16=耦合) | 运动触发限位时自动上报 |
| 碰撞检测 | 16 | 00 31 | - | - | 1 | byte1: 碰撞关节(1=J1,2=J2,3=J3) | 运动触发碰撞时自动上报 |
报错信息表
错误状态位(高频读取byte43-46,共32位)
| 位 | 说明 | 位 | 说明 | 位 | 说明 |
|---|---|---|---|---|---|
| 0 | J1关节超限 | 8 | J1编码器报错 | 16 | J1驱动板过温 |
| 1 | J2关节超限 | 9 | J2编码器报错 | 17 | J2驱动板过温 |
| 2 | J3关节超限 | 10 | J3编码器报错 | 18 | J3驱动板过温 |
| 3 | J4关节超限 | 11 | J4编码器报错 | 19 | J4驱动板过温 |
| 4 | J1关节碰撞 | 12 | J1关节失能 | 20 | 传送带驱动板过温 |
| 5 | J2关节碰撞 | 13 | J2关节失能 | 21 | J2/J3耦合 |
| 6 | J3关节碰撞 | 14 | J3关节失能 | 22 | 坐标无解 |
| 7 | J4关节碰撞 | 15 | J4关节失能 | 23~31 | 预留 |
限位报错(LimitError)
| 值 | 说明 |
|---|---|
| 0 | 正常 |
| 1 | J1关节超限 |
| 2 | J2关节超限 |
| 4 | J3关节超限 |
| 8 | J4关节超限 |
| 16 | J2/J3关节耦合 |
碰撞检测报错(CollisionDetectionError)
| 值 | 说明 |
|---|---|
| 1 | J1关节碰撞 |
| 2 | J2关节碰撞 |
| 3 | J3关节碰撞 |
坐标无解
| 值 | 说明 |
|---|---|
| 1 | 坐标无解(运动到最远可到达位置后主动上报) |
逆解/正解错误
| 错误码 | 说明 |
|---|---|
| ERROR:1 | 关节超限 |
| ERROR:2 | 关节耦合 |
| ERROR:3 | 运动学无解 |
常见问题
机械臂无法运动?
- 查看机械臂是否已使能(M22)、关节电机有无报错(G8)、关节有无超限
- 碰撞后需先执行M5解锁
指令无响应
- 检查XOR校验码是否正确
- 检查指令格式是否符合
$指令*XX\r\n规范 - 检查通信波特率是否匹配
坐标无解
- 检查目标坐标是否在机械臂工作范围内
- 使用M51预览模式验证坐标是否可达
- 靠近奇异点时使用关节控制离开