EMS 知识库
首页 / knowledge/代码解析/midware/inverter/inovance

inovance_comm_can.h

源文件路径:midware/inverter/inovance/inovance_comm_can.h 所属模块:midware/inverter/inovance(汇川 Inovance 逆变器通信协议) 代码行数:23

1. 文件职责

本文件是汇川逆变器 CAN 通道 通信模块的最小对外声明头文件,只承担三件事:声明 CAN 通讯丢失判据宏、声明调试开关宏、导出三个被外部调用的函数原型。

它本身不定义任何 CAN 帧 ID、数据结构或全局变量——0x181/0x192 等帧 ID 与通信总表 g_t_inovance_comm_info 全部在同目录的 inovance_comm_usart.h 中定义,因此使用本模块时必须同时包含两个头文件。

在数据流中它只是一个"编译期接口契约":inovance_comm_usart.c 通过包含它来获得 CAN 侧的丢失判据宏与初始化函数原型(见 inovance_comm_usart.c:2307、412),inverter.c 通过 midware/inverter/inverter.h 的包含链获得三个函数原型并调用。

被谁驱动:文件本身无运行逻辑,由包含它的 .c 文件在编译期使用。

2. 关键数据结构与宏

名称类型说明
__INOVANCE_COMM_CAN__H__宏(头文件保护)防止重复包含(第 9-10 行)
INOVANCE_INV_DEBUG_CAN宏汇川 CAN 通道调试打印总开关,值 (0)(第 16 行)。被 inovance_comm_can.c 中约 20 处 #if(INOVANCE_INV_DEBUG_CAN) 引用,置 1 时打开全部收发帧的 printf
INOVANCE_EMS_INV_CAN_COMM_LOST_TIME宏CAN 通讯丢失判据,值 (15 * 1000) ms(第 17 行)。被 inovance_comm_can.c:780 用作判据:距上次收帧超过 15 s 即判为丢失

本文件未定义任何结构体、枚举、联合体或位域;CAN_MSG_TYPEDEF_T、INOVANCE_TABLE_T 等均来自其他头文件。

3. 函数清单

本文件不含任何函数定义,只含 3 条函数声明:

函数名作用域说明
inovance_inverter_data_check_can (19)全局(声明)检测逆变器参数变化并按需置位 CAN 下发标志;实现在 inovance_comm_can.c:510
inovance_inverter_comm_can (20)全局(声明)汇川逆变器 CAN 通讯主循环(握手、下发、收帧解析、丢失判定);实现在 inovance_comm_can.c:593
inovance_comm_init_can (21)全局(声明)初始化 CAN1 预分频并置位全部首次下发标志;实现在 inovance_comm_can.c:487

4. 核心逻辑解析

本文件为纯声明文件,无状态机与算法。以下仅说明它所约束的编译期契约。

4.1 包含关系

第 13 行 #include "includes.h" 引入工程公共头(ucos_ii.h、gd32f4xx.h、chip.h 等),从而获得 u8/u16 等基本类型定义。本文件不包含 inovance_comm_usart.h,所以单独包含它只能拿到 3 个函数原型和 2 个宏,拿不到帧 ID;inovance_comm_can.c 的做法是第 1、2 行同时包含两个头文件。

4.2 两个宏的实际作用点

4.3 与 uCOS-II 的配合

本文件声明的三个函数均为同步阻塞式轮询函数,不含任何任务创建、信号量或消息邮箱参数;其内部使用的 OSTimeGet() / OSTimeDlyHMSM() 时序由调用者所在的 task_inverter_can() 决定(inverter.c:1199,事件标志 + 30 ms 延时循环)。

5. 对外接口

5.1 本文件导出

名称类型供谁使用
INOVANCE_INV_DEBUG_CAN宏inovance_comm_can.c(调试开关)
INOVANCE_EMS_INV_CAN_COMM_LOST_TIME宏inovance_comm_can.c:780(丢失判据)
inovance_inverter_data_check_can函数声明inverter.c:1265
inovance_inverter_comm_can函数声明inverter.c:1264
inovance_comm_init_can函数声明inverter.c:103、inovance_comm_usart.c:413、inovance_comm_usart.c:2307

本文件不导出全局变量。

5.2 本文件依赖的外部符号

来源用途
includes.hu8/u16/u32 等基础类型;#if(INOVANCE_INV_DEBUG_CAN) 中使用的 printf 声明

6. 依赖关系

依赖

被依赖

7. 备注与风险点

  1. 文件头注释错误(版本遗留):第 2 行 @file :inovance_comm.h,与实际文件名 inovance_comm_can.h 不符,明显是从 inovance_comm_usart.h 复制后未修改;@date 仍为 2017/06/28,@brief 为空。
  2. 宏定义分散:本头只放了一个丢失判据,而 17 个 CAN 帧 ID 宏全部集中定义在 inovance_comm_usart.h:125-141,模块边界不清。修改 CAN 帧 ID 时本文件看不出关联,容易漏改。
  3. 无 extern "C" 与 C++ 兼容处理:与工程其他头文件一致,仅在 C 环境下编译。
  4. INOVANCE_EMS_INV_CAN_COMM_LOST_TIME 使用 15 s 单一阈值:既用于握手阶段的判定也用于常规阶段的判定。若逆变器上电初始化较慢(超过 15 s 未发 0x201),会触发一次"丢失 → inovance_comm_init_can() → 重新握手"的往复,虽不会死锁但会延长上线时间。
  5. 其余暂无。