line-laser-hmi
线激光视觉设备与运动控制器的 Qt 上位机(HMI),基于 line-laser-modbus 协议库,提供连接管理、模式控制、状态与位姿监控、实时曲线、手动下发和数据录制。
设计文档见 docs/design.md,协议文档见 line-laser-modbus/docs/proto.md。
功能
- 串口连接配置与自动枚举 COM 口,模拟模式无需硬件即可运行
- 5 种普通工作模式切换(按协议状态机校验)与独立急停按钮
- 设备状态字、时间戳、可用缓存数量(0xD002)、通信超时实时监控
- 当前 6 轴位姿数码显示与实时趋势曲线
- 手动下发目标示教位姿 / 纠偏量,设置在线跟踪自动纠偏目标;手动下发按当前模式限制,目标示教位姿写入前检查 0xD002 可用缓存数量
- 50ms 后台轮询、150ms 单帧超时(独立线程,不阻塞界面),连接成功后自动启动
- 快照录制为 CSV,通信日志独立窗口(菜单「视图 → 日志窗口」,Ctrl+L)可导出
安装与运行
python -m uv sync --default-index https://mirrors.ustc.edu.cn/pypi/simple
python -m uv run line-laser-hmi
或:
python -m uv run python -m line_laser_hmi
首次启动默认勾选「模拟模式」,直接点击「连接」即可(连接成功后自动开始轮询),位姿与曲线立即动起来。
--default-index仅用于把PySide6、pymodbus等公网依赖切到国内镜像加速,协议库走本地路径,不经过镜像。
协议库依赖(line-laser-modbus)
本项目不从 PyPI 安装协议库,而是以 uv 路径依赖 方式引用同仓库 line-laser-modbus。pyproject.toml 中两段配合:
[project]
dependencies = [
"line-laser-modbus", # 声明依赖(包名取自 $dir/pyproject.toml 的 [project].name)
"PySide6>=6.7",
"pyqtgraph>=0.13.7",
"pyserial>=3.5",
]
[tool.uv.sources]
line-laser-modbus = { path = "../xxx" } # 指明从本地 ../xxx 目录安装,而非 PyPI
python -m uv sync 时 uv 会把 ../xxx 作为本地包(可编辑安装)装入 .venv:
连接真实设备
取消「模拟模式」,在连接面板选择串口、确认波特率/从站地址,或先修改根目录 config.toml:
[serial]
port = "COM3"
slave_id = 8
baudrate = 115200
[polling]
interval_seconds = 0.05
[ui]
simulate = false
record_dir = "records"
测试
非 GUI 逻辑(配置、录制、模拟后端)可无显示运行:
python -m uv run pytest
python -m uv run ruff check
Description
Languages
Python
100%