在modbus通信协议中,NUC作为客户端主动连接AGV进行指令的下发,从而控制AGV进行相应的动作
提示:modbus为一问一答协议,发送一个请求后要等待回复才能发送第二个请求。
通信方式tcp 端口号502,设备默认通信端口
可使用的寄存器信息
寄存器类型 | 地址范围 | 读写属性 | 数据类型 |
离散输入寄存器 | 10001-10100 | 只读 | 简单的开关量状态,如是否处于急停 |
输入寄存器 | 30001-30120 | 只读 | 数据类型的状态,如系统状态、电量 |
线圈寄存器 | 00001-00100 | 读写 | 简单的开关量控制,如暂停运动 |
保持寄存器 | 40001-40100 | 读写 | 数据类型的控制指令,如移动到站点/位姿 |
注意:
在AGV通信协议中,将32位整型数字以大端序保存在连续的两个寄存器中。
如:0x11223344
寄存器地址k | 寄存器地址k+1 | ||
高字节 | 低字节 | 高字节 | 低字节 |
0x11 | 0x22 | 0x33 | 0x44 |
离散输入寄存器功能码02及相关信息
寄存器地址 | 描述 | 取值 |
10001 | 急停是否触发 | 1表示有效,0表示无效 |
10002 | 急停是否可恢复 | 1表示有效,0表示无效 |
10003 | 是否抱闸 | 1表示有效,0表示无效 |
10004 | 是否正在充电 | 1表示有效,0表示无效 |
10005 | 是否处于低功耗模式 | 1表示有效,0表示无效 |
10006 | 是否遇到障碍物减速 | 1表示有效,0表示无效 |
10007 | 是否遇到障碍物暂停 | 1表示有效,0表示无效 |
10009 | 当前是否可以运行移动任务,同时满足以下条件时有效。系统闲置、没有急停、没有解抱闸、不是低电量模式、定位成功、非手动控制模式、没有移动任务或移动任务已经结束、雷达、VSC、MOTOR1、MOTOR2、SRC都正常 | 1表示有效,0表示无效 |
10049 | 放行,即:动作(131,0,0)会等待此信号 | 1表示有效,0表示无效 |
输入寄存器功能码04及相关信息
寄存器地址 | 描述 | 类型 | 取值 |
30001 | 系统状态 | enum/uint16 | 0x01: 系统正在初始化 0x02: 系统空闲 0x03: 系统出错 0x04: 正在启动定位 0x05: 导航正在初始化 0x06: 导航正在寻路 0x07: 正在等待到达目标位置 0x08: 检测到障碍,减速 0x09: 导航正在重新寻路 0x0A: 遇到障碍暂停运动 0x0B: 无法抵达目标位置 0x0E: 正在初始化执行固定路径 0x0F: 正在等待固定路径执行结束 0x10: 执行固定路径检测到障碍,减速前进 0x11: 执行固定路径遇到障碍暂停运动 0x12: 无法检测到目标站点 |
30002 | 定位状态 | enum/uint16 | 0x01: 定位未启动 0x02: 定位正在初始化 0x03: 定位成功 0x04: 正在重定位 0x05: 定位错误,需要重新启动定位 |
30003 | 位姿x | int32 | 单位(毫米) |
30005 | 位姿y | int32 | 单位(毫米) |
30007 | 位姿yaw | int32 | 单位(弧度*1000) |
30009 | 位姿置信度 | uint16 | 单位0.01% |
30015 | 当前站点编号 | uint16 | |
30016 | 操作状态 | enum/uint16 | 0x00 状态不可用 0x01 自动控制模式 0x02 手动控制模式 |
30017 | x方向线速度 | int16 | 单位mm/s |
30018 | y方向线速度 | int16 | 单位mm/s |
30019 | 角速度 | int16 | 单位(1/1000)rad/s |
30021 | DI状态 | uint16 | |
30022 | DO状态 | uint16 | |
30025 | 硬件错误码 | uint32 | |
30027 | 系统上一次错误 | uint32 | |
30033 | 电池电压 | uint16 | 单位mV |
30034 | 电池电流 | int16 | 单位mA (负数为充电电流) |
30035 | 电池温度 | int16 | 单位 ℃ |
30036 | 电池预计使用时间 | uint16 | 单位 分钟 |
30037 | 当前电量百分比 | uint16 | [1, 100] |
30038 | 当前电池的状态 | enum/uint16 | 0x00: 无效状态 0x02: 正在充电 0x03: 未充电 |
30039 | 电池循环次数 | uint16 | 电池充放电循环使用了的次数 |
30040 | 电池标称容量 | uint16 | 单位mAh |
30041 | 运动总里程 | uint32 | 单位m |
30043 | 开机总时间 | uint32 | 单位s |
30045 | 开机总次数 | uint32 | 单位次 |
30047 | 系统当前时间 | uint32 | Linux时间戳 |
30049 | IP.1 | uint16 | 对外通信IP地址1 |
30050 | IP.2 | uint16 | 对外通信IP地址2 |
30051 | IP.3 | uint16 | 对外通信IP地址3 |
30052 | IP.4 | uint16 | 对外通信IP地址4 |
30053 | 系统主版本号 | uint16 | |
30054 | 系统次版本号 | uint16 | |
30055 | 系统修订版本号 | uint16 | |
30057 | 下视PGV扫描到的二维码ID | int32 | 需要有下视pgv |
30059 | 下视PGV扫描到的二维码x | int32 | |
30061 | 下视PGV扫描到的二维码y | int32 | |
30063 | 下视PGV扫描到的二维码yaw | int32 | |
30065 | 当前地图名的前两个字节编码 | uint16 | 比如当前地图名为:“1aa”,那么此寄存器的值为:0x3161 |
30097 | 当前正在运行的mission id | uint32 | |
30099 | Mission运行状态 | enum/uint16 | 0x00: 无效状态 0x02: 任务在队列中,但是又还没有启动的状态 0x03: 正在执行 0x04: 暂停执行 0x05: 执行结束 0x06: 正在取消 |
30100 | Mission执行结果 | enum/uint16 | 0x00: 无效状态 0x01: 任务执行成功 0x02: 任务取消 0x03: 任务执行出错 |
30101 | Mission错误码 | uint32 | |
30113 | 运动状态 | enum/uint16 | 0x00: 无效状态 0x02: 等待开始执行 0x03: 正在执行 0x04: 暂停执行 0x05: 执行结束 0x06: 正在取消 0x08: 交通管制 |
30114 | 当前移动任务no | int32 | |
30116 | 当前移动任务目标站点 | uint16 | |
30117 | 当前路径编号,移动任务运行过程中有效 | uint16 | |
30122 | 移动任务结果 | enum/uint16 | 0x00: 无效状态 0x01: 任务执行成功 0x02: 任务取消 0x03: 任务执行出错 |
30123 | 移动任务结果值 | uint32 | |
30129 | 动作任务状态 | enum/uint16 | 0x00: 无效状态 0x02: 等待开始执行 0x03: 正在执行 0x04: 暂停执行 0x05: 执行结束 0x06: 正在取消 |
30130 | 当前动作任务no | int32 | |
30132 | 当前动作任务ID | int32 | |
30134 | 当前动作任务参数0 | int32 | |
30136 | 当前动作任务参数1 | int32 | |
30138 | 动作任务结果 | enum/uint16 | 0x00: 无效状态 0x01: 任务执行成功 0x02: 任务取消 0x03: 任务执行出错 |
30139 | 动作任务结果值 | int32 | |
30151 | 获取铁安顶升机构高度 | int16 |
保持寄存器功能码06(Write Single Register)、16(Write Multiple Registers)
寄存器地址 | 描述 | 类型 | 取值 | 备注 |
40001 | 通过位姿定位x | int32 | 单位(毫米) | 必须一次性设置 |
40003 | 通过位姿定位y | int32 | ||
40005 | 通过位姿定位yaw | int32 | 单位(1/1000)rad | |
40007 | 通过站点定位 | uint16 | ||
40009 | 自主导航移动到位姿x | int32 | 单位(毫米) | 必须一次性设置 (此接口没有设置任务编号所以默认ID为0) |
40011 | 自主导航移动到位姿y | int32 | ||
40013 | 自主导航移动到位姿yaw | int32 | 单位(1/1000)rad | |
40015 | 自主导航移动到站点 | uint16 | (此接口没有设置任务编号所以默认ID为0) | |
40016 | 设置避障策略 | enum/uint16 | 0x01: 暂停运动直至障碍消失 0x02: 重新规划路径绕过障碍 0x10: 不避障(可能导致事故,谨 慎使用,自由导航有效) | 设置避障策略只是暂时保存在modbus模块中 ,所有的移动任务都用这个避障策略。 同理在Matrix上显示的避障策略也只是保存在M atrix上的,所以统一时刻两处的臂章策略可能 不一样。 |
40017 | 执行动作任务ID | uint16 | 必须一次性设置 (此接口没有设置任务编号所以默认ID为0) | |
40018 | 执行动作任务参数0 | uint16 | ||
40019 | 执行动作任务参数1 | uint16 | ||
40022 | 手动控制车辆以Vx线速度运 行 | int16 | 单位mm/s(前进为正,后退 为负) | 必须一次性设置; 需要在手动模式才生效; 每次只执行100ms若要连续运行需要不间断发 送 |
40023 | 手动控制车辆以Vy线速度运 行(保留) | int16 | 单位mm/s | |
40024 | 手动控制车辆以w角速度运 行 | int16 | 单位(1/1000)rad/s(向左边为正,向右为负) | |
40026 | 设置速度级别 | uint16 | [1, 100] | |
40027 | 设置当前站点 | uint16 | ||
40028 | 设置扬声器音量 | uint16 | [1, 100] | |
40029 | 设置当前地图 | uint16 | 1、取需要设置地图名字符 串的前两个字节 2、若存在多张地图字符串 的前两个字节相同,则按照 字符排序,取第一张地图。 3、建议用此功能时将地图 名都命名为纯ASCII字符形 式 | 例如: 1、需要将当前地图设置为:“12楼地图”,此 处设置的值为:0x3132. 2、若存在两张地图名分别为:“55a”和“55 aa”,当设置0x3535时,设置的当前地图为: “55a”。 |
40049 | 通过位姿强制定位x | int32 | 单位(毫米) | |
40051 | 通过位姿强制定位y | int32 | 单位(毫米) | |
40053 | 通过位姿强制定位yaw | int32 | 单位(1/1000)rad | |
40057 | 自主导航移动到位姿任务编 号 | int32 | ||
40059 | 自主导航移动到位姿x | int32 | 单位(毫米) | |
40061 | 自主导航移动到位姿y | int32 | 单位(毫米) | |
40063 | 自主导航移动到位姿yaw | int32 | 单位(1/1000)rad | |
40066 | 自主导航移动到站点任务编 号 | int32 | 必须一次性设置 (和40015的效果是一样的,但是这个接口可以 设置任务编号) | |
40068 | 自主导航移动到站点 | uint16 | ||
40070 | 执行动作任务编号 | int32 | 必须一次性设置 (和40017的效果是一样的,但是这个接口可以 设置任务编号) | |
40072 | 执行动作任务ID | int32 | ||
40074 | 执行动作任务参数0 | int32 | ||
40076 | 执行动作任务参数1 | int32 | ||
40097 | 执行mission任务 | uint32 | Matrix上能看到mission对 应的ID | 写一次此寄存器,将会将一个任务加入mission 队列,推荐modbus用户mission队列不要超过 1,若超过1个时,modbus拿不到mission的结 果,因为上一个结果会被覆盖掉。 |
线圈寄存器功能码05
寄存器地址 | 描述 | 取值 |
00001 | 暂停运动 | 写入0xFF00使能 |
00002 | 继续运动 | |
00003 | 停止运动(取消任务) | |
00005 | 停止定位 | |
00007 | 触发急停 | |
00008 | 解除急停 | |
00009 | 启动充电 | |
00010 | 停止充电 | |
00011 | 进入低功耗模式 | |
00012 | 退出低功耗模式 | |
00014 | 系统复位(重启) | |
00015 | 启动手动控制 | |
00016 | 停止手动控制 | |
00017 | 以0.495m/s向前移动(每设置一次移动10 0ms,此处是提供给开关专用,不支持 速度配置,推荐使用40022- 40024寄存器进行手动控制) | |
00018 | 以0.495m/s向后移动(每设置一次移动10 0ms) | |
00019 | 以0.389rad/s向左旋转(每设置一次移动1 00ms) | |
00020 | 以0.389rad/s向左旋转(每设置一次移动1 00ms) | |
00049 | 放行,即:发送此信号动作(131,0,0)会 结束 | |
00097 | 暂停mission任务 | |
00098 | 继续mission任务 | |
00099 | 取消mission任务 |
五、指令测试用例
触发急停
00 00 00 00 00 06 01 05 00 07 FF 00
解除急停
00 00 00 00 00 06 01 05 00 08 FF 00
暂停运动
00 00 00 00 00 06 01 05 00 01 FF 00
继续运动
00 00 00 00 00 06 01 05 00 02 FF 00
停止运动
00 00 00 00 00 06 01 05 00 03 FF 00
导航到站点
00 00 00 00 00 06 01 06 9C 4F 00 03
更多推荐
AGV集成整理modbus
发布评论