PSG(Protocol Stargate,协议星门) 是一套面向工业自动化和电力监控领域的通用规约通信平台,
提供从嵌入式边缘网关到 SCADA 主站服务器的全场景协议接入与数据转换解决方案。
|
|
||
|---|---|---|
| apps | ||
| cmake | ||
| core | ||
| l200 | ||
| protocols | ||
| psg-docs | ||
| s5000 | ||
| scripts | ||
| test | ||
| third_party | ||
| tools | ||
| .gitignore | ||
| .tmp-l03-dark.png | ||
| build.sh | ||
| CMakeLists.txt | ||
| CMakePresets.json | ||
| README.md | ||
PSG (Protocol Stargate) — 协议星门
╔══════════════════════════════════════════════════════════╗
░░ ██████╗ ███████╗ ██████╗ ░░
░░ ██╔══██╗ ██╔════╝ ██╔════╝ ░░
░░ ██████╔╝ ███████╗ ██║ ███╗ ░░
░░ ██╔═══╝ ╚════██║ ██║ ██║ ░░
░░ ██║ ███████║ ╚██████╔╝ ░░
░░ ╚═╝ ╚══════╝ ╚═════╝ ░░
░░ ──────────────────────────────────────────── ░░
░░ P r o t o c o l S t a r g a t e ░░
╚══════════════════════════════════════════════════════════╝
通用工业规约通信平台 — 从嵌入式边缘网关到 SCADA 主站的全场景协议接入与数据转换解决方案
进程拓扑
┌──────────────────────────────────────────────────────────────┐
│ PSG 进程拓扑 │
│ │
│ ┌──────────┐ │
│ │ sg_mgr │ ← 管理进程 (PID 1) │
│ │ C09 入口 │ 引导 → fork 所有子进程 │
│ └────┬─────┘ │
│ │ │
│ ┌────────┬─────────┼─────────┬──────────┐ │
│ ▼ ▼ │ ▼ ▼ │
│ ┌────────┐┌────────┐ │ ┌────────┐┌──────────┐ │
│ │sg_south││sg_north│ │ │sg_alarm││sg_archive│ │
│ │ C01入口││ C01入口│ │ │P06告警 ││ P07归档 │ │
│ │ dlopen ││ dlopen │ │ │ 引擎 ││ 引擎 │ │
│ └───┬────┘└───┬────┘ │ └────────┘└──────────┘ │
│ │ │ │ │
│ ▼ ▼ │ ┌────────┐┌──────────┐ │
│ proto_iec104.so │ │ sg_calc││ sg_gui │ │
│ proto_modbus.so │ │P08计算 ││ P01 Qt │ │
│ proto_dnp3.so │ │ 引擎 ││ 统一GUI │ │
│ proto_iec61850.so │ └────────┘│ S5000 │ │
│ proto_mqtt.so │ └──────────┘ │
│ proto_opcua.so │ │
│ ... │ ┌────────┐ │
│ │ │ sg_web │ ← Web 服务 │
│ │ │L200运维│ L200/S5000 共用 │
│ │ │S5000HMI│ │
│ │ └────────┘ │
│ │ │
│ 共享内存: │ │
│ ┌───────────────────────┐ │ │
│ │ RTDB (C03) │◀┘ 所有进程只读 mmap │
│ │ 双缓冲 零拷贝 │ mgr 独占写入 + 协作 swap │
│ │ L200: ~66MB │ │
│ │ S5000: ~656MB │ │
│ └───────────────────────┘ │
│ │
│ IPC 总线: NNG (nanomsg-next-gen) pub/sub + req/rep │
└──────────────────────────────────────────────────────────────┘
| 进程 | 入口位置 | 核心逻辑 | 加载协议 | 产品 |
|---|---|---|---|---|
sg_mgr |
apps/sg_mgr/main.c |
core/procmgr/ (C09) |
— | L200 / S5000 |
sg_south |
apps/sg_south/main.c |
core/protocol/ (C01) |
✅ dlopen | L200 / S5000 |
sg_north |
apps/sg_north/main.c |
core/protocol/ (C01) |
✅ dlopen | L200 / S5000 |
sg_web |
apps/sg_web/main.c |
l200/webops/ / s5000/web/ |
— | L200 / S5000 |
sg_gui |
s5000/gui/src/main.cpp |
s5000/gui/ (P01) |
— | S5000 |
sg_alarm |
s5000/alarm/src/sg_alarm_main.c |
s5000/alarm/ (P06) |
— | S5000 |
sg_archive |
s5000/archive/src/sg_archive_main.c |
s5000/archive/ (P07) |
— | S5000 |
sg_calc |
s5000/virtengine/src/sg_virtengine_main.c |
s5000/virtengine/ (P08) |
— | S5000 |
源码目录结构
psg/
├── CMakeLists.txt ← 顶层 CMake (产品选择 + 编译选项)
├── CMakePresets.json ← IDE / CI 统一入口
├── build.sh ← 开发者编译入口 (薄封装)
│
├── cmake/ ← CMake 工具链与模块
│ ├── PSGConfig.cmake ← 产品型号 + 编译开关推导
│ ├── DependencyLayers.cmake ← 依赖层级约束
│ ├── Dependencies.cmake ← 外部依赖统一管理
│ ├── toolchain-arm32.cmake ← ARM32 交叉编译 (L200)
│ ├── toolchain-aarch64.cmake ← ARM64 交叉编译 (S5000)
│ └── toolchain-x86_64-windows.cmake
│
├── core/ ← C01~C11 共享核心 (L200/S5000 100% 共用)
│ ├── protocol/ # C01 ← 协议接口契约 (纯头文件)
│ ├── index/ # C02 ← 地址索引引擎
│ ├── rtdb/ # C03 ← RTDB 实时数据库
│ ├── config/ # C04 ← 配置管理核心
│ ├── hal/ # C05 ← HAL 跨平台抽象
│ ├── logger/ # C06 ← 日志系统
│ ├── soe/ # C07 ← SOE 事件记录
│ ├── timesync/ # C08 ← 对时管理子系统
│ ├── procmgr/ # C09 ← 进程管理 (mgr)
│ ├── fbsloader/ # C10 ← FlatBuffers 加载器
│ └── monitord/ # C11 ← 监视运维代理
│
├── protocols/ ← 协议插件联邦 (独立项目,dlopen 加载)
│ ├── _common/ ← 跨协议共享 (IEC ASDU, CRC)
│ ├── proto-iec104/
│ ├── proto-modbus/
│ ├── proto-dnp3/
│ ├── proto-iec61850/ ← 含 third_party/libiec61850
│ ├── proto-opcua/ ← 含 third_party/open62541
│ ├── proto-mqtt/
│ ├── proto-iec103/
│ ├── proto-iec101/
│ └── proto-dlt645/
│
├── l200/ ← L01~L03 PSG-L200 专用
│ ├── webops/ # L01 ← 运维 Web
│ ├── sqlite/ # L02 ← SQLite 存储适配
│ └── cfgtool/ # L03 ← 组态工具 (stargate-cfg-lite)
│
├── s5000/ ← P01~P08 PSG-S5000 专用
│ ├── gui/ # P01 ← 统一原生 GUI (Qt)
│ ├── mysql/ # P02 ← MySQL 存储适配器
│ ├── ha/ # P03 ← HA 主备冗余
│ ├── web/ # P04 ← Web HMI 远程巡视
│ ├── security/ # P05 ← 安全认证 (RBAC+审计)
│ ├── alarm/ # P06 ← 告警引擎
│ ├── archive/ # P07 ← 历史归档
│ └── virtengine/ # P08 ← 虚拟计算引擎
│
├── apps/ ← 轻量进程入口 (main ≤ 200 行)
│ ├── sg_mgr/
│ ├── sg_south/
│ ├── sg_north/
│ └── sg_web/
│
├── test/ ← 测试基础设施
│ ├── common/ ← 共享 mock / fixtures / helpers
│ ├── integration/ ← 跨进程集成测试
│ └── benchmark/ ← 性能基准
│
├── third_party/ ← Tier 1 源码嵌入 (mongoose, tinyexpr, minizip)
├── tools/stargate-cfg/ ← 桌面组态工具
├── scripts/ ← 构建脚本
├── docs/ ← 设计文档 (详见 psg-docs/)
└── .gitignore
快速开始
# 默认编译 (S5000, x86_64, Release)
./build.sh
# 编译 L200 嵌入式版本 (ARM32 交叉编译)
./build.sh --product=L200 --arch=arm32
# 编译 S5000 ARM64 版本
./build.sh --product=S5000 --arch=arm64
# Debug 模式 + 运行测试
./build.sh --product=S5000 --type=Debug --test
# 仅编译 RTDB 模块
./build.sh --target=sg_rtdb
# 清理
./build.sh --clean
# 离线编译 (无网络)
PSG_OFFLINE_BUILD=1 ./build.sh --offline
IDE 集成
支持 CMakePresets.json 的 IDE (VS Code / CLion / Qt Creator) 可直接选择预设:
s5000-x86_64-debug— S5000 桌面开发调试l200-x86_64-debug— L200 桌面开发调试s5000-aarch64-release— S5000 ARM64 发布构建
技术栈
| 层 | 技术 |
|---|---|
| 语言标准 | C11 (核心) + C++17 (Qt GUI / FlatBuffers 编译) |
| 构建系统 | CMake 3.21+ + Ninja |
| IPC 总线 | NNG (nanomsg-next-gen) |
| 配置格式 | FlatBuffers (运行时 mmap 零拷贝) |
| 实时数据库 | POSIX shm_open + 双缓冲 |
| L200 存储 | SQLite3 (WAL 模式) |
| S5000 存储 | MySQL 8.0 (InnoDB, 主从复制) |
| GUI 框架 | Qt 6.5+ Widgets (S5000) |
| Web 服务 | mongoose (嵌入式 HTTP + WebSocket) |
| 编码规范 | 华为 C 语言编程规范 + Doxygen 注释 |
文档
详细设计文档见 psg-docs/ 目录:
许可
Copyright (c) 2026 CreateStar. All rights reserved.