|
|
||
|---|---|---|
| crates | ||
| docs | ||
| migrations | ||
| src | ||
| web | ||
| .gitignore | ||
| API.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
README.md
PLC Control
PLC Control 是一个面向 PLC / OPC UA 场景的本地控制与监控系统,提供设备建模、点位管理、控制单元自动控制、实时信号展示、日志追踪和文档查看能力。
核心功能
1. 数据源与点位管理
- 支持 OPC UA 数据源接入、重连和节点浏览
- 支持从节点批量创建点位
- 支持点位与设备、标签、信号角色的绑定
- 支持批量写点和实时值查看
2. 设备与控制单元建模
- 设备可按
unit_id归属到控制单元 - 点位可按
signal_role标记为start_cmd、stop_cmd、run、flt、rem等控制信号 - 控制单元通过时长参数描述启停节奏与累计运行逻辑
3. 自动控制引擎
- 后端为每个启用中的控制单元维护独立异步任务
- 支持
Stopped -> Running -> DistributorRunning状态流转 - 支持通信锁定、故障锁定、人工确认
- 支持单个和批量启动/停止自动控制
4. 手动控制与联锁
- 设备手动启停前会检查 REM、FLT、信号质量和单元运行时状态
- 自动控制启用时会阻止冲突的手动命令
fault_locked、comm_locked、manual_ack_required都会阻止自动启动
5. 前端双视图
Ops视图:- 展示控制单元状态
- 展示设备卡片和 REM/RUN/FLT 实时信号
- 提供设备启停和批量自动控制入口
Config视图:- 展示数据源、设备、点位、事件、图表
- 展示实时日志流
6. 实时通信
- WebSocket 推送点位实时值
- WebSocket 推送控制单元运行时变化
- SSE 推送日志增量
- 日志流默认跟随最新
app.log*文件,支持轮转切换
系统设计
后端结构
src/main.rs- 启动 Axum 服务
- 注册 HTTP 路由、WebSocket 路由和静态页面
src/handler- HTTP 接口层
src/service- 数据查询与写入封装
src/control- 自动控制引擎、运行时存储、手动控制校验、模拟反馈
src/connection.rs- OPC UA 连接管理、订阅、轮询、批量写点
src/event.rs- 控制事件、实时点位事件和事件持久化
src/websocket.rs- WebSocket 房间与实时消息广播
控制引擎设计
控制引擎的几个关键点:
- 每个启用单元有一个独立任务
- 每轮循环都会重读单元配置和设备角色映射
- 设备/点位控制相关配置变更后,会主动唤醒对应单元任务
wait_phase使用sleep_until(deadline),保证阶段计时不会被中途轮询漂移
当前时长约束:
run_time_sec > 0stop_time_sec > 0acc_time_sec > 0bl_time_sec > 0acc_time_sec > run_time_sec
前端 Web 设计
前端采用原生 ES Module 和分片 HTML 结构。
关键模块:
web/js/app.js: 页面启动、视图切换、事件绑定web/js/ops.js: 运维视图渲染web/js/logs.js: WebSocket 与日志 SSE 处理web/js/docs.js: Markdown 文档抽屉web/js/units.js/equipment.js/points.js: 配置视图业务逻辑
文档查看入口:
- 可在前端页面中查看
API.md - 可在前端页面中查看
README.md
两者都通过统一的文档抽屉组件展示。
实时日志设计
日志能力包含两部分:
GET /api/logs- 拉取日志内容
GET /api/logs/stream- SSE 增量推送
日志轮转行为:
- 如果未指定
file,后端总是跟随最新app.log* - 一旦轮转到新文件,SSE 流自动切换
- 前端会插入分隔提示,标识当前切换到了哪个日志文件
运行方式
主要依赖
- Rust
- Axum
- Tokio
- SQLx
- PostgreSQL
- async-opcua
关键环境变量
DATABASE_URLHOSTPORTWRITE_API_KEYSIMULATE_PLC
文档索引
- API 接口说明:
API.md - 控制引擎计划:
docs/superpowers/plans/2026-03-24-control-engine.md - 双视图前端计划:
docs/superpowers/plans/2026-03-25-dual-view-web.md
当前实现特点
- 后端偏本地部署和现场控制使用
- 控制状态保存在内存中,重启后重置
- 前端和后端都围绕“实时控制 + 快速排障”设计