PSG(Protocol Stargate,协议星门) 是一套面向工业自动化和电力监控领域的通用规约通信平台, 提供从嵌入式边缘网关到 SCADA 主站服务器的全场景协议接入与数据转换解决方案。
Find a file
2f1b4bf2d4 chore: 清理多余 demo 文件
删除 banking/glass/ios 风格变体及构建脚本, 仅保留主 index.html, 更新 ios 风格文档
2026-07-21 22:21:30 +08:00
apps feat: 初始化 PSG 源码仓库目录骨架与 CMake 编译基础设施 2026-07-20 20:13:22 +08:00
cmake feat: 初始化 PSG 源码仓库目录骨架与 CMake 编译基础设施 2026-07-20 20:13:22 +08:00
core feat: 初始化 PSG 源码仓库目录骨架与 CMake 编译基础设施 2026-07-20 20:13:22 +08:00
l200 feat: 初始化 PSG 源码仓库目录骨架与 CMake 编译基础设施 2026-07-20 20:13:22 +08:00
protocols feat: 初始化 PSG 源码仓库目录骨架与 CMake 编译基础设施 2026-07-20 20:13:22 +08:00
psg-docs chore: 清理多余 demo 文件 2026-07-21 22:21:30 +08:00
s5000 feat: 初始化 PSG 源码仓库目录骨架与 CMake 编译基础设施 2026-07-20 20:13:22 +08:00
scripts feat: 初始化 PSG 源码仓库目录骨架与 CMake 编译基础设施 2026-07-20 20:13:22 +08:00
test feat: 初始化 PSG 源码仓库目录骨架与 CMake 编译基础设施 2026-07-20 20:13:22 +08:00
third_party feat: 初始化 PSG 源码仓库目录骨架与 CMake 编译基础设施 2026-07-20 20:13:22 +08:00
tools feat: 初始化 PSG 源码仓库目录骨架与 CMake 编译基础设施 2026-07-20 20:13:22 +08:00
.gitignore feat: 初始化 PSG 源码仓库目录骨架与 CMake 编译基础设施 2026-07-20 20:13:22 +08:00
.tmp-l03-dark.png feat(demos): L01/L03 HTML 原型 v2 重大升级 2026-07-20 23:40:38 +08:00
build.sh feat: 初始化 PSG 源码仓库目录骨架与 CMake 编译基础设施 2026-07-20 20:13:22 +08:00
CMakeLists.txt feat: 初始化 PSG 源码仓库目录骨架与 CMake 编译基础设施 2026-07-20 20:13:22 +08:00
CMakePresets.json feat: 初始化 PSG 源码仓库目录骨架与 CMake 编译基础设施 2026-07-20 20:13:22 +08:00
README.md feat: 初始化 PSG 源码仓库目录骨架与 CMake 编译基础设施 2026-07-20 20:13:22 +08:00

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.