feature/iec61850 #2

Merged
carrot merged 16 commits from feature/iec61850 into main 2026-08-19 06:48:37 +00:00
Owner
No description provided.
- 新增 feature/iec61850 分支,开发 IEC 61850 规约接入
- 归档供应商 iec_bus SDK(MIT):fbs/生成头/帧封装/5 示例/接入指南
  (docs/iec_bus/sdk,排除 build 产物)
- 新增 doc/protocol/iec61850_design.md:部署/模块视图、SDK 接入要点、
  映射配置 Schema 草案、四类协议实现设计、数据流/品质映射、许可证合规、
  测试计划、里程碑 M1~M8、风险清单
- modules.md:文档映射 + 4 个规划协议注册名
- todo.md:IEC 61850 章节(M1~M8 + GPL 合规项)
- progress.md:进度记录
- iprotocol 新增 iec_bus_type 库(vendored 引用 docs/iec_bus/sdk/include,
  PUBLIC 链接 flatbuffers),提供 UDS 帧协议 + iec_bus::type 消息定义
- iec_type_generated.h 用 flatc 25.9.23 重新生成(原 25.12.19,静态断言与
  项目 conan flatbuffers 版本不兼容)
- 验证:iec_bus_type 编译通过;5 个 SDK 示例全部编译通过;
  全量构建无回归,iprotocol 测试通过
- IecUdsSession:UDS 会话(同步 send + 后台 recv 线程吐原始字节,拆帧交上层)
- register_protocol():两步注册状态机(确认→带配置→tunnel_path),错误/超时/连接失败处理
- Iec61850Protocol 基类:parse 拆帧→handle_tunnel_message 分发,connect_tunnel/disconnect/reset
- 测试:FakeRegistry 模拟两步应答,7 用例(成功/不支持/无效配置/不在线/超时/隧道回显)
- CMake:photolink_iprotocol PUBLIC 链接 iec_bus_type
- 验证:iprotocol_tests 全过,全量 15/15 无回归
- iec61850_types.h:Iec61850Point/InstanceConfig(映射 + scale/deadband)
- 基类:configure 映射表、tick 链路失联检测、handle_tunnel_message 返回对象列表
- iec61850_goose_sub:值变化帧→ProtocolObject(bool/数值+scale/deadband),
  心跳帧仅刷新,收首帧触发恢复,链路事件驱动点位 quality
- 注册名 iec61850_goose_sub;7 测试用例
- 验证:iprotocol_tests 98 全过,全量 ctest 15/15 无回归
- encode() 按 point_id 反查映射,工程值→原始值(scale/offset 反向)
- 按 value_type 构造 GooseBool/Int/Uint/Float/Double 数据集成员
- GooseFrame 头字段取自配置;stNum/sqNum/心跳由引擎维护
- 基类 find_point_by_id + types 补 GOOSE 发布字段
- 6 测试用例;iprotocol_tests 104 全过,全量 15/15 无回归
- encode:OP_READ/OP_WRITE(遥调)/OP_CONTROL(遥控)MmsRequest,request_id 自增关联
- 响应处理:request_id 匹配 pending,MMS_OK 读值→对象(scale/offset),失败→Q_STALE
- 报告推送:MmsReportEvent.fields 按 name 映射点位
- tick:周期轮询读(poll_interval_ms,惰性初始化,首次立即)
- 10 测试用例;iprotocol_tests 114 全过,全量 15/15 无回归
- handle_query:外部访问 READ/WRITE/CONTROL 同步应答(5s 时限)
  - READ:read_cb 取工程值→嵌套 MmsValue 字节;未映射/未找到→OBJECT_NOT_FOUND
  - WRITE/CONTROL:解析 value→write_cb 回写;解析失败→INVALID_ARGUMENT
- push_update:业务主动推送 DATA_UPDATE(触发值变化/报告)
- make_config:model_so_path 优先 icd_path;types 补 local_port/max_clients
- 测试:FakeEngine 隧道回环,8 用例(读应答/写回调/未映射/未找到/push_update)
- iprotocol_tests 122 全过,全量 15/15 无回归
- schemas/iec61850_config.fbs:Iec61850Config/Instance/Point + 4 枚举,
  flatc 25.9.23 生成头
- config 工具:iec61850_instances/points 两个 sheet 导入(复用动态列导入),
  iec61850_rules.json(instances + points child_arrays,{link_id} 过滤)
