Commit Graph

9 Commits

Author SHA1 Message Date
ypc 4edabf21d1 feat: PLC遥测运算完善 + 调试页五区布局 + 比较元件 + MX输出注册
- plc.cpp: 新增MX_CMP比较元件(A>B出1), 减法改为有符号a-b, MX输出F32注册
- plc_config.js: 合并运算符按钮, MX pin A/B标注, 信号入/出按钮, 运算符面板
- plc_debug.js: 三列堆叠布局(左:遥信入·按钮/遥测入·设值, 中:信号表, 右:遥信出·LED/遥测出·展示)
- ws_method.cpp: dc_save_out_signals_xml持久化
- style.css: 三列grid + block堆叠布局
2026-07-15 18:04:50 +08:00
ypc 55476a0028 chore: 恢复 PLC 逻辑配置文件 (从 .bak 恢复)
前端解析 RS/SR 触发器的 input 链接时产生重复链路,
保存后 Input#15 出现两遍、S 属性重复。已从备份恢复。
2026-07-14 18:23:41 +08:00
ypc e27b01943c feat(frontend): 信号管理页面重构 + 增量刷新 + 删除即时生效
核心变更:
- signal-store: 移除 localStorage 持久化, WS 断连清空;
  update() 新增增量 DOM 刷新 (仅更新变化的单元格);
  remove() 直接移除 DOM 行 (动画 fade out)
- router: 新增 reload() 强制重绘当前页
- ui: renderSignalPage 重写为统一列格式 #|saddr|desc|type|val|[ctrl]|操作;
  事件委托替代 inline onclick; 内联输入框替代弹窗设值
- datacenter: 改用后端 dc_data JSON 替代文本解析 (修复 desc 含空格错位);
  移除无用的 ctrl 列
- plc_config: 完整重写 — 查看/编辑双模式, 左右分栏布局,
  信号面板+逻辑图查看(当前/备份)+编辑器基础选择
- plc_debug: 切换按钮后同步更新 SignalStore (修复 LED 延迟刷新)
- param: 内联输入框 + 序号列

修复:
- 删除信号后 DOM 行立即消失 (之前需切页才能看到)
- WS 推送到达时增量刷新, 不影响正在编辑的输入框
- 批量删除时每项都调用 SignalStore.remove
2026-07-14 18:22:17 +08:00
ypc ccb26007e2 refactor: 移除 in 信号类型 (全栈 — datacenter/libplc/webserver/前端/测试)
in 信号的核心功能 (获取 out 指针 + 变更回调) 已被
dc_signal_out_link_with_callback 完全覆盖, 其独立的 saddr 命名空间
没有实际业务价值.

后端:
- datacenter API: 删除 dc_signal_in/dc_signal_in_with_callback/dc_get_in_signal_info
- dc_signal_in.cpp 已删除, g_dc_in/dc_core_find_in 移除
- libplc: 2 处 dc_signal_in → dc_signal_out_link_with_callback
- webserver: 移除 WS_SIG_IN 枚举值, ws_sig_add_in 函数,
  g_ws_sig_names / dc_data 中的 in 分支

前端:
- router.js / signals.js / datacenter.js / ui.js / i18n.js / dashboard.js
  / signal-store.js / index.html: 移除所有 in 导航/页面/Tab/翻译
- 测试: test_datacenter.cpp 移除 test_in_signal
2026-07-14 18:21:35 +08:00
ypc 28e26f8b67 config: 通道配置 + 模块启停配置
- channel_cfg.json: 新增 tcp_ftu 网口通道 (127.0.0.1:54321 TCP 客户端)
- app_config.json: 启用 plc 模块
2026-07-14 11:02:16 +08:00
ypc 06fc257696 webserver: 前端命令面板 + 后端 PLC Config 支持
后端:
- ws_method.cpp cmd 处理增强:datacenter 命令自动调用 dc_save_out_signals_xml() 导出 XML
- ws_method.cpp cmd 处理增强:自动构建 dc_data JSON 返回信号元数据
- web_server.cpp: EV_STOP 优雅退出支持

前端:
- terminal.js: 命令面板模式,按钮显示命令名+描述,按模块分组
- terminal.js: 点击填充到输入框,可继续输入子命令参数
- index.html: 对接新 terminal 函数(renderCmdPanels/termOnBinary)
- style.css: 命令面板按钮、输入框样式
2026-07-14 11:01:33 +08:00
ypc 8cf00ad14d feat(com_router): bind_app 协议绑定路由 — 端口→规约直投
## 设计
通道配置新增 bind_app 字段:
- bind_app="" (空)  → 现有帧内容分路 (FTU串口)
- bind_app="iec"    → 整帧直投 libiec (TCP :2404 主站)
- bind_app="self_ptl" → 整帧直投 self_ptl (备用)

新增 com_router_register_dispatch(bind_app, cb):
- 协议模块在 app_wiring() 注册回调
- recv_cb 发现通道 bind_app 匹配, 直接调用 dispatch
- 不需要帧解析 — 协议模块自行解码

## 路由优先级
1. forward_rule → 维护透传
2. bind_app 非空 → dispatch 投递
3. bind_app 空 → 帧内容分路 (ICP67 dev=0/IEC/ICP67 dev≠0)

## 配置示例
channel_cfg.json: tcp_master(:2404) bind_app="iec"
  → 外部主站连接 :2404 → com_router → libiec 回调
2026-07-10 10:40:24 +08:00
ypc 920524945d feat: ICP67自定义协议 + 自协议应用层 + 通信路由中枢
=== libicp67 (纯C, 4文件 1800+行) ===
- 帧定界/CRC/构造 (icp67_frame.c)
- 16种TI解码 + 文件/ZIP子命令 (icp67_decode.c)
- 13个Sender + 重传管理 + 定时器 (icp67_core.c)
- 可配置超时/重试参数 + 零拷贝环形缓冲搜索
- 测试 26项全通过

=== libself_ptl (C++, 3文件 1200+行) ===
- XML点表解析 (St/Mx/Co/Dd/Ao/Param 2988行)
- 17个回调 → 数据中心 (SOE/故障/扰动/自检/AO)
- MQ_COM_TO_SELF_PTL / MQ_SELF_PTL_TO_COM 解耦

=== libcom_router (C++, 2文件 800+行) ===
- 通道创建 + JSON配置 + 转发端口TCP server
- 三级路由: 端口转发 → 回复归属 → self_ptl
- MQ桥接: 按原工程 stru_msg_head + EV_COM_RX_SELF_PTL

=== 系统框架 ===
- app_msg_queue.h X-Macro MQ定义
- 跨模块事件 + stru_msg_head 消息封装
- app_modules.h 注册 SELF_PTL / COM_ROUTER
2026-07-09 17:51:57 +08:00
ypc 16b697f9c4 refactor(RTU): 配置文件独立化 + app_sys_stop() + 代码风格统一
- config/SYSTEM/app_config.json: 配置文件从源码树迁出到独立 config/ 目录
- app_sys.cpp: 配置路径优先级 WORK_PATH 环境变量 > 可执行文件目录
- app_sys.cpp: 新增 app_sys_stop() 完整生命周期(EV_STOP + pthread_join)
- app_sys.cpp: 代码风格统一(空格/花括号/allman)
- main.c: 添加 SIGPIPE 处理 + app_sys_stop() 调用
- mySystem.h: 添加 EV_STOP 宏 + app_sys_stop() 声明
- RTU/makefile: 修复 .PHONY 重复定义 warning
2026-07-08 17:35:26 +08:00