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 两个宏的实际作用点
INOVANCE_INV_DEBUG_CAN:贯穿inovance_comm_can.c的全部调试输出(如第 79、110、212、221、308、344、385、433、467 行),默认 0,正式固件中这些 printf 全部被预处理剔除,无代码体积与串口占用。同目录的inovance_comm_usart.h另有一个独立的INOVANCE_INV_DEBUG(第 17 行)控制 SCI 通道打印,两者互不相关。INOVANCE_EMS_INV_CAN_COMM_LOST_TIME:值为 15000 ms,与 SCI 通道的INOVANCE_EMS_INV_COMM_LOST_TIME(30000 ms,inovance_comm_usart.h:26)刻意不同——CAN 是 50 ms 级的实时通道,判丢时间取更短;SCI 是 100 ms 级参数通道,取 30 s。
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.h | u8/u16/u32 等基础类型;#if(INOVANCE_INV_DEBUG_CAN) 中使用的 printf 声明 |
6. 依赖关系
依赖
includes.h(工程公共头,提供基础类型与 uCOS-II/芯片头)- 隐式依赖同目录
inovance_comm_usart.h:本文件声明的函数在实现中大量使用该头定义的帧 ID 宏、g_t_inovance_comm_info与INOVANCE_TYPE_E,因此任何想真正调用这三个函数的模块都应同时包含二者(现有做法见inovance_comm_can.c:1-2)
被依赖
midware/inverter/inovance/inovance_comm_can.c(实现本文件声明的三个函数,并使用两个宏)midware/inverter/inovance/inovance_comm_usart.c(在inovance_upgrade_init()与 DSP 软重启流程中调用inovance_comm_init_can())midware/inverter/inverter.c(通过包含链调用三个函数)
7. 备注与风险点
- 文件头注释错误(版本遗留):第 2 行
@file :inovance_comm.h,与实际文件名inovance_comm_can.h不符,明显是从inovance_comm_usart.h复制后未修改;@date仍为2017/06/28,@brief为空。 - 宏定义分散:本头只放了一个丢失判据,而 17 个 CAN 帧 ID 宏全部集中定义在
inovance_comm_usart.h:125-141,模块边界不清。修改 CAN 帧 ID 时本文件看不出关联,容易漏改。 - 无
extern "C"与 C++ 兼容处理:与工程其他头文件一致,仅在 C 环境下编译。 INOVANCE_EMS_INV_CAN_COMM_LOST_TIME使用 15 s 单一阈值:既用于握手阶段的判定也用于常规阶段的判定。若逆变器上电初始化较慢(超过 15 s 未发 0x201),会触发一次"丢失 →inovance_comm_init_can()→ 重新握手"的往复,虽不会死锁但会延长上线时间。- 其余暂无。