- Iec61850ConfigLoader:mmap + Verifier + to_instance_configs 转换
- 测试:loader 4 用例 + config_tests 规则引擎生成用例
- 端到端验证:SQLite→generate→bin 反编译枚举/点映射全部正确
- iprotocol 126 + config 6 全过,关键套件 7/7
- scada_mod 接入:start_link 识别 4 个 iec61850 协议(不走 comm,直连
  iec_bus 隧道),Iec61850Session 适配器(对象出口→Bus / 控制下发 /
  心跳 poll),SessionRegistry bridge 按 handle 分派,显式注册协议
- GOOSE 控制命令闭环(真实 iec_bus 验证):hmi_sender → ctrl_router
  DIRECT → goose_pub(一帧完整数据集+快照)→ 组播 → goose_sub(匿名
  entry 按数据集顺序回退匹配)→ RTDB 回显,两点双向控制 OK
- 纯品质消息:ProtocolObject.quality_only + QualityUpdate fbs 消息 +
  RtdbEngine::process_quality(只透传品质不覆盖值)
- RTDB SHM 修复:group() 按 group_id 查找(原用 id 当数组索引越界);
  槽位数 = max(point_index)+1(原按点数,index 不连续时写入 miss);
  析构不再 remove SHM(防多进程持有被误删);magic 匹配但布局不一致时自愈
- rtdbview 修复:attach 用槽位数、读值用 point_index_of 映射(原用数组
  序号当 point_index)
- 工具:demo_iec61850_goose.sh(GOOSE 双链路演示)、gen_goose_ctrl_router、
  iec_bus_sim(fake iec_bus)、config/watchdog_iec61850_goose.yml
- 测试:test_iec61850_goose_suspects.cpp(S1-S6 怀疑用例先红后绿)、
  goose_pub 完整数据集、rtdb 95 测试全过
logic_engine 的 LinkRuleEntry 原持有 Expression 成员(不可拷贝导致编译受限),
改为 compiled_pool_ 持有 unique_ptr<Expression> + 指针引用,逻辑引擎可用
/可扩展见 test_logic_engine.cpp 新增用例。
- libphotolink_rtdb_capi.so:19 个 rtdb_capi_* C 函数(读/批量读/写/订阅/组信息),
  group 参数统一工程 group_id,总线失败自动降级只读;附带 POD 结构契约定稿
- go/:package rtdb 绑定(Attach/Read*/Write*/Subscribe*/BatchRead)+ 示例程序
- 端到端验证:读写四遥、订阅实时事件、批量读全部通过
- 文档:doc/rtdb_capi_usage.md(对外接入指南:数据模型/部署/REST 示例/FAQ)
- Go 后端 config_server_go:泛型 CRUD + 校验/级联删除/batch + Excel 导入导出 +
  .bin 生成 + 插件元数据/协议 schema API + lua 脚本 CRUD(含 /lua/run、/lua/log)
- 前端 web/(Vue3 + Element Plus):12+ 页面 + 脚本管理页 + 协议专属配置界面
- config 工具:excel_importer 扩展协议/lua sheet、generator json 子命令、
  schema 定位宏、protocols/*.schema.json 驱动零后端新增协议
- gen_template.py:补齐 web_config/lua 等 sheet
- 配置链路:lua_engine_config.fbs/sql/rules 四件套(lua_scripts/lua_triggers
  第 13/14 表,只存路径+触发+沙箱)+ LuaConfigLoader(mmap+Verifier)
- 宿主 LuaEngine:rtdb 读写/订阅(on_change)/timer/事件挂载/热加载(mtime 自重启)、
  rtdb.control 控制下发 + on_control_response + 限速、沙箱(禁 io/os/loadlib +
  指令上限 + 连续崩溃停用)、--watchdog-socket 心跳编排、--ctl-port/--log-file
- 运行时:init 支持官方 Lua 5.4(conan lua/5.4.6);watchdog.yml.in 含 lua_engine
  编排条目(默认注释教程式启用)
- 测试 lua_engine_tests 28/28;端到端:模拟写库/事件驱动/死循环杀停/watchDog 守护
- _PL_BIN 增加 lua_engine(14 程序);_PL_LIB 增加 libphotolink_rtdb_capi.so
- install 公共头 include/rtdb_capi/rtdb_capi.h
- README 同步 bin/lib 14+6 说明与 lua 编排指引
- progress/todo/modules/screens 全程同步(rtdb_capi/lua_engine/打包 里程碑)
- 新增 doc/lua_engine_design.md(L1~L7 设计 + 已确认决策)
- 新增 doc/config/rtdb_web_integration.md(实时数据融入 Web 方案)
- AGENTS.md:ctest 约定 + 配置 Web 命令补全
carrot merged commit 6a689360f1 into main 2026-08-19 06:48:37 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: carrot/PhotoLink#2
No description provided.