Ag95_with_modbus
AG-95协议
某品牌机械臂末端485透传说明
TCP连接到端口60000,随后发送HEX数据给到该端口,该端口自动通过485透传到机械臂末端夹爪(AG-95),反过来AG-95的485反馈也会回馈到TCP客户端。
Modbus-RTU
| 01 | 06 | 01 00 | 00 A5 | 48 4D
|地址|指令码|指令|数据|CRC16低|CRC16高
而手爪使用Modbus-RTU协议和手爪的上位机(机械臂)通信。
结合TCP-485透传,机械臂的上位机可以通过Modbus-RTU Over TCP和机械臂ip:60000号端口进行通讯,使用ModbusPull工具可以进行测试。具体测试可以参考“初始化手爪”栏目。后续即可通过普通的TCP客户端通过60000号端口控制末端夹爪,便于在ROS等环境下进行开发。
注:Modbus-TCP和Modbus-RTU Over TCP的区别在于:前者无校验位(因为TCP/IP已经实现了CRC校验),后者仍然需要发送CRC校验位。
Modbus操作
初始化手爪
可以裸发送 “01 06 01 00 00 A5 48 4D ” 实现。
或者:将256(HEX:01 00)地址设置为165(A5),手爪完成初始化。
初始化状态读取地址:0x0200(DEC:512),结果含义:0 -> 未初始化, 1 -> 初始化完成, 2 -> 初始化中
读取可以发送 “01 03 02 00 00 01 85 B2”(查询ID为1,地址0x0200,一位),随后判断返回值即可。
返回结果例子:
01 03 02 00 01 79 84 # 初始化完成
01 03 02 00 02 39 85 # 初始化中
设置手爪位置
位置从0到100,先把该值乘以100,得到设置值
随后将该设置值写入线圈0x103(DEC:259)即可。
01 06 01 03 00 00 78 36 # 设置为0
01 06 01 03 03 E8 78 88 # 设置为100
如果是直接发,修改 01 03 后的两个HEX值即可(03 E8 = 1000),随后修改最后俩CRC16校验码。
读取就反过来,读取该线圈即可得到夹爪当前位置。
设置手爪力度
力度从0到100,不需要和位置一样将值乘以100
随后将该数值写入线圈0x101(DEC:257)。
01 06 01 01 00 64 D8 1D
读取就反过来,读取该线圈即可得到夹爪当前力度。
读取夹爪状态
状态线圈0x201(DEC:513),读取值意义如下:
0 -> 运动中
1 -> 到达设置位置
2 -> 夹住了物品
3 -> 物品掉落
-1 -> 错误
也可以发送原始值获取状态。
-> 01 03 02 01 00 01 D4 72
接收结果:
01 03 02 00 01 79 84
|-----| -> 这里的00 01就是结果