63 lines
1.7 KiB
Markdown
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 |
|