Skip to content

XiaokangPro/height-sort-sim

Repository files navigation

PLC 高度分拣系统 A0 原型

这是 Windows 11 上的三进程自动化生产线仿真项目。目标应用为:

  • plc_app:有限 ST/SCL、梯形图与 PLC 状态机;
  • robot_app:通用六轴机器人运动学、轨迹和执行状态机;
  • visual_app:输送线、箱体、传感器、机器人和基础物理的 3D 可视化。

三个应用通过 ZeroMQ 和统一 JSON 协议通信,可运行在同一台电脑或同一局域网的不同电脑。

阶段状态

阶段6“Windows打包、部署与A0验收”已完成本机可执行部分。现在可以从离线发布ZIP安装并启动三个独立窗口,运行有限PLC逻辑、六轴机器人轨迹和3D场景完整闭环:

  • PLC窗口提供ST编辑、行列错误定位、运行/暂停/单步/复位、ST/有限梯形图双向转换、三类变量监视和扫描日志;
  • 3D程序使用 pyglet/OpenGL 显示输送线、左右目标区、传感器、参数化六轴机器人、夹爪和箱体;
  • PLC执行统一IR,高箱输出程序号1/right,低箱输出程序号2/left,并通过REQ/REP启动机器人;
  • 机器人窗口使用项目自有参数化六轴模型,执行FK/多初值IK、Ruckig轨迹、关节限制和基础碰撞验证;
  • 程序号1执行右侧抓放,程序号2执行左侧抓放,动作顺序为Home、接近、抓取、抬升、搬运、放置、退离、Home;
  • 机器人窗口显示六轴状态表、TCP、夹爪、状态机、活动步骤和关节轨迹曲线,并支持暂停、继续、停止、急停和复位;
  • 机器人连续发布真实计算的关节、TCP、夹爪和Ready/Busy/Done/Fault状态;3D程序据此更新连杆、建立/解除箱体附着并以空间传感器产生目标到位;
  • PLC只有在同一trace、同一箱体、方向匹配且 robot_donetarget_reached 同时成立时才发布一次周期完成;
  • 任一程序关闭后,其余窗口约2秒显示超时;重新启动后自动恢复在线。

3D场景采用固定步长半隐式积分、AABB平台接触和安全刚性附着,统一使用米、千克、秒;这是一套针对A0验收场景的基础物理,不宣称具备Bullet或工业数字孪生精度。最终发布候选包已使用三个真实进程通过10项正常/故障场景和20轮连续运行验证。严格A0结论仍为“未完全通过”,唯一未执行项是在另一套独立干净Windows 11系统或虚拟机中复测;当前只完成了项目外新目录、全新虚拟环境、离线安装和无IDE运行。

已验证环境

  • Windows 11 x64;
  • CPython 3.13.14;
  • PowerShell 7/Windows PowerShell;
  • 依赖轮子固定为 requirements.lock 中的版本和 SHA-256。

发布包要求 CPython 3.13.14 x64。Python 本身采用 PSF License,而需求许可证白名单未明确列出PSF,因此交付ZIP不再分发Python运行时;部署电脑先独立安装该版本,再由离线安装脚本创建项目私有 .runtime

安装与运行

cd D:\develop\Codex\CodexEKS\height-sort-sim
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install --require-hashes -r requirements.lock
.\scripts\run_phase4_checks.ps1

一键打开三个窗口:

.\scripts\start_all.ps1

也可以任意顺序分别启动:

.\.venv\Scripts\python.exe -m plc_app
.\.venv\Scripts\python.exe -m robot_app
.\.venv\Scripts\python.exe -m visual_app

无窗口健康检查:

.\.venv\Scripts\python.exe -m plc_app --check
.\.venv\Scripts\python.exe -m robot_app --check
.\.venv\Scripts\python.exe -m visual_app --check

无界面运行可用 --headless--duration 10 表示10秒后退出。

阶段3演示步骤

  1. 任意顺序打开三个窗口,等待所有对端显示“在线”;
  2. PLC窗口默认已装载 plc_app/examples/height_sort.st 并处于运行状态;
  3. 在3D程序通信窗口点击“发送模拟高箱”,观察PLC变量 program_no=1sort_right=True 和机器人收到程序号1;
  4. 机器人通过ACK后执行右侧抓放轨迹,观察六轴曲线、TCP、夹爪和步骤变化;3D通信窗口发送模拟右目标到位,机器人Done后PLC完成;
  5. 在PLC和机器人窗口分别点击“复位”,再发送模拟低箱,观察程序2左侧抓放和PLC完成;
  6. 在PLC窗口修改ST后点击“编译并装载”;错误程序会高亮对应行,成功后可暂停、单步、运行;
  7. 点击“ST → 梯形图”查看版本化JSON模型,或修改有限模型后点击“梯形图 → ST”;
  8. 关闭任一窗口,观察其余窗口显示“超时”,再重启并观察自动恢复。

