alphaess_comm_usart.h
源文件路径:
midware/inverter/alphaess/alphaess_comm_usart.h所属模块:midware/inverter/alphaess(逆变器厂商协议:AlphaESS 三相/单相储能逆变器 Modbus-RTU 串口协议) 代码行数:727
1. 文件职责
本头文件定义 AlphaESS 逆变器串口(SCI/UART2,Modbus-RTU)通信协议的全部对外契约:寄存器地址常量、功能码、收发缓冲区尺寸、超时值,以及承载"EMS → DSP"下发参数与"DSP → EMS"回读数据的巨型状态结构体 ALPHAESS_TABLE_T。它不包含任何可执行逻辑,只提供类型、宏与函数声明,被 alphaess_comm_usart.c(唯一实现者)严格依赖,也被 alphaess_comm_can.c、alphaess_upgrade.c、midware/afci/*、midware/interface/modbus/*、midware/inverter/inverter.c 等文件通过 g_t_alphaess_comm_info 共享状态。
在数据流中本文件处于"协议字典"的位置:上层能量调度(logic/)与配置(data/)的结果最终要通过这里定义的寄存器地址写到 DSP;DSP 的遥测/故障/告警位域也由这里定义的结构体承接,再被 inverter.c 分发给 HMI、Modbus 从站和云端。
2. 关键数据结构与宏
| 名称 | 类型 | 说明 |
|---|---|---|
DEBUG_ALPHAESS_INV | 宏 | 调试打印总开关,置 1 时开启大量 printf(行 17,当前为 0) |
ALPHAESS_MAX_REGISTER_NUM | 宏 | 单次多寄存器写最大寄存器数,100(行 19),用于 ems_send_ctrl_data_to_inv_alphaess 的入参合法性检查 |
ALPHAESS_INV_RECV_BUFFER_SIZE | 宏 | 接收缓冲区 s_u8_recv_buf 长度,256 字节(行 20) |
ALPHAESS_DATA_RCV_TIMEOUT | 宏 | 收发超时基准,500(行 21,uCOS-II tick,即 500 ms) |
ALPHAESS_SLAVR_ADDRESS | 宏 | 逆变器 Modbus 从站地址,0x03(行 23) |
ALPHAESS_FUNC_READ_HOLDING_REGISTER | 宏 | Modbus 功能码 0x03,读保持寄存器(行 24) |
ALPHAESS_FUNC_READ_INPUT_REGISTER | 宏 | Modbus 功能码 0x04,读输入寄存器(行 25) |
ALPHAESS_FUNC_WRITE_SIGNAL_HOLDING_REGISTER | 宏 | Modbus 功能码 0x06,写单个保持寄存器(行 26) |
ALPHAESS_FUNC_WRITE_MULTIPLE_HOLDING_REGISTER | 宏 | Modbus 功能码 0x10,写多个保持寄存器(行 27) |
ALPHAESS_SEND_ERROR_COUNT_MAX | 宏 | 单个写操作连续失败上限,3 次(行 29);达到后部分函数放弃重试并"当作成功" |
ALPHAESS_ADDR_REG_QUERY_INV_DEVICE_INFO / _NUM_ | 宏 | 设备信息区:起始 30000,长度 73 寄存器(行 31-32) |
ALPHAESS_ADDR_REG_QUERY_INV_RUNNING_DATA / _NUM_ | 宏 | 运行数据区:起始 30200,长度 115 寄存器(行 34-35) |
ALPHAESS_ADDR_REG_QUERY_INV_EXTAND1_RUNNING_DATA / _NUM_ | 宏 | 扩展运行数据区:起始 30331,长度 16 寄存器(行 37-38) |
ALPHAESS_ADDR_REG_QUERY_INV_RUNNING_DATA_PARALLEL / _NUM_ | 宏 | 并机运行数据:起始 32000,长度 16(行 40-41,本文件未使用,供 CAN 侧/预留) |
ALPHAESS_ADDR_REG_SET_INV_SN_CMD / _NUM_ | 宏 | 写 SN:40102,16 寄存器(行 43-44) |
ALPHAESS_ADDR_REG_CLEAR_ENERGY_CMD / _NUM_ | 宏 | 清除发电量:40102…(行 46-47,5 寄存器) |
ALPHAESS_ADDR_REG_SET_INV_START_STOP / _NUM_ | 宏 | 开关机:40126,1 寄存器(行 49-50) |
ALPHAESS_ADDR_REG_SET_INV_ON_OFF / _NUM_ | 宏 | 逆变器 ON/OFF 指令:40127(行 52-53) |
ALPHAESS_ADDR_REG_EMS_RESTART_DSP_CMD / _NUM_ | 宏 | 复位 DSP:40128(行 55-56) |
ALPHAESS_ADDR_REG_INV_MODE_CMD / _NUM_ | 宏 | 运行模式:40130(行 58-59) |
ALPHAESS_ADDR_REG_SET_PV_CAPACITY / _NUM_ | 宏 | PV 装机容量:40134(行 61-62) |
ALPHAESS_ADDR_REG_SET_MAX_FEEDIN_PERCENT / _NUM_ | 宏 | 最大馈网功率比例:40135(行 64-65) |
ALPHAESS_ADDR_REG_CLEAR_INV_WARNING / _NUM_ | 宏 | 清除告警:40147(行 67-68) |
ALPHAESS_ADDR_REG_CLEAR_INV_FAULT / _NUM_ | 宏 | 清除故障:40148(行 70-71,本文件未引用) |
ALPHAESS_ADDR_REG_GENERATOR_FLAG / _NUM_ | 宏 | 油机(Generator)使能:40149(行 73-74) |
ALPHAESS_ADDR_REG_GRID_FORMING_FLAG / _NUM_ | 宏 | Grid-Forming 使能:40150(行 76-77) |
ALPHAESS_ADDR_REG_SET_INV_PARALLEL / _NUM_ | 宏 | 并机设置:40151(行 79-80) |
ALPHAESS_ADDR_REG_SET_BACKUPBOX_ENABLE / _NUM_ | 宏 | BackupBox(BB)使能:40152(行 82-83) |
ALPHAESS_ADDR_REG_SET_MPPT_ENABLE / _NUM_ | 宏 | MPPT 扫描使能:40153(行 85-86) |
ALPHAESS_ADDR_REG_SET_PHASE_NEGATION / _NUM_ | 宏 | 相序自适应:40156(行 88-89) |
ALPHAESS_ADDR_REG_SET_PV_CHARGER_MODE / _NUM_ | 宏 | PV-Charger 模式:40157(行 91-92) |
ALPHAESS_ADDR_REG_SET_PE_LOSS_CHECK_FLAG / _NUM_ | 宏 | PE 丢失检测:40159(行 94-95) |
ALPHAESS_ADDR_REG_SET_INV_BYPASS_MODE / _NUM_ | 宏 | 逆变器 Bypass 模式:40161(行 97-98) |
ALPHAESS_ADDR_REG_SET_AFCI_FAULT_ENABLE / _NUM_ | 宏 | AFCI 报错使能位:40166(行 100-101) |
ALPHAESS_ADDR_REG_SET_FUNCTION_ENABLE / _NUM_ | 宏 | 功能使能块:41000,26 寄存器(行 103-104),一次写 52 字节 |
ALPHAESS_ADDR_REG_SET_AFCI_ENABLE / _NUM_ | 宏 | AFCI 使能位:41023(行 106-107) |
ALPHAESS_ADDR_REG_SET_HEAT_EN / _NUM_ | 宏 | 电池加热指令:41028(行 109-110) |
ALPHAESS_ADDR_REG_SET_ITALY_ANTI_BACKFLOW_EN / _NUM_ | 宏 | 意大利防逆流使能:41031(行 112-113) |
ALPHAESS_ADDR_REG_SET_BATTERY_TYPE / _NUM_ | 宏 | 电池类型:41106(行 115-116) |
ALPHAESS_ADDR_REG_SET_DISCHARGE_CUT_VOLT / _NUM_ | 宏 | 放电截止电压:41108(行 118-119) |
ALPHAESS_ADDR_REG_SET_CHARGE_CUT_VOLT / _NUM_ | 宏 | 充电截止电压:41111(行 121-122) |
ALPHAESS_ADDR_REG_SET_HEAT_CUT_VOLT / _NUM_ | 宏 | 电池加热充放电电压:41134,2 寄存器(行 124-125) |
ALPHAESS_ADDR_REG_SET_BAT_ADAPT_EN / _NUM_ | 宏 | 电池自适应使能:41136(行 127-128) |
ALPHAESS_ADDR_REG_SET_BAT_PROTECT_PARA / _NUM_ | 宏 | 电池自适应保护参数:41137,3 寄存器(行 130-131) |
ALPHAESS_ADDR_REG_SET_HEAT_RELAY_STA / _NUM_ | 宏 | 电池加热继电器状态:41140(行 133-134) |
ALPHAESS_ADDR_REG_SET_2_CHG_EN / _NUM_ | 宏 | 两倍电池充电标志:41141(行 136-137) |
ALPHAESS_ADDR_REG_QUERY_INV_SAFETY / _NUM_ | 宏 | 安规国家码:42000(行 140-141) |
ALPHAESS_ADDR_REG_QUERY_INV_SELF_TEST_DATA / _NUM_ | 宏 | 安规参数块:42001,47 寄存器(行 143-144) |
ALPHAESS_NUM_SET_INV_SELF_TEST_0_DATA | 宏 | 首次并网保护值长度,4 寄存器(行 145) |
ALPHAESS_ADDR_REG_SET_INV_SELF_TEST_1_DATA / _NUM_ | 宏 | 过/欠压保护参数:42005,16 寄存器(行 147-148) |
ALPHAESS_ADDR_REG_FREQ_PROTECT / _NUM_ | 宏 | 过/欠频保护参数:42021,12 寄存器(行 150-151) |
ALPHAESS_ADDR_REG_SET_INV_SELF_TEST_2_DATA / _NUM_ | 宏 | 其他安规参数:42033,15 寄存器(行 153-154) |
ALPHAESS_ADDR_REG_SET_INV_FIRST_ONGRID_TIME / _NUM_ | 宏 | 首次并网时间:42037,2 寄存器(行 156-157,本文件未直接引用) |
ALPHAESS_ADDR_REG_SET_INV_GFCI_30MA/60MA/150MA/300MA_PRO_DATA | 宏 | 四档 GFCI 保护阈值地址 42044~42047(行 159-162);ALPHAESS_NUM_SET_INV_GFCI_PRO_DATA = 1 |
ALPHAESS_ADDR_REG_QUERY_INV_CEI_SELF_CHECKING / _NUM_ | 宏 | 三相机意大利安规自检数据:42048,81 寄存器(行 165-166) |
ALPHAESS_ADDR_REG_SET_SAFTY_ACTPOWER_SETTING / _NUM_ | 宏 | 安规有功/频率降载参数:43000,51 寄存器(行 168-169) |
ALPHAESS_ADDR_REG_SET_QUIESCENT_REACTPOWER_SUPPORT / _NUM_ | 宏 | 静态电压无功支撑 Q(U)/cosφ(P):44000,26 寄存器(行 171-172) |
ALPHAESS_ADDR_REG_SET_PU_MODE_ACTIVE_RESPONSE_3TAU / _NUM_ | 宏 | PU 模式有功响应时间常数(3τ):44034,2 寄存器(行 174-175) |
AFCI_RUN_MODE_ALLOW(m) | 宏 | 判定逆变器运行模式是否允许 AFCI 自检:cNormalMode/cUPS/cByPassMode 三者之一(行 178-179) |
ALPHAESS_SAFETY_COUNTRY_E | 枚举 | 逆变器侧安规国家/标准码(行 182-217),含 50/60 Hz 默认、AS4777-2020 A/B/C/NZ、NRS097、CEI021、VDE4105、EN50549、UNE217002、TOR、C10_11、VDE0126、G99/G98、MEA/PEA、NC2022、PPDS、NC_RFG、NF50549、INMETRO、EN50549_IE/NED、SI_4777、MSZ、NA_EEA_NE7_CH、SRPS 等;显式赋值 20/25/32/38 保留跳号 |
ALPHAESS_INV_MODEL_SUB_E | 枚举 | 逆变器型号子类型(行 219-239),S5/S3.6/S3/B5/B3.6/B3/S8/S6/S10/B10=12/T10=20/T4/T6/T8/T5/T12/T15,ALPHAESS_BW_G3_S5_INV2 = '1' 兼容旧编码 |
ALPHAESS_INV_BAT_TYPE_E | 枚举 | 电池类型:96 V/150 V/300 V/9640-9650/DCDC 升压/铅酸(行 241-252),同一枚举内另定义 P=0(并联)、S=3(串联)复用值 |
ALPHAESS_INV_VAR_RESPONSE_MODE_E | 枚举 | 无功响应模式:无响应/固定 PF/cosφ(P)/固定 Q/Q(U) 线性/Q(U) 滞环(行 254-264) |
ALPHAESS_ERROR1_U | 联合体 | 4 字节故障字 1(行 266-312),u32_err1_all 与 32 个 1 bit 域互为视图:母线软超时/母线过压/欠压/短路、逆变软超时、逆变过压/欠压、相位短路、过载、并网反向、LPE 反向、EMS SCI/CAN、各路基准电压、NTC 丢失、电池欠压/过压、GFCI 器件/GFCI、各 HCT/CT 异常、各继电器、ISO |
ALPHAESS_ERROR2_U | 联合体 | 4 字节故障字 2(行 314-360):DCI、看门狗、开环、DSP 自检、软件不一致、N/PE 丢失、并机 CAN/同步信号/软件差异/模块错误/负功率/多主机/开机不一致、硬件版本差异、母线不平衡、逆变线短路、DC/AC SPD、AFCI 故障等 |
ALPHAESS_WARNING1_U | 联合体 | 4 字节告警字 1(行 362-408):PV 高压、电池开路/过压/欠压/反接、母线过压、电网丢失/电压/频率/10 min 电压/瞬时过压、PE 丢失、LN 反接、过载、过温/低温、GFCI、ISO、DCI、DCV、孤岛、NTC、风扇异常、N 丢失、EMS SCI/CAN、并机告警、并机 N 丢失、电池数量异常、相序、电压波峰因数 |
ALPHAESS_WARNING2_U | 联合体 | 4 字节告警字 2(行 410-456):Flash ID/读写、机型、逆变欠压、软/硬件过流、Boost/Buck-Boost 过流、母线欠压、无 PV 输入、输入/输出限功率、过频/过压/过温降载、HVRT/LVRT、并机定位/平均过载/模块地址重复/并机进入失败/功率不平衡/开机不一致、DCV 采样异常、母线不平衡、PV 反接、AFCI 告警 |
CEI_MAP_T | 结构体 | 意大利 CEI 自检寄存器映射项(行 458-464):value_offset/time_offset/res_offset(字节偏移)+ type(0=OVP2…6=UFP1,7=OVP10MIN) |
CEI_SAFTY_TEST_RESULT_U | 联合体 | 16 位 CEI 自检结果位图(行 466-492),每位对应一项 value/time 校验结果,u16_all 为 0x5555 表示全通过 |
ALPHAESS_RUN_TABLE_T | 结构体 | 逆变器运行原始数据表(行 494-581),约 90 个字段:累计运行时间、工作模式、温度组(模块/PV Boost/电池 Buck-Boost/功率板/控制板/各继电器)、母线电压、PV 三/四路电压电流功率、组串电流 1~6、电池前后电压/两路电流/总电流/功率、逆变三相电压电流频率、视在/有功/无功功率、功率因数、电网三相及线电压频率、备电侧电压电流频率功率、限功率状态、ISO、GFCI RMS/DC、CEI 回读值、开关状态、并机 ID/数量、u_cei_test_res[3] 三相自检结果 |
ALPHAESS_START_CONFIG_TABLE_T | 结构体 | EMS 侧"已下发配置快照"(行 583-608),用于与最新目标值做变化检测:充/放电截止电压、PV 容量、最大馈网比例、电池类型、启停、UPS、油机、Grid-Forming、BB、MPPT、BB 机型、PV-Charger 模式、无功控制、ON/OFF、电网电压/频率降载、Bypass、并机方案、电池输出/输入电流、电池瞬时额定电压 |
ALPHAESS_HEAT_TABLE_T | 结构体 | 电池加热数据快照(行 612-618):加热指令、加热继电器指令、加热电压(0.1 V)、加热电流(0.01 A) |
INVERTER_PARALLEL | 联合体 | 并机配置字节(行 620-630):bit0 使能、bit1 主机/从机、bit2 单相/三相 |
ALPHAESS_TABLE_T | 结构体 | 本文件的核心状态容器(行 632-712):系统型号与波特率、约 60 个"请求/应答标志位"(u8_ems_set_*_flag / u8_ems_get_*_flag)、若干 tick 时间戳(通信存活、波特率自检、运行数据轮询、参数初始化、运行模式轮询)、变化检测时间戳,以及运行结果字段 u32_inv_fault1/2、u32_inv_warning1/2、u8_inv_parallel、t_alphaess_run_info;尾部还混入了 CAN 侧的 u8_ems_inv_idcode_flag、u8_set_inv_ctrl_mode_flag 等字段 |
g_t_alphaess_comm_info | 全局变量声明 | extern ALPHAESS_TABLE_T g_t_alphaess_comm_info;(行 715),实体定义在 alphaess_comm_usart.c:36 |
3. 函数清单
本文件为头文件,不含函数定义,仅含 6 个函数原型声明(供实现文件与少量外部调用方使用):
| 函数名 | 作用域 | 说明 |
|---|---|---|
alphaess_comm_init | 全局(声明) | 声明于行 718;实现于 alphaess_comm_usart.c:110,初始化通信标志位与 SCI 波特率 |
alphaess_write_data | 全局(声明) | 声明于行 720;实现于 alphaess_comm_usart.c:262,向 uart2 发送原始字节流 |
alphaess_recv_data | 全局(声明) | 声明于行 721;实现于 alphaess_comm_usart.c:285,从 uart2 收帧并做 CRC 校验后的长度回传 |
alphaess_inverter_comm_usart | 全局(声明) | 声明于行 723;实现于 alphaess_comm_usart.c:5090,逆变器串口主通信状态机(周期调用) |
alphaess_inverter_data_check | 全局(声明) | 声明于行 724;实现于 alphaess_comm_usart.c:5530,检测上层配置变化并置位下发标志 |
alphaess_get_self_test_data | 全局(声明) | 声明于行 725;实现于 alphaess_comm_usart.c:946,汇总意大利安规自检结果 |
4. 核心逻辑解析
头文件没有运行时逻辑,这里说明它定义的两条"契约",它们是理解 .c 实现的必要前提。
4.1 寄存器地图与语义分区
地址按功能分段,代码中大量使用 ALPHAESS_ADDR_REG_* 常量而非裸数字,因此读 .c 时可从常量名反推语义:
- 3xxxx:只读遥测/信息区,用功能码 0x04 读输入寄存器。
30000+73(设备信息)、30200+115(运行数据)、30331+16(扩展运行数据)。 - 4xxxx:可写控制区,用功能码 0x10 写多寄存器。40102 以后是按功能逐个排列的单点命令(SN、清电量、启停、ON/OFF、复位 DSP、模式、PV 容量……41141 两倍充电)。
- 41000+26:功能使能"打包区",一次写 52 字节,把有功控制使能、EEG、启动斜率、P-V/P-f 降载使能、无功控制、高低穿、各类保护使能、AFCI 检测阈值等一次性下发。
- 42001+47 / 42005+16 / 42021+12 / 42033+15 / 42044~42047:安规参数区,OVP/UVP/OFP/UFP 三级阈值+时间、首次并网值、ISO/DCI 阈值、GFCI 四档,是"读—改—写"回路的对象。
- 43000+51 / 44000+26 / 44034+2:安规有功/频率降载曲线与 Q(U)、cosφ(P) 曲线参数。
4.2 请求/应答标志位协议
ALPHAESS_TABLE_T 中约 60 个 u8_ems_set_*_flag / u8_ems_get_*_flag 构成事实上的"消息邮箱":alphaess_inverter_data_check() 检测到配置或回读值变化时把对应 set/get 标志置 TRUE 并立即退出(不发送),下一轮 alphaess_inverter_comm_usart() 看到标志为 TRUE 才发一帧,收到合法应答后清标志。头文件与 .c 共同保证了这条不对称分工:"探测/置标志"在 data_check 里,"发送/清标志"在 comm 里。
4.3 编码/换算约定
- 电压类寄存器多按 0.1 V 或 1 V 存放(如
u16_pv1_volt/10),时间类在读写时分别做*2//2、*20//20的缩放,说明 DSP 侧时间单位是 2 ms 与 20 ms 两套。 - 频率类按 0.01 Hz(
>4500判断 45 Hz、<4000判断 40 Hz)。 - 安规曲线电压在 EMS 侧与 DSP 侧的比例为
23/10,.c中读时*10/23、写时*23/10,是易错点。 - 故障/告警采用 32 位位域联合体,且故障 1 的字节序在代码里是倒装的(
.c:1340用buf[161+32]<<24 | buf[162+32]<<16 | buf[159+32]<<8 | buf[160+32]),即高字在前、低字在后,与常规大端相反。
5. 对外接口
本文件导出的符号
| 符号 | 类型 | 供谁使用 |
|---|---|---|
g_t_alphaess_comm_info | 全局变量(extern 声明) | alphaess_comm_can.c、alphaess_upgrade.c、midware/afci/afci_comm.c、midware/afci/afci_upgrade.c、midware/interface/modbus/modbus.c、sunspec_business.c、sunspec_modbus.c、midware/inverter/inverter.c |
alphaess_comm_init | 函数声明 | midware/inverter/inverter.c:89、midware/inverter/alphaess/alphaess_upgrade.c:533,582,以及本模块内部 alphaess_comm_usart.c:5462,5691 |
alphaess_write_data | 函数声明 | midware/afci/afci_comm.c:67,109,763、midware/afci/afci_upgrade.c:102,204,231,以及 .c 内部收发函数 |
alphaess_recv_data | 函数声明 | midware/afci/afci_upgrade.c:127,以及 .c 内部所有查询/设置函数 |
alphaess_inverter_comm_usart | 函数声明 | midware/inverter/inverter.c:1116 |
alphaess_inverter_data_check | 函数声明 | midware/inverter/inverter.c:1117 |
alphaess_get_self_test_data | 函数声明 | midware/inverter/inverter.c:308 |
全部 ALPHAESS_ADDR_REG_*、功能码、缓冲尺寸宏 | 宏 | 主要被 alphaess_comm_usart.c 与 alphaess_comm_can.c 使用 |
ALPHAESS_* 枚举、ALPHAESS_ERROR*_U、ALPHAESS_WARNING*_U、ALPHAESS_RUN_TABLE_T 等类型 | 类型 | 被 alphaess_comm_can.c 复用(CAN 侧把同一套位域映射到 CAN 报文) |
本文件依赖的外部符号
#include "includes.h"(工程公共头,含 u8/u16/s32/bool 与 uCOS-II 声明)与 #include "alphaess_upgrade.h"(行 13-14)。枚举 cNormalMode/cUPS/cByPassMode、DEFAULT_50HZ/AS4777_2/TOR_ERZEUGER 等 EMS 侧安规码、SUB_S5…SUB_T15 机型码、PVCHARGR_FROM_E、OEM_BW 等均来自 includes.h 汇聚的其它模块头文件(如 midware/inverter/inverter.h、data/system_config.h)。
6. 依赖关系
- 依赖:
includes.h(工程公共头)、alphaess_upgrade.h;间接依赖midware/inverter/inverter.h(机型/安规枚举)、midware/inverter/alphaess/alphaess_comm_can.h(ALPHAESS_OPERATION_MODE_E等被.c使用)。 - 被依赖:
midware/inverter/alphaess/alphaess_comm_usart.c(唯一实现者,强依赖)midware/inverter/alphaess/alphaess_comm_can.c(复用g_t_alphaess_comm_info与位域联合体)midware/inverter/alphaess/alphaess_upgrade.c(调alphaess_comm_init)midware/inverter/inverter.c(调alphaess_inverter_comm_usart/alphaess_inverter_data_check/alphaess_get_self_test_data/alphaess_comm_init)midware/afci/afci_comm.c、midware/afci/afci_upgrade.c(复用同一串口物理层alphaess_write_data/alphaess_recv_data,即逆变器与 AFCI 板共享 uart2)midware/interface/modbus/modbus.c、sunspec_business.c、sunspec_modbus.c(读g_t_alphaess_comm_info做 Modbus 从站映射)
7. 备注与风险点
- 枚举跳号与"同名同值":
ALPHAESS_SAFETY_COUNTRY_E显式跳过 20/25/32/38 之间的若干值(行 204、209、215、216),说明 DSP 侧码表并非连续,新增标准时若插值会错位。ALPHAESS_INV_BAT_TYPE_E在同一个枚举里既列电池化学类型又列 P=0/S=3 的并联/串联语义(行 243-251),两套含义共用一套枚举,调用处极易混淆。 ALPHAESS_BW_G3_S5_INV2 = '1'(行 238):用字符常量参与数值比较,且与ALPHAESS_BW_G3_T10_INV = 20这类显式值混用,可读性差;实际只在.c:1044的 switch 中被匹配。ALPHAESS_ADDR_REG_CLEAR_ENERGY_CMD(40102)与ALPHAESS_ADDR_REG_SET_INV_SN_CMD(40202)注释与常量名不一致:行 43/46 的地址值需与 DSP 手册核对,注释里_NUM_语义为寄存器个数而非字节数。- 结构体把 CAN 字段混进 SCI 结构(行 696-703
u8_ems_inv_idcode_flag、u32_ems_send_inv_ctrl_power_tick1等):串口与 CAN 两套协议共用一个全局状态体,任何一处误用都会跨协议互相干扰。 - 位域联合体依赖编译器布局:
ALPHAESS_ERROR1_U等用u8 x:1逐位声明,位序与字节序完全依赖 Keil ARMCC 的实现(小端、低位先分配)。行 340-358 中大量u8_bit18~u8_bit31占位未命名语义,DSP 侧若扩展位定义,此处必须同步补齐,否则会静默把新故障吞掉。 u8_display_type在ALPHAESS_RUN_TABLE_T中被定义为u8(行 578),但.c:1139赋值时写的是(u32)((buf[69]<<8)|buf[70]),高位被截断——如果 DSP 真的用到 >255 的显示类型码会丢信息。ALPHAESS_ADDR_REG_QUERY_INV_RUNNING_DATA_PARALLEL(32000)和ALPHAESS_ADDR_REG_SET_INV_FIRST_ONGRID_TIME(42037)、ALPHAESS_ADDR_REG_CLEAR_INV_FAULT(40148)在本文件对应的.c中未被使用,属于历史遗留或预留给 CAN 侧,删除前需确认无外部引用。- 注释错别字/不一致:行 106 注释 "AFCI使能位" 地址 41023 与行 103 注释 "功能使能" 41000 的位置语义需注意;行 168 注释 "有功设置" 实为"安规有功/频率降载参数块"。