RTU/mimo/plan/channel_cfg统一配置.md

63 lines
1.7 KiB
Markdown

# 通道配置统一化 — channel_cfg.cpp
> 日期: 2026-06-30 | 状态: 执行中
---
## 设计
### 数据流
```
channel_cfg.cpp (system/RTU/src/)
├── XML 解析 → g_ch_cfg_list / g_ch_fwd_list
├── 注册每个 Channel 的 dc interface 信号
└── 提供查询 API
libcom_decode (decode_channel_mgr.cpp)
└── 通过 g_ch_cfg_list 创建通道, state_cb 更新 interface
libself_ptl (self_ptl.cpp)
└── 查找 app="self_ptl" 的 Forward → 获取通道 → 绑定 interface
```
### XML 新格式
```xml
<Channel mode="tcp_server" idx="0" saddr="tcp_s0" desc="..." local_ip="..." local_port="..."/>
<Channel mode="uart" idx="0" saddr="uart0" desc="..." device="..." .../>
<Forward from_saddr="tcp_s0" to_saddr="uart0" app="self_ptl"/>
```
### 数据结构 (mySystem.h)
```cpp
struct stru_ch_cfg {
std::string key, saddr, desc;
CommType type;
void *p_para; // → tcp_params[i] / uart_params[i]
int id, socket_fd;
};
extern std::vector<stru_ch_cfg> g_ch_cfg_list;
struct stru_ch_fwd_cfg {
std::string from_saddr, to_saddr, app;
};
extern std::vector<stru_ch_fwd_cfg> g_ch_fwd_list;
int channel_cfg_load(const char *proc_dir);
stru_ch_cfg *channel_find_by_saddr(const char *saddr);
stru_ch_cfg *channel_find_by_id(int id);
```
### 修改清单
| 文件 | 改动 |
|------|------|
| mySystem.h | +stru_ch_cfg, +stru_ch_fwd_cfg, +extern globals, +channel_* API |
| system/RTU/src/channel_cfg.cpp | ★ 新建: XML解析 + dc信号注册 |
| com_channel_def.h | 简化, 删除向量定义 |
| decode_channel_mgr.cpp | 用 channel_cfg_* 替代本地解析 |
| self_ptl.cpp | 用 channel_find_by_saddr 替代硬编码信号名 |
| channel_config*.xml | Channel+saddr, Forward+from_saddr+to_saddr+app |