PLC每次扫描记录在 logs/plc_scans/*.jsonl。完成一个周期后必须点击“复位”才能接受下一个箱体,这是阶段2的人工安全复位边界。

机器人独立演示可直接点击“程序1:向右”或“程序2:向左”。无界面20周期验收:

.\.venv\Scripts\python.exe -m robot_app --auto-test --cycles 20

阶段4 3D演示

单独启动3D程序:

.\scripts\start_visual.ps1

窗口操作:H生成高箱,L生成低箱,空格暂停/继续,R复位,C在机器人连杆处注入碰撞障碍,F恢复默认相机;按住鼠标左键拖动可环绕观察,滚轮缩放。HUD持续显示连接状态、trace_id、箱体位置、四个传感器、机器人/夹爪状态和故障。

无窗口20轮交替箱体验收:

.\.venv\Scripts\python.exe -m visual_app --auto-test --cycles 20

阶段5完整闭环演示与验收

一键启动三个窗口:

.\scripts\start_stage5_demo.ps1

等待三个程序显示对端“在线”,在3D窗口按 H 生成高箱或按 L 生成低箱。PLC将自动决策并启动机器人;机器人抓放、目标传感器触发并回Home后,PLC验证 robot_donetarget_reached,发布完成并自动复位下一轮。

运行10项真实三进程自动验收:

.\scripts\run_stage5_acceptance.ps1

完整操作、故障演示和视频录制方法见 A0演示操作手册

阶段6离线发布包

开发目录生成发布包:

.\scripts\build_release.ps1

dist\height-sort-sim-0.6.0-a0-win11-x64.zip 解压后,在发布目录运行:

.\scripts\Install.ps1 -PythonExe C:\Path\To\Python313\python.exe
.\scripts\Start-All.ps1
# 停止由Start-All启动的三个程序
.\scripts\Stop-All.ps1

也可运行 Start-PLC.ps1Start-Robot.ps1Start-Visual.ps1 独立启动。安装、配置、演示和排错分别见 Windows安装说明A0演示操作手册故障排查;实际验收结果见 阶段6验收报告

消息记录与回放

每个进程的所有有效收发消息和被拒绝原始帧记录到 logs/messages/*.jsonl

# 检查日志和Schema
.\.venv\Scripts\python.exe -m tools.message_replay inspect logs\messages\<文件名>.jsonl

# 把日志中的REQ命令重新发送到当前配置端点;新ID可避免被去重
.\.venv\Scripts\python.exe -m tools.message_replay replay logs\messages\<文件名>.jsonl --renew-ids

推荐技术栈

范围 选择 固定版本 原因
语言 CPython 3.13.x 本机已验证,候选二进制均有 Windows x64 wheel
通信 pyzmq / libzmq 27.1.0 REQ/REP、PUB/SUB、Poller;Windows wheel 可用
ST 解析 Lark 1.3.1 MIT、纯 Python、无必需依赖,适合受限语法
JSON Schema fastjsonschema 2.21.2 BSD、无必需依赖,可预编译校验器
轨迹 Ruckig 0.19.4 MIT、Windows wheel、本地点到点 jerk 限制轨迹
3D 窗口/渲染 pyglet 2.1.15 BSD、纯 Python、无必需依赖,不捆绑来源不明 DLL
PLC/机器人基础 UI Python 标准库 Tk状态工作台 首版减少依赖;打包前审计 Python/Tcl/Tk 运行时
运动学/碰撞/基础物理 项目自有实现 控制 A0 语义和许可证,保持确定性和可测试性

Panda3D、Bullet/PyBullet、Pinocchio 等评估结论见 许可证审计

文档

当前目录

height-sort-sim/
  AGENTS.md
  README.md
  LICENSE
  pyproject.toml
  requirements.lock
  config/
  docs/
  shared/
    protocol/
    communication/
    config/
    logging/
    ui/
  plc_app/
  robot_app/
  visual_app/
  tools/
  scripts/
  tests/
    unit/
    integration/
    end_to_end/
  third_party/

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors