伽利略导航系统Modbus通信协议

注意此协议需要后端版本 6.6.3及以上

默认端口为3551。注意数据大小端规则是 byteorder=Endian.Big, wordorder=Endian.Little

触点寄存器说明

触点寄存器是只读的bool变量

地址 长度 类型 说明
1 1 bool 当前导航状态,1时说明开启了导航,0说明未开启导航
2 1 bool 当前建图状态,1说明开启了建图,0说明未开启
3 1 bool GC状态,1说明正在进行内存回收, 0说明状态正常
4 1 bool GBA状态,1说明正在进行闭环优化,0说明状态正常
5 1 bool 局部充电状态,1说明正在执行局部充电,0说明未在执行局部充电动作
6 1 bool 充电任务状态, 1说明正在执行充电任务,0说明未执行充电任务
7 1 bool 循环状态,1说明正在执行循环任务,0说明未执行循环任务
8 1 bool 保留位
9 1 bool 保留位
10 1 bool 保留位
11 1 bool 保留位
12 1 bool 保留位
13 1 bool 保留位
14 1 bool 保留位
15 1 bool 保留位
16 1 bool 保留位
17 1 bool 虚拟io0
18 1 bool 虚拟io1
19 1 bool 虚拟io2
20 1 bool 虚拟io3
21 1 bool 虚拟io4
22 1 bool 虚拟io5
23 1 bool 虚拟io6
24 1 bool 虚拟io7
25 1 bool IO模块输入0
26 1 bool IO模块输入1
27 1 bool IO模块输入2
28 1 bool IO模块输入3
29 1 bool IO模块输入4
30 1 bool IO模块输入5
31 1 bool IO模块输入6
32 1 bool IO模块输入7

线圈寄存器说明

线圈寄存器是具有读写功能的bool变量

地址 长度 类型 说明
1 1 bool 导航开关,1开始导航,0关闭导航
2 1 bool 建图开关,1开启建图,0关闭建图
3 1 bool 关机开关,1关机
4 1 bool 循环开关,1开启循环,0关闭循环
5 1 bool 充电开关,1开始自动充电任务,0停止自动充电任务
6 1 bool 保留位
7 1 bool 保留位
8 1 bool 保留位
9 1 bool 保留位
10 1 bool 保留位
11 1 bool 保留位
12 1 bool 保留位
13 1 bool 保留位
14 1 bool 保留位
15 1 bool 虚拟io8
16 1 bool 虚拟io9
17 1 bool 虚拟io10
18 1 bool 虚拟io11
19 1 bool 虚拟io12
20 1 bool 虚拟io13
21 1 bool 虚拟io14
22 1 bool 虚拟io15
23 1 bool IO模块输出0
24 1 bool IO模块输出1
25 1 bool IO模块输出2
26 1 bool IO模块输出3
27 1 bool IO模块输出4
28 1 bool IO模块输出5
29 1 bool IO模块输出6
30 1 bool IO模块输出7

输入寄存器说明

输入寄存器是只读的16位变量

地址 长度 类型 说明
1 1 int16 视觉系统状态,-1标系视觉系统处于关闭状态,0表示没初始化uninit,1表示正在追踪tracking,2表示丢失lost,1和2都表示视觉系统已经初始化完成。
2 2 float32 电池电压
4 1 int16 当前目标点编号,默认值为-1表示无效值,当正在执行无ID的任务是值为-2,比如通过Http API 创建的导航任务。
5 1 int16 当前目标点状态,0表示已经到达或者取消free,1表示正在前往目标点过程中working,2表示当前目标点的移动任务被暂停paused,3表示目标点出现错误error,默认值为-1表示无效值。
6 2 float32 机器人距离当前目标点的距离,单位为米,-1表示无效值,该值的绝对值小于0.01时表示已经到达。
8 2 float32 导航系统计算给出的前进速度控制分量,单位为m/s
10 2 float32 导航系统计算给出的角速度控制分量,单位为rad/s
12 2 float32 当前机器人实际前进速度分量,单位为m/s
14 2 float32 当前机器人实际角速度分量,单位为rad/s
16 2 float32 当前机器人在map坐标系下的X坐标,此坐标可以直接用于设置动态插入点坐标
18 2 float32 当前机器人在map坐标系下的Y坐标
20 2 float32 当前机器人在map坐标系下的z轴转角(yaw)
22 1 int16 当前追踪点数
24 2 uint32 当前信息时间戳,单位为秒
26 2 uint32 当前信息时间戳,剩余小于1秒的部分,单位为纳秒

保持寄存器说明

保持寄存器是具有读写功能的16位变量

地址 长度 类型 说明
1 2 float32 机器人遥控速度前进方向线速度,单位m/s,用于遥控机器人
3 2 float32 机器人遥控速度旋转方向角速度,单位rad/s,用于遥控机器人
5 1 int16 导航目标index,设置此值后,机器人会导航至对应目标
6 1 int16 1暂停任务,0继续任务
7 1 int16 1取消任务
8 6 3个float32 三个float32分别为 x,y,theta,即目标点的坐标和角度。设置此值后机器人会导航至对应坐标
14 1 int16 循环等待时间,单位为秒

程序例子

#!/usr/bin/env python3

"""
Test Modbus
"""

from pymodbus.client import ModbusTcpClient
from pymodbus.version import version
from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder
import time

ADDR_POWER = 2  # 电池电压, float32

if __name__ == '__main__':
    print(f"pymodbus version: {version}")
    address = ("127.0.0.1", 3551)
    client = ModbusTcpClient(
        host=address[0],
        port=address[1],
    )
    client.connect()
    while True:
        time.sleep(1)
        try:
            # pymodbus默认的地址会有一个偏移
            result = client.read_input_registers(ADDR_POWER - 1, 2, unit=1)
            print(f"result: {result.registers}")
            # 转换为浮点数
            decoder = BinaryPayloadDecoder.fromRegisters(
                result.registers, byteorder=Endian.Big, wordorder=Endian.Little)
            voltage = decoder.decode_32bit_float()
            print(f"voltage: {voltage}")
        except Exception as e:
            print(e)

results matching ""

    No results matching ""