4a4ad6bc5f
现状口径:/keil-build 与 /serial-boot-test 是 DSH 会话的技能调用名, 不是 shell 命令;「名 + 命令行参数」的命令形态改为可执行体 run_boot_test.py 的真实调用。 - AGENTS.md:别名说明重写为「技能调用名不是 shell 命令」,两条目改 「编译(/keil-build)」「串口回归(/serial-boot-test)」 - keil-build / serial-boot-test 两 skill 调用名与示例同步;task-worktree 方案文档去掉 @build/@test 惯例从句;@task 保留(不在点名范围) - 123 文件现状陈述全改;台架捕获、变更记录/时间线、rename 映射输入 等 41 行历史证据保留旧名 - gen_memory_svg.py 6 处措辞随改,3 张 SVG 产物同批重跑 - 顺手补并行方案同行漏网计数 51→52 钩子 验证:提交期快钩子对 123 文件实跑全 Passed;check_doc_links --all rc=0(3038 处、无法判定 0);check_mermaid --all rc=0;YAML 解析 52 钩子不变;skill-size rc=0;py_compile 全过;字节卫生零漂移。
69 lines
3.7 KiB
C
69 lines
3.7 KiB
C
/*
|
||
* 模块名称:IEC 60870-5-104 被控站服务(对外接口)
|
||
* 模块功能:声明 iec104Task 任务体与监听端口;协议实现在 App/protocol/iec104/,
|
||
* 本接口仅供 Src/freertos.c 创建任务使用。
|
||
* 创建日期:2026-10-12(B4)
|
||
*/
|
||
#ifndef IEC104_SERV_H
|
||
#define IEC104_SERV_H
|
||
|
||
#include <stdint.h> /* uint32_t(观测计数声明):头文件自含——2026-10-27 /keil-build 实测
|
||
* 本头此前全靠包含者先带 stdint,feed 换 include 即断链报 #20 */
|
||
/* 监听端口的宏出口已删除(道G task-9 收口 task-8 交接痕):运行期真源 =
|
||
* [comm] 段 getter(App/protocol/iec104/iec104_comm.h 的 iec104_comm_port(),
|
||
* 工厂默认 IEC104_COMM_DEF_PORT = 2404 = DL/T 634.5104 标准端口)。 */
|
||
|
||
/*
|
||
* 函数功能:iec104Task 任务体(在 Src/freertos.c USER CODE 区 osThreadNew 创建)
|
||
* 入口参数:argument - 未用
|
||
* 返回值:无(任务不返回)
|
||
*/
|
||
void iec104_serv_task(void *argument);
|
||
|
||
/*
|
||
* 104 只读观测计数(道G task-12):四个数都是**上电以来**、跨重连不清零,语义各自
|
||
* 独立、不得互相换算:
|
||
* conn_up = 主站接入次数(accept 成功并建立协议层链路)
|
||
* apdu_tx = 成功发出的 APDU 帧数(短写算 tx_fail,不算这里)
|
||
* tx_fail = 发送短写/失败次数(含拆链前那几次连败)
|
||
* rx_bytes = 收到的**字节**数(不是帧数:帧边界在 link 层重组,serv 看不见)
|
||
* ⚠ 与 App/task/iec104_serv.c 里 s_liveness_ctr / s_send_fail_run / s_conn_dead 三枚
|
||
* **控制量**无关:那三枚会被复位、只有 8 位,为"要不要拆链"服务,拿来当统计必错。
|
||
* 到顶饱和在 0xFFFFFFF0,不回绕(回绕成个位数会被读成"刚上电")。
|
||
* 页面这一栏要写「本次开机以来」,与运行时长同一类,别让人读成终身值。
|
||
*/
|
||
typedef struct {
|
||
uint32_t conn_up;
|
||
uint32_t apdu_tx;
|
||
uint32_t tx_fail;
|
||
uint32_t rx_bytes;
|
||
} iec104_serv_stats_t;
|
||
|
||
/*
|
||
* 函数功能:读 104 观测计数(纯拷字段)
|
||
* 入口参数:p_out - 输出缓冲;NULL 时无害返回 iec104_serv_stats_t *
|
||
* 返 回 值:无 void
|
||
* 限定条件:**任意上下文可读**——不取锁、不读时刻、不碰 socket、不阻塞(照
|
||
* adc_cal_get_stats() / boot_stats_get() 的形态:观测口一旦去抢总线或等锁,
|
||
* 观测就成了故障的一部分)
|
||
* 函数说明:写者 = iec104Task,读者 = uiTask/喂数据侧;u32 单字读写原子,跨字段
|
||
* **不保证同一瞬间**——四枚之间没有"合起来才成立"的判据,混窗对显示无害。
|
||
* 本函数无任何清零能力(能清零的统计口不是统计口)。
|
||
*/
|
||
void iec104_serv_get_stats(iec104_serv_stats_t *p_out);
|
||
|
||
/*
|
||
* 函数功能:读 104 链路是否处于 RUN 态(STARTDT 已确认 = 主站在线在轮询)
|
||
* 返 回 值:1 = RUN;0 = 其它(IDLE/OPEN/STOPPED 或未创建任务) uint8_t
|
||
* 限定条件:**任意上下文可读**——单枚举字读,不取锁、不碰 socket、不阻塞
|
||
* (与 iec104_serv_get_stats 同一形态与同一读者群)。
|
||
* 函数说明:写者 = iec104Task(link 状态机推进),读者按需采样;单字读写在
|
||
* Cortex-M4 上原子,最多读到"晚一拍"的状态,无撕裂风险。
|
||
* 消费点 = 屏板状态灯 ID 3(App/algo/sb_led_map.h 的通信灯)。
|
||
* ⚠ 别拿它换算 conn_up:RUN 是电平,conn_up 是累计边沿,语义不可互换
|
||
* (同文件统计注释里的"不得互相换算"纪律)。
|
||
*/
|
||
uint8_t iec104_serv_link_run(void);
|
||
|
||
#endif /* IEC104_SERV_H */
|