modbus协议支持类型
- modbus UDP RTU [IP为控制器IP,端口为1339]
- modbus TCP RTU [IP为控制器IP,端口为1339]
- mobbus TCP [IP为控制器IP,端口为1440]
CRC在线校验工具
modbus地址是按照Table地址的排序对应,由于table是8位Bit地址递增1.modbus是16位Bit地址递增1.
所以table地址是modbus的2倍
例如在table中0×100是x坐标的地址,那么在modbus上是0×100 / 2 = 0×80
建议用table协议,由于table协议封装了多地址段一次性读写格式,你可以一包数据设置多段地址的多个寄存器。modbus只能一包地址设置一个连续的地址寄存器,在不同地址的轮询读取会降低通信的实时性
读命令帧 功能码0×03
| | | | | | | |
地址 | 功能码 | 起始地址高字节 | 起始地址低字节 | 读取数量高字节 | 读取数量低字节 | CRC高字节 | CRC低字节 |
读反馈命令帧 功能码0×03
| | | | | | | | |
地址 | 功能码 | 起始地址高字节 | 起始地址低字节 | 返回字节数 | 返回字节高位 | 返回字节低位 | CRC高字节 | CRC低字节 |
写命令帧 功能码0×06
| | | | | | | |
地址 | 功能码 | 起始地址高字节 | 起始地址低字节 | 写入字节高位 | 写入字节低位 | CRC高字节 | CRC低字节 |
写反馈命令帧 功能码0×06
| | | | | | | |
地址 | 功能码 | 起始地址高字节 | 起始地址低字节 | 写入字节高位 | 写入字节低位 | CRC高字节 | CRC低字节 |
len为类型的字节长度
- uint8 假如读一个数据,len=1,假如读二个数据,len=2 len为字节长度
- uint16 假如读一个数据,len=1,假如读二个数据,len=2 len为字节长度
- uint32 假如读一个数据,len=2,假如读二个数据,len=4 len为字节长度
- int8 假如读一个数据,len=1,假如读二个数据,len=2 len为字节长度
- int16 假如读一个数据,len=1,假如读二个数据,len=2 len为字节长度
- int32 假如读一个数据,len=2,假如读二个数据,len=4 len为字节长度
- float 假如读一个数据,len=2,假如读二个数据,len=4 len为字节长度
- string 长度可变,一般读20个长度即可
协议内容
此表格仅部分对接内容,详细更多信息联系深圳易行机器人
| | | |
发送相关 | - | - | - | - |
Table地址 | Modbus地址 | 字节 | 类型 | 描述 |
0×24c | 0×126 | 4 | 整型 | 全局ID |
0×250 | 0×128 | 1 | 整型 | 设置运行 |
0×252 | 0×129 | 1 | 整型 | 节点序号 |
0×253 | 0×129 | 1 | 整型 | 路线类型 |
0×256 | 0×12b | 1 | 整型 | 节点属性 |
0×257 | 0×12b | 1 | 整型 | 动作编号 |
0×260 | 0×130 | 4 | 浮点型 | x坐标 |
0×264 | 0×132 | 4 | 浮点型 | y坐标 |
0×268 | 0×134 | 4 | 浮点型 | Theta坐标 |
0×26c | 0×136 | 4 | 浮点型 | 高度值 |
0×290 | 0×148 | 16 | Ascii码 | 任务字 |
实时获取 | - | - | - | - |
0×100 | 0×80 | 4 | 浮点型 | 当前x坐标 |
0×104 | 0×82 | 4 | 浮点型 | 当前y坐标 |
0×108 | 0×84 | 4 | 浮点型 | 当前theta角度 |
0×38 | 0×1C | 4 | 浮点型 | 控制器输入电压 |
0×3f | 0×1f | 1 | 整型 | 电量百分比 |
0×244 | 0×122 | 4 | 整型 | Agv下一个节点ID |
0×248 | 0×124 | 4 | 整型 | Agv当前全局ID |
0×20 | 0×10 | 4 | 浮点型 | 当前速度 |
0×24 | 0×12 | 4 | 浮点型 | 当前摆角 |
0×28 | 0×14 | 4 | 浮点型 | 当前高度 |
0×2b0 | 0×158 | 16 | Ascii码 | 当前事件 |
0×320 | 0×190 | 16 | Ascii码 | 当前地图 |
0×211 | 0×108 | 1 | 整型 | 当前运行状态 |
初始定位 | - | - | - | - |
0xe0 | 0×70 | 1 | 整型 | 是否启动初始定位 |
0xf0 | 0×78 | 4 | 浮点型 | 初始位置X |
0xf4 | 0×7a | 4 | 浮点型 | 初始位置Y |
0xf8 | 0×7c | 4 | 浮点型 | 初始theta |
搜索节点 | - | - | - | - |
0×3d4 | 0×1ea | 4 | 整型 | 设置终点 |
0×3e0 | 0×1f0 | 16 | Ascii码 | 动作字 |
0×250 | 0×128 | 1 | 整型 | 设置3启动搜索 |
样例[以下是table地址为例]:
以下单位都为米/秒。高度单位为米
路线发送
0x260 设置单个节点的三个坐标的位置。
0x257 设置是否进行动作。[2静止升降,5静止动作,6无动作]
0x256 设置该点是起点还是终点。(已弃用,设置为0则可)
0x253 设置该点是直线还是曲线。 0直线
设置好以上属性后
0x293 设置动作名称,UPFOKR DOWNDORK 分别对应上升和下降
0x251 设置该点对应整条路线的第几个点。从0开始
以上发送一次为往路线中压入一个节点。循环压入10不同的节点后
0x250 设置1,则agv开始运行。
AGV自搜索式路线发送
需要把工程上传到agv控制器后,才可以通过控制器自搜索路线
如何上传工程
0x3d0 设置起点[可忽略](该点设置为-1,让AGV自身寻找最近的坐标点作为起点)
0x3d4 设置终点
0x3e0 动作任务字(设置该路线需要执行什么样的动作)
上述设置完成后
0x250 设置3,则AGV开始自身搜索路线运行
设置初始位置
0xf0 设置坐标x,y,theta值后
0xe0 设置为1.则开始初始定位
设置切换地图
0x330 设置切换地图的ascii名称。
设置完毕后
0x340 设置为0。
地图切换成功后内部程序会把0x340设置为1。当监控0x340为1时。证明地图切 换成功