Go to file
caoqianming 63cf3d8c67 docs: update API doc references for per-app split
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 08:20:29 +08:00
crates feat(ops): register log and doc routes from shared core 2026-04-20 08:19:21 +08:00
docs refactor(core): move doc handler to core and split API.md per app 2026-04-20 08:18:51 +08:00
migrations db: enforce unique signal_role per equipment on point 2026-03-26 22:14:27 +08:00
web feat(feeder): add three-tab UI (ops / app-config / platform-config) 2026-04-17 13:34:18 +08:00
.gitignore chore(git): ignore local worktrees directory 2026-04-14 16:00:24 +08:00
Cargo.lock feat(ops): add operation-system app skeleton 2026-04-16 12:59:31 +08:00
Cargo.toml build(workspace): add dual-app workspace manifests 2026-04-14 16:29:52 +08:00
README.md docs: update API doc references for per-app split 2026-04-20 08:20:29 +08:00

README.md

PLC Control

PLC Control 是一个面向 PLC / OPC UA 场景的本地控制与监控系统,提供设备建模、点位管理、控制单元自动控制、实时信号展示、日志追踪和文档查看能力。

核心功能

1. 数据源与点位管理

  • 支持 OPC UA 数据源接入、重连和节点浏览
  • 支持从节点批量创建点位
  • 支持点位与设备、标签、信号角色的绑定
  • 支持批量写点和实时值查看

2. 设备与控制单元建模

  • 设备可按 unit_id 归属到控制单元
  • 点位可按 signal_role 标记为 start_cmdstop_cmdrunfltrem 等控制信号
  • 控制单元通过时长参数描述启停节奏与累计运行逻辑

3. 自动控制引擎

  • 后端为每个启用中的控制单元维护独立异步任务
  • 支持 Stopped -> Running -> DistributorRunning 状态流转
  • 支持通信锁定、故障锁定、人工确认
  • 支持单个和批量启动/停止自动控制

4. 手动控制与联锁

  • 设备手动启停前会检查 REM、FLT、信号质量和单元运行时状态
  • 自动控制启用时会阻止冲突的手动命令
  • fault_lockedcomm_lockedmanual_ack_required 都会阻止自动启动

5. 前端双视图

  • Ops 视图:
    • 展示控制单元状态
    • 展示设备卡片和 REM/RUN/FLT 实时信号
    • 提供设备启停和批量自动控制入口
  • Config 视图:
    • 展示数据源、设备、点位、事件、图表
    • 展示实时日志流

6. 实时通信

  • WebSocket 推送点位实时值
  • WebSocket 推送控制单元运行时变化
  • SSE 推送日志增量
  • 日志流默认跟随最新 app.log* 文件,支持轮转切换

项目结构

plc_control/
  Cargo.toml                    # Workspace root
  crates/
    plc_platform_core/          # 共享平台核心库配置、数据库、连接、事件、WebSocket 等)
    app_feeder_distributor/     # 投煤器布料机专用版
    app_operation_system/       # 运转系统专用版
  web/
    core/                       # 共享 HTML/CSS数据源、点位、设备、图表、日志等
    feeder/                     # 投煤器布料机页面 + JS
    ops/                        # 运转系统页面 + JS

共享平台核心库 (plc_platform_core)

  • model — 数据模型
  • db — 数据库初始化
  • connection — OPC UA 连接管理、订阅、轮询、批量写点
  • service — 数据查询与写入封装
  • control/command — 通用控制命令
  • control/runtime — 运行时状态存储
  • event — 事件信封与命名空间
  • websocket — WebSocket 房间与消息广播
  • telemetry — 点位遥测

业务应用

  • app_feeder_distributor — 投煤器/布料机控制引擎、业务 handler、业务事件
  • app_operation_system — 运转系统控制逻辑(开发中)

构建

# 投煤器布料机
cargo build -p app_feeder_distributor --release

# 运转系统
cargo build -p app_operation_system --release

部署

将编译产物和 web/ 目录放在同一级目录下:

deploy/
  app_feeder_distributor.exe
  web/
    core/
    feeder/

控制引擎设计

控制引擎的几个关键点:

  • 每个启用单元有一个独立任务
  • 每轮循环都会重读单元配置和设备角色映射
  • 设备/点位控制相关配置变更后,会主动唤醒对应单元任务
  • wait_phase 使用 sleep_until(deadline),保证阶段计时不会被中途轮询漂移

当前时长约束:

  • run_time_sec > 0
  • stop_time_sec > 0
  • acc_time_sec > 0
  • bl_time_sec > 0
  • acc_time_sec > run_time_sec

前端 Web 设计

前端采用原生 ES Module 和分片 HTML 结构,按应用拆分目录:

  • web/core/ — 共享 HTML 面板(数据源、点位、设备、图表、日志、文档抽屉)和样式
  • web/feeder/ — 投煤器专用入口、运维面板、控制单元表单、全部 JS 模块
  • web/ops/ — 运转系统专用入口(开发中)

每个应用的 Axum 路由使用 ServeDir 回退链:先查应用目录,再查 core 目录URL 路径无需变化。

实时日志设计

日志能力包含两部分:

  • GET /api/logs
    • 拉取日志内容
  • GET /api/logs/stream
    • SSE 增量推送

日志轮转行为:

  • 如果未指定 file,后端总是跟随最新 app.log*
  • 一旦轮转到新文件SSE 流自动切换
  • 前端会插入分隔提示,标识当前切换到了哪个日志文件

运行方式

主要依赖

  • Rust
  • Axum
  • Tokio
  • SQLx
  • PostgreSQL
  • async-opcua

关键环境变量

  • DATABASE_URL
  • HOST
  • PORT
  • WRITE_API_KEY
  • SIMULATE_PLC

文档索引

  • 投煤器布料机 API: docs/api-feeder.md
  • 运转系统 API: docs/api-ops.md
  • 双应用共享核心设计: docs/superpowers/specs/2026-04-14-dual-app-shared-core-design.md
  • 控制引擎计划: docs/superpowers/plans/2026-03-24-control-engine.md
  • 双视图前端计划: docs/superpowers/plans/2026-03-25-dual-view-web.md

当前实现特点

  • 后端偏本地部署和现场控制使用
  • 控制状态保存在内存中,重启后重置
  • 前端和后端都围绕“实时控制 + 快速排障”设计