inverter.h
源文件路径:
midware/inverter/inverter.h所属模块:midware/inverter(逆变器统一抽象层的公共契约头) 代码行数:2263
1. 文件职责
本文件是整条逆变器(PCS)软件栈的总契约头:它把"逆变器"这个物理对象抽象成一张全局设备表 INVERTER_TABLE_T(inverter.h:1901-1915),表内再分为配置表、安规参数表、安规自检表、运行数据表、控制命令表、控制参数表、调试日志表、AFCI 表共 8 个子块,全工程所有对逆变器的读写都落在这张表上。
它同时定义了三类与机型强相关的编译期/运行期标识:编译期厂商开关 INVERTER_TYPE 及其派生的 INV_DC_CTRL/INV_AC_CTRL(inverter.h:172-181)、运行期厂商码 KELONG_TYPE~INOVANCE_TYPE(inverter.h:163-170)、以及 70 多个型号字符串宏 TYPE_SEEDS_G3_*/TYPE_BYTE_WATT_*/TYPE_SET_* 等(inverter.h:38-150),后者被 logic/、net/、hmi/ 用来做升级包匹配、Modbus/SunSpec 上报和界面型号显示。
第三块职责是安规参数与故障位域的字典:GRID_REGULATION_E(安规码,inverter.h:191-254)、INVERTER_SAFTY_INFO_T(300 多个电网保护点/P(U)/Q(U)/P-F/cosφ(P) 曲线参数,inverter.h:551-758)、以及三组 64 位故障字与两组 64 位告警字的位域联合体(inverter.h:960-1620)。
数据流位置:厂商驱动(kelong/set/ginlong/alphaess/goodwe/inovance)按 get_inverter_type() 分发后往 g_t_inv_info.t_run_info 写实时量 → logic/ 读实时量、算出目标功率并写回 t_safty_info/t_control_cmd/t_control_parameter → 厂商驱动把参数组帧下发。hmi/ 与 net/ 主要走本文件声明的 inverter_read_*/inverter_get_*/set_inverter_* 系列接口,但也有大量代码直接读写 g_t_inv_info.t_config_data(hmi/key.c 83 处、net/server.c 48 处、net/ems.c 21 处)。
本文件不含任何函数定义,只有 302 条函数原型声明(inverter.h:1933-2261)与 2 个 extern 全局变量(inverter.h:1929-1930),实现在 midware/inverter/inverter.c 与 6 个厂商驱动目录里。它驱动方是 user/main.c:其中声明的 task_inverter、task_inverter_can、task_parallel_sci 在此静态创建(user/main.c:189、user/main.c:244、user/main.c:299)。
2. 关键数据结构与宏
| 名称 | 类型 | 说明 |
|---|---|---|
DEBUG_INVERTER | 宏 | 逆变器模块调试打印总开关,置 0 关闭(inverter.h:18)。 |
cWaitMode~cUpdateArm(0~10) | 宏 | 逆变器运行模式码:待机/自检/检查/并网/离网UPS/旁路/直流/故障/升级主控/升级从机/升级ARM(inverter.h:20-30),与 t_run_info.u8_run_mode 对应。 |
VERSION_INV_HARD | 宏 | 逆变器硬件版本字符串 "V1.01",被写入 t_config_data.u8_hw_ver[10](inverter.h:32)。 |
TYPE_ALPHA_ESS | 宏 | 沃太自有品牌型号串(inverter.h:34)。 |
TYPE_KELONG_S6 | 宏 | 科华机型型号串(inverter.h:38)。 |
TYPE_SET / TYPE_SET_B3 / TYPE_SET_S5 / TYPE_SET_M5 / TYPE_SET_M10 | 宏 | 盛能杰系列型号串(inverter.h:41-45)。 |
TYPE_GINLONG / _T10 / _S5 / _S3_6 / _S4_6 / _B5 / _S6 | 宏 | 锦浪系列型号串(inverter.h:48-54)。 |
TYPE_BYTE_WATT 系列(S5/S3.6/S3/B5/B3.6/B3/T4/T5/T6/T8/T10/T12/T15/S8/S6/S10/B10) | 宏 | 贝瓦系列型号串(inverter.h:57-74)。 |
TYPE_GOODWE 系列(AES7.6/AES9.6/ABP7.6/ABP9.6) | 宏 | 固德威系列型号串(inverter.h:77-81)。 |
TYPE_INOVANCE 系列(T12/T15/T20) | 宏 | 汇川系列型号串(inverter.h:84-87)。 |
TYPE_SEEDS_G3_*(18 项) | 宏 | 沃太自研 SMILE-G3 平台对外型号串,形如 "SMILE-G3-T12-INV"(inverter.h:91-108)。 |
TYPE_SEEDS_*(S5/S6/S4.6/S3.6/B5/AES7.6/AES9.6/ABP7.6/ABP9.6 等) | 宏 | 老平台 SMILE 系列型号串(inverter.h:110-127)。 |
ZOE_OEM_TYPE_* / SUNPOWER_OEM_TYPE_* / BYTE_WATT_OEM_TYPE_* / PEIMAR_OEM_TYPE_* / DIGIEN_OEM_TYPE_* | 宏 | 贴牌(OEM)型号串,inverter_read_system_modle() 依据 g_t_system_base_info.u16_oem_flag 改用这些串(inverter.h:132-150)。 |
REGULATOR_SPEED_1~_5 | 宏 | 调节速率档位 1~5,get_inv_regulator_speed() 的返回值域(inverter.h:154-158)。 |
INVERTER_NULL/KELONG_TYPE/SET_TYPE/GINLONG_TYPE/ALPHAESS_TYPE/GOODWE_TYPE/INOVANCE_TYPE/INVERTER_MAX | 宏 | 厂商类型码 0~7;INVERTER_MAX(7) 在条件编译里兼作"全部厂商都编进去"的哨兵(inverter.h:163-170)。 |
INVERTER_TYPE | 宏 | 编译期烘焙的厂商开关,当前值 (INVERTER_NULL)(inverter.h:172);set/get_inverter_type() 运行时读的是 t_config_data.u8_inv_model,两者是两套东西。 |
INV_DC_CTRL / INV_AC_CTRL | 宏 | 由 INVERTER_TYPE 条件定义:科华/盛能杰/锦浪/固德威/INVERTER_MAX 走 DC 侧控制,沃太/汇川/INVERTER_MAX 走 AC 侧控制(inverter.h:175-181),被 logic/dc_control.c、logic/ac_control.c 用 #ifdef 包住整个文件体。 |
PF_001_TO_01(val) | 宏 | 0.001 精度 S16 → 0.01 精度 S8 转换宏:先四舍五入(正 +5/10、负 -5/10)再限幅到 ±127/±128,含赋值副作用(inverter.h:184-186)。 |
GRID_REGULATION_E | 枚举 | 安规码表,VDE0126_50HZ(0) 起、含 AS4777_2、G98/G99、CEI021、NRS097_2_1、EN50549 各国变体、UL1741 系列、RD1699/RD647/RD413、NTS_Type_A 等,末位 Safety_Max 作范围校验(inverter.h:191-254)。 |
GRID_SAFESUB_E | 枚举 | 安规子项,主要用于 AS4777.2 澳洲各州(VICTORIA/QUEENSLAND/SOUTH_AUSTRALIA/AUSGRID…)与 NEW_ZEALAND/VECTOR,末位 SAFESUB_MAX(inverter.h:256-277)。 |
BACKUP_STATUS_E | 枚举 | 备电(UPS)使能三态 BACKUP_NULL=0/DISABLE/ENABLE,set_inverter_backup_enable() 的参数类型(inverter.h:279-284)。 |
INVERTER_OVERALL_STATUS_E | 枚举 | 逆变器整体状态。注意枚举体内 INV_SHUTDOWN_NONE 又被赋 0,与 INV_POWER_NONE 同值(历史遗留写法,靠语义区分)(inverter.h:286-296)。 |
SYS_SHUTDOWN_STATUS_E | 枚举 | 一键停机/租赁状态 SYS_SHUTDOWN_STOP/START/STOP_DAYS(inverter.h:298-303)。 |
INVERTER_SUB_E | 枚举 | 子机型码 SUB_S3~SUB_B10 共 28 项(相数+容量细分),末位 SUB_MAX;get_inverter_sub() 用它做越界钳位(inverter.h:305-338)。 |
INVERTER_DATA_E | 枚举 | 一个枚举承载两套语义:PV_CHANAEL1..4(1~4)/PV_CHANAL_ALL(5) 与 PHASE_L1..L3(1~3)/PHASE_ALL(4)。拼写不统一(CHANAEL / CHANAL)(inverter.h:340-354)。 |
INVERTER_SELF_INSPECTION_STATE_E | 枚举 | 安规自检状态:未自检/自检中/自检完成(inverter.h:356-361)。 |
INVERTER_SELF_INSPECTION_FLAGS_E | 枚举 | 自检启停标志:无/停止/启动(inverter.h:363-368)。 |
INVERTER_REACTPOWER_MODE_E | 枚举 | 无功模式:无/固定PF/P-PF/固定Q/Q(U)/Volt-Var,inverter_get_reactpower_control_mode() 的返回值域(inverter.h:370-378)。 |
INVERTER_UPGRADE_ERR_E | 枚举 | 固件升级错误码,按"发送/接收 × boot/master/master_last/slave/slave_last/arm/arm_last/end"排列,末位 UPGRADE_ERR_MAX(inverter.h:380-401)。 |
INVERTER_CATEGORY_E | 枚举 | 机型大类:贝瓦单相/贝瓦三相/非贝瓦,get_inverter_type_category() 返回(inverter.h:403-407)。 |
EMS_N_N_SHORT_STATUS | 枚举 | N-N 短接检测状态:跟随配置/关闭/开启(inverter.h:409-414)。 |
#pragma pack(1) / #pragma pack() | 编译指令 | 从 inverter.h:416 到 inverter.h:1916 之间全部结构体按 1 字节对齐,因为 INVERTER_CONFIG_TAB_T 要整块读写 Flash 并与 Modbus CRC 对齐。 |
SAFTY_MODE_ENABLE_U | 联合体 | 安规模式使能位图(u16):volt_watt/volt_var/volt_freq/pf_curve/volt_watt_charge/reactice_power/fix_power_factor/fix_reactive_power/power_pf 共 9 位。成员名是 BIT(大写),与后面故障字的 .bit(小写)不一致(inverter.h:418-433)。 |
INVERTER_CONFIG_TAB_T | 结构体 | 逆变器配置表(inverter.h:435-505):机型/硬件版本/AC-DC 额定功率/充放电截止/安规与子安规/并机与旁路/停机与防盗/有功无功控制使能/安规模式位图 等;末尾 u8_reserve[172] 补齐 + u16_crc_code(Modbus CRC16)。按 #pragma pack(1) 展开总长 256 字节,正好整除 4KB 扇区。 |
STATIC_ASSERT(...) | 宏 | 定义于 midware/debug/debug.h:16,用"条件为假时数组长度为负"的技巧在编译期断言;此处断言 ASSERT_FLASH_SECTOR_SIZE % sizeof(INVERTER_CONFIG_TAB_T) == 0,其中 ASSERT_FLASH_SECTOR_SIZE = FLASH_SECTOR_SIZE = 4*1024(inverter.h:507、midware/debug/debug.h:19、hardware/flash/flash.h:27)。 |
GRID_PARA_TUNING_FALG_E | 枚举 | 电网参数在线调节的标志:停止/固定功率因数/P-PF/固定无功/变模式(inverter.h:509-518)。 |
INVERTER_PHASE_SAFTY_INFO_T | 结构体 | 意大利安规三相自检用的一/二/三阶过压欠压、10 分钟过压、一/二阶过频欠频保护点与时间(值为 0.1V/0.01S/0.01Hz 量纲)(inverter.h:520-549)。 |
INVERTER_SAFTY_INFO_T | 结构体 | 本文件最大的参数表(inverter.h:551-758):安规码/国家/子安规、高低穿/P-Q 控制使能、SAFTY_MODE_ENABLE_U、PF 相位与固定无功、并网斜率与加载速率、P(U) 6 点曲线(另有 4 个贝瓦专用过压点与 4 个欠压预留点)、Q(U) 4 点+pin/pout/K/响应时间、S-PF 3 点、cosφ(P) 5 点、P-F 过频/欠频降载全套(模式/速率/触发退出延时/F1F2F3/恢复斜率)、三阶过压欠压过频欠频保护与恢复点、10 分钟过压、df/dt、ISO、DCI、GFCI 30/60/150/300mA、零电流模式、INVERTER_PHASE_SAFTY_INFO_T t_phase_safty_info[3]、奥地利电池充放电与有功斜坡等。 |
INVERTER_SAFTY_TEST_RESULT_U | 联合体 | 安规自检结论位图(u16):过压/10min过压/欠压/三阶过压欠压/过频欠频各阶的"值"与"时间"共 16 位(inverter.h:760-785)。 |
INVERTER_SAFTY_TEST_T | 结构体 | 单相自检报告:自检状态、数据获取状态、发送服务器/APP 标记、进度,以及 59.S1~S4 / 27.S1~S3 / 81>.S1~S3 / 81<.S1~S3 每条保护项的"标准值 vt/ft、标准时间 tt、设定值 vs/fs、实际值 vo/fo、实际保护时间 to"五元组(inverter.h:787-888)。 |
INV_FAULT_E | 枚举 | 主故障位表,从 INV_FAULT_GRID_OVP 到 INV_FAULT_ZERO_GROUND_FAULT 恰好 64 项,与 64 位故障字一一对应(inverter.h:890-957)。 |
INVERTER_FAULT_U | 联合体 | 主故障字:u64 u64_all / u8 byteData[8] / 8 个 BYTE 的 64 个 1bit 成员,成员名与 INV_FAULT_E 顺序严格对应(inverter.h:960-1047)。 |
INV_FAULT_EXTEND1_E / INVERTER_FAULT_EXTEND1_U | 枚举 + 联合体 | 扩展故障字 1(同样 64 位满编):AC HCT/继电器/接地/PV 反接/风扇/软起超时/EMS SCI-CAN/各路 CT/NTC/看门狗/逆变开环/并机参数错误/线路异常 等(inverter.h:1049-1131、inverter.h:1134-1221)。 |
INV_FAULT_EXTEND2_E / INVERTER_FAULT_EXTEND2_U | 枚举 + 联合体 | 扩展故障字 2(当前定义 25 位,25~63 位命名为 bit25~bit63 预留):零漂、FPGA、PV 控制环、自检失败、谐振、SPD、备电继电器、加热异常、AFCI 等(inverter.h:1223-1258、inverter.h:1260-1347)。 |
INV_WARNING_E / INVERTER_WARN_U | 枚举 + 联合体 | 告警字(64 位满编):电池过欠压、过载、温度、母线、电网丢失/异常、PE 丢失、LN 反接、ISO/DCI/DCV/孤岛、风扇、Flash 读写、母线欠压、过频/过压/过温降载、HVRT/LVRT、并机告警等(inverter.h:1349-1430、inverter.h:1433-1520)。 |
INV_WARNING_EXTEND1_E / INVERTER_WARN_EXTEND1_U | 枚举 + 联合体 | 扩展告警字,目前只用到 5 位:EMS-BMS 通信丢失、母线不平衡、PV 反接、电网电压波峰因数高、AFCI 告警(inverter.h:1522-1530、inverter.h:1532-1619)。 |
INVERTER_GROUND_FAULT_U | 联合体 | 32 位接地/漏电故障字(GFCI 传感器、装置故障、地线断开、直流接地、ISO 错误…),与前面几个 64 位字长度不同(inverter.h:1621-1669)。 |
INVERTER_RUN_TABLE_T | 结构体 | 运行数据表(inverter.h:1671-1842):通信丢失标志、SN 与主/从/ARM/硬件版本、AC/DC 额定功率、充放电截止、MPPT 百分比、DSP 调试数组 u16_dsp_debug[30]、PV1~4 电压电流功率、电网/逆变/备电三端口三相电压电流有功无功视在功率与频率、电池电压电流功率、并机从机 PV、机温、母线电压、运行 PF、绝缘门限、运行模式、各种保护实际值、5 个故障告警联合体、5 路电量累计、额定电压频率、并机数、空开状态、停机标志、旁路使能、操作模式、型号名、Modbus/CAN 协议版本等。 |
INVERTER_CONTROL_CMD_TABLE_T | 结构体 | 控制命令表(inverter.h:1844-1857):启停、复位、UPS 使能、安规自检、清洁能源、GFCI 测试、继电器 N 测试、N-PE 短接、MPPT 扫描启动、复位 DSP EEPROM。厂商驱动消费后自行清 0(一次性命令语义)。 |
INVERTER_CONTROL_PARAMETER_TABLE_T | 结构体 | 控制参数表(inverter.h:1859-1872):ATE 模式/复位标记、软启动、上电电池检查、故障清除,以及 5 个"数据就绪"标记(电池加热数据/CSIP 澳洲数据/加热命令/加热截止电压/加热继电器状态)。 |
INVERTER_DEBUG_LOG_T | 结构体 | 升级与调试日志(inverter.h:1874-1885):升级状态、错误 tick、错误原因、BMS 状态、逆变频率、OS 时间戳、命令标志。 |
AFCI_TABLE_T | 结构体 | AFCI(电弧故障保护)状态表(inverter.h:1887-1899):自检结果、软件版本[16]、心跳、自检使能、自检计时、升级标志、支持标志、停机标志、升级结束计时。 |
INVERTER_TABLE_T | 结构体 | 全局设备总表(inverter.h:1901-1915):u8_init_flag + INVERTER_CONFIG_TAB_T t_config_data + INVERTER_SAFTY_INFO_T t_safty_info + INVERTER_SAFTY_TEST_T t_safty_tset_info[3](注意 tset 拼写错误)+ INVERTER_RUN_TABLE_T t_run_info + 控制命令/参数表 + 调试日志 + AFCI 表。 |
SENERGYS5_QUERY_INV_REGISTER_T | 结构体 | 盛能杰 S5 的"任意寄存器透传查询"通道(inverter.h:1918-1926):使能、标准/非标准 Modbus 标志、u8_send_data[10]、u8_rend_data[10]、读标志。定义于 #pragma pack 之外。 |
g_t_inv_info | 全局变量(extern) | 全工程唯一的逆变器设备表实例,定义于 midware/inverter/inverter.c:39(INVERTER_TABLE_T g_t_inv_info = {0};)(inverter.h:1929)。 |
senergys_query_inv_register | 全局变量(extern) | 盛能杰透传寄存器结构体实例,定义于 midware/inverter/set/set_comm_usart_s5.c:52(inverter.h:1930)。 |
3. 函数清单
本文件不含函数体,以下 302 条全部是"作用域=全局(extern 原型声明)",实现在 midware/inverter/inverter.c 及 6 个厂商驱动目录。声明行号取自 inverter.h:1933-2261。
| 函数名 | 作用域 | 声明行 | 说明 |
|---|---|---|---|
task_inverter | 全局 | inverter.h:1933 | uCOS-II 任务入口:SCI(USART) 侧逆变器轮询、组帧、通信丢失判定主循环。 |
task_inverter_can | 全局 | inverter.h:1934 | uCOS-II 任务入口:CAN 侧逆变器通信(部分厂商走 CAN)。 |
task_parallel_sci | 全局 | inverter.h:1935 | uCOS-II 任务入口:并机 SCI 串口收发任务。 |
set_inverter_init | 全局 | inverter.h:1937 | 置 g_t_inv_info.u8_init_flag = TRUE,标记设备表已初始化。 |
set_inverter_type | 全局 | inverter.h:1938 | 写 t_config_data.u8_inv_model(厂商类型码)。 |
inverter_state_init | 全局 | inverter.h:1939 | 按 get_inverter_type() 分发调用对应厂商的 *_comm_init() 通信初始化(如 kelong_comm_init()、senergy_comm_init(),inverter.c:63-113)。 |
get_inverter_type | 全局 | inverter.h:1940 | 读厂商类型码;越界(>= INVERTER_MAX)时钳位为 INVERTER_NULL(inverter.c:1340)。 |
set_inverter_sub | 全局 | inverter.h:1941 | 写子机型码 t_config_data.u8_inv_model_sub。 |
get_inverter_sub | 全局 | inverter.h:1942 | 读子机型码;越界(>= SUB_MAX)时钳位为 SUB_NULL(inverter.c:1369)。 |
inverter_read_system_modle | 全局 | inverter.h:1943 | 返回系统型号字符串(受 OEM 标志影响),供 Modbus/SunSpec/HMI/升级匹配使用(inverter.c:1386)。 |
inverter_read_inv_type | 全局 | inverter.h:1944 | 返回厂商机型型号串(TYPE_* 宏),按 type+sub 二级映射(inverter.c:1656)。 |
inv3_upgradeable_flag | 全局 | inverter.h:1945 | 当前机型是否允许升级第三台逆变器。 |
passthrough_detection_flag | 全局 | inverter.h:1946 | 是否处于直通(passthrough)检测流程。 |
inverter_read_display_type | 全局 | inverter.h:1947 | 读取显示配置类型(字符 LCD / 段码屏 / 无屏)。 |
bms_upgradeable_flag | 全局 | inverter.h:1948 | 当前机型是否支持 BMS 固件升级(inverter.c:1939)。 |
g100_read_inv_type | 全局 | inverter.h:1949 | 英国 G100 场景下的机型码映射(inverter.c:1967)。 |
set_inverter_control_bat_disable_flag | 全局 | inverter.h:1950 | 置"禁止 EMS 控制电池"标志。 |
get_inverter_control_bat_disable_flag | 全局 | inverter.h:1951 | 读"禁止 EMS 控制电池"标志。 |
get_storage_grid_air_switch_specs_state | 全局 | inverter.h:1952 | 读储能并网空开规格状态。 |
inverter_get_grid_breaker_specs_enable | 全局 | inverter.h:1953 | 并网空开规格检测是否使能。 |
get_inv_calculation_interval | 全局 | inverter.h:1954 | 逆变器计算周期(ms),按机型返回常量(inverter.c:2310)。 |
get_inv_power_calculation_time | 全局 | inverter.h:1955 | 功率计算周期。 |
get_dispatch_calculation_time | 全局 | inverter.h:1956 | 调度(dispatch)计算周期。 |
get_generator_calculation_time | 全局 | inverter.h:1957 | 油机(generator)相关计算周期。 |
get_inv_ac_power_fine_tuning_range | 全局 | inverter.h:1958 | AC 侧功率细调幅值(W)。 |
get_inv_dc_power_fine_tuning_range | 全局 | inverter.h:1959 | DC 侧功率细调幅值(W)。 |
get_inv_feedin_power_fine_tuning_range | 全局 | inverter.h:1960 | 馈网(feed-in)功率细调幅值(W)。 |
get_inv_disturbance_flag | 全局 | inverter.h:1961 | 是否允许功率扰动类功能。 |
get_inv_ups_reserve_soc_enable_default | 全局 | inverter.h:1962 | UPS 保留 SOC 使能的机型默认值。 |
get_inv_regulator_speed | 全局 | inverter.h:1963 | 调节速率档位 REGULATOR_SPEED_1..5(inverter.c:2635)。 |
inverter_get_max_bat_volt | 全局 | inverter.h:1964 | 机型允许的最高电池电压(1V)。 |
inverter_get_min_bat_volt | 全局 | inverter.h:1965 | 机型允许的最低电池电压(1V)。 |
inverter_get_phase_number | 全局 | inverter.h:1966 | 机型相数(1 或 3)。 |
inverter_get_bat_shutdown_flag | 全局 | inverter.h:1967 | 是否支持电池侧停机。 |
inverter_get_feedin_time_charge_flag | 全局 | inverter.h:1968 | 馈电时段是否允许充电。 |
inverter_get_over_power_flag | 全局 | inverter.h:1969 | 机型是否具备超功率(过载)输出能力。 |
inverter_get_sys_ctrl_state | 全局 | inverter.h:1970 | 系统控制状态(一键停机/租赁等,对应 SYS_SHUTDOWN_STATUS_E)。 |
inverter_get_parallel_mode | 全局 | inverter.h:1971 | 并机模式(单相/三相、主机/从机)。 |
set_inverter_backup_enable | 全局 | inverter.h:1972 | 设置备电(UPS/Backup)使能,参数类型 BACKUP_STATUS_E。 |
get_allow_inverter_low_current_discharge_from_bat_flag | 全局 | inverter.h:1973 | 是否允许小电流从电池放电(低载维持)。 |
inverter_get_pv_start_volt | 全局 | inverter.h:1974 | PV 启机电压(1V)。 |
inverter_get_pv_state | 全局 | inverter.h:1975 | PV 状态(有无输入)。 |
inverter_get_battery_awaken_pv_start_volt | 全局 | inverter.h:1976 | 电池休眠后被 PV 唤醒所需的起始电压。 |
inverter_get_pv_connect_state | 全局 | inverter.h:1977 | PV 接入状态位。 |
inverter_get_chg_from_grid_limit | 全局 | inverter.h:1978 | 市电给电池充电的功率上限(W)。 |
inverter_get_control_accuracy | 全局 | inverter.h:1979 | 功率控制精度(细调步进判定用)。 |
inverter_read_logic_control_mode | 全局 | inverter.h:1980 | 读逻辑控制模式(AC/DC 控制路径选择)。 |
inverter_read_pv_volt | 全局 | inverter.h:1981 | 读第 index 路 PV 电压(1V),index 取 PV_CHANAEL1..4。 |
inverter_read_pv_cur | 全局 | inverter.h:1982 | 读第 index 路 PV 电流(0.1A)。 |
inverter_read_pv_power | 全局 | inverter.h:1983 | 读第 index 路 PV 功率(0.1W)。 |
inverter_get_offset_maxfeedin_power | 全局 | inverter.h:1984 | 最大馈网功率的偏置量(W)。 |
inverter_read_grid_volt | 全局 | inverter.h:1986 | 读电网 A/B/C 相电压(1V),index 取 PHASE_L1..L3。 |
inverter_read_grid_cur | 全局 | inverter.h:1987 | 读电网相电流(0.1A)。 |
inverter_read_grid_actpower | 全局 | inverter.h:1988 | 读电网各相/总有功功率(1W)。 |
inverter_read_grid_freq | 全局 | inverter.h:1989 | 读电网频率。 |
inverter_read_inv_curr | 全局 | inverter.h:1991 | 读逆变侧输出电流。 |
inverter_read_inv_actpower | 全局 | inverter.h:1992 | 读逆变侧有功功率。 |
inverter_read_inv_reactpower | 全局 | inverter.h:1993 | 读逆变侧无功功率。 |
inverter_read_inv_apparentpower | 全局 | inverter.h:1994 | 读逆变侧视在功率。 |
inverter_read_inv_freq | 全局 | inverter.h:1995 | 读逆变侧输出频率。 |
inverter_read_backup_volt | 全局 | inverter.h:1997 | 读备电(BACKUP)口电压。 |
inverter_read_backup_cur | 全局 | inverter.h:1998 | 读备电口电流。 |
inverter_read_backup_actpower | 全局 | inverter.h:1999 | 读备电口有功功率。 |
inverter_read_backup_apparentpower | 全局 | inverter.h:2000 | 读备电口视在功率(总线级,无 index)。 |
inverter_read_backup_freq | 全局 | inverter.h:2001 | 读备电口频率(0.01Hz)。 |
inverter_read_bat_volt | 全局 | inverter.h:2003 | 读电池电压(1V)。 |
inverter_read_bat_curr | 全局 | inverter.h:2004 | 读电池电流(0.1A)。 |
inverter_read_bat_power | 全局 | inverter.h:2005 | 读电池功率(1W)。 |
inverter_get_pv_start_status | 全局 | inverter.h:2007 | PV 启机状态标志。 |
inverter_get_battery_awaken_pv_start_status | 全局 | inverter.h:2008 | 电池唤醒流程的 PV 启机状态标志。 |
inverter_read_machine_temp | 全局 | inverter.h:2010 | 读机内温度(℃,S8 有符号)。 |
inverter_read_run_mode | 全局 | inverter.h:2011 | 读逆变器运行模式(cWaitMode~cUpdateArm)。 |
inverter_read_bus_volt | 全局 | inverter.h:2012 | 读直流母线电压。 |
inverter_read_pf_value | 全局 | inverter.h:2014 | 读运行功率因数(S8)。 |
inverter_read_fault_code | 全局 | inverter.h:2016 | 读主故障字 u_fault_code(64 位联合体整体值)。 |
inverter_read_fault_code_extend | 全局 | inverter.h:2017 | 读扩展故障字 1 u_fault_extend1_code。 |
inverter_read_fault_code_extend2 | 全局 | inverter.h:2018 | 读扩展故障字 2 u_fault_extend2_code。 |
inverter_read_fault_code_flag | 全局 | inverter.h:2019 | 是否存在故障(故障字非零)。 |
inverter_read_warning_code | 全局 | inverter.h:2020 | 读告警字 u_warning_code。 |
inverter_read_ground_fault_code | 全局 | inverter.h:2022 | 读接地/漏电故障字(32 位)。 |
inverter_read_insulation_fault_code | 全局 | inverter.h:2024 | 读绝缘(ISO)相关状态。 |
inverter_read_grid_fault_flag | 全局 | inverter.h:2025 | 是否存在电网类故障(过欠压/过欠频)。 |
inverter_read_energy_pv_input | 全局 | inverter.h:2027 | PV 发电量(0.1kWh)。 |
inverter_read_energy_inv_output | 全局 | inverter.h:2028 | 逆变输出电量(0.1kWh)。 |
inverter_read_energy_inv_input | 全局 | inverter.h:2029 | 逆变输入电量(0.1kWh)。 |
inverter_read_energy_bat_charge | 全局 | inverter.h:2030 | 电池充电累计电量(0.1kWh)。 |
inverter_read_energy_bat_dischg | 全局 | inverter.h:2031 | 电池放电累计电量(0.1kWh)。 |
inverter_read_grid_rated_voltage | 全局 | inverter.h:2033 | 电网额定电压。 |
inverter_read_grid_rated_freqency | 全局 | inverter.h:2034 | 电网额定频率(函数名 freqency 为拼写错误,保留原名)。 |
inverter_read_grid_overload_factor | 全局 | inverter.h:2036 | 并网过载系数,按机型分支硬编码(inverter.c:3664)。 |
inverter_read_rated_ac_charge_power | 全局 | inverter.h:2037 | AC 侧额定充电功率(W)。 |
inverter_read_rated_ac_discharge_power | 全局 | inverter.h:2038 | AC 侧额定放电功率(W)。 |
inverter_read_rated_dc_charge_power | 全局 | inverter.h:2039 | DC 侧额定充电功率(W)。 |
inverter_read_rated_dc_discharge_power | 全局 | inverter.h:2040 | DC 侧额定放电功率(W)。 |
inverter_read_sn | 全局 | inverter.h:2042 | 返回逆变器 SN 首地址 t_run_info.u8_inv_sn。 |
inverter_read_ver_master | 全局 | inverter.h:2043 | 返回主 DSP 版本数组首地址。 |
inverter_read_ver_slave | 全局 | inverter.h:2044 | 返回从 DSP 版本数组首地址。 |
inverter_read_ver_arm | 全局 | inverter.h:2045 | 返回 ARM 版本数组首地址。 |
inverter_read_hw_ver | 全局 | inverter.h:2046 | 返回硬件版本字符串(char*),供升级校验。 |
inverter_read_upgrade_flag_master | 全局 | inverter.h:2048 | 主控升级进行中标志。 |
inverter_read_upgrade_percent_master | 全局 | inverter.h:2049 | 主控升级进度(%)。 |
inverter_read_upgrade_flag_slave | 全局 | inverter.h:2050 | 从机升级进行中标志。 |
inverter_read_upgrade_percent_slave | 全局 | inverter.h:2051 | 从机升级进度(%)。 |
inverter_read_upgrade_flag_arm | 全局 | inverter.h:2052 | ARM 升级进行中标志。 |
inverter_read_upgrade_percent_arm | 全局 | inverter.h:2053 | ARM 升级进度(%)。 |
inverter_read_comm_flag | 全局 | inverter.h:2055 | 通信是否正常(u8_inverter_comm_lost_flag 取反)。 |
inverter_read_backup_flag | 全局 | inverter.h:2056 | 备电口是否使能。 |
inverter_set_isolation_limit_value | 全局 | inverter.h:2058 | 设置绝缘阻抗门限值(1kΩ)。 |
inverter_get_isolation_limit_value | 全局 | inverter.h:2059 | 读绝缘阻抗门限值。 |
inverter_get_bat_breaker_statuse | 全局 | inverter.h:2060 | 电池侧空开状态(函数名 statuse 拼写错误)。 |
inverter_power_none | 全局 | inverter.h:2062 | 清启停命令(不做动作)。 |
inverter_power_on | 全局 | inverter.h:2063 | 下发启机命令(注释"启机")。 |
inverter_power_off | 全局 | inverter.h:2064 | 下发停机命令(注释"停机")。 |
inverter_startup | 全局 | inverter.h:2065 | 开机;与 power_on 的区别是 Bypass 继电器也一并受控。 |
inverter_shutdown | 全局 | inverter.h:2066 | 关机。 |
inverter_get_shutdown_sta | 全局 | inverter.h:2067 | 读关机状态。 |
inverter_reset | 全局 | inverter.h:2068 | 下发复位命令(厂商驱动消费后置 FALSE)。 |
inverter_clearing_fault | 全局 | inverter.h:2069 | 下发故障清除命令。 |
inverter_mpptscan_start | 全局 | inverter.h:2070 | 启动 MPPT 扫描。 |
inverter_energy_clear | 全局 | inverter.h:2071 | 清除电量累计。 |
inverter_reset_dsp_eeprom | 全局 | inverter.h:2072 | 复位 DSP EEPROM。 |
inverter_get_start_stop_value | 全局 | inverter.h:2073 | 读启停命令值。 |
inverter_set_three_unbalance_mode | 全局 | inverter.h:2075 | 设置三相不平衡输出使能。 |
inverter_get_three_unbalance_mode | 全局 | inverter.h:2076 | 读三相不平衡输出使能。 |
inverter_set_micro_grid_chg_soc | 全局 | inverter.h:2078 | 设置离网/微网充电目标 SOC。 |
inverter_read_micro_grid_chg_soc | 全局 | inverter.h:2079 | 读离网/微网充电目标 SOC。 |
inverter_set_igfollow_mode | 全局 | inverter.h:2081 | 设置 IG(发电机/市电跟随)模式使能。 |
inverter_get_igfollow_mode | 全局 | inverter.h:2082 | 读 IG 跟随模式使能。 |
inverter_read_safety | 全局 | inverter.h:2084 | 读安规码(GRID_REGULATION_E)。 |
inverter_write_safety | 全局 | inverter.h:2085 | 写安规码。 |
inverter_read_safesub | 全局 | inverter.h:2086 | 读子安规码(GRID_SAFESUB_E)。 |
inverter_write_safesub | 全局 | inverter.h:2087 | 写子安规码。 |
inverter_set_volt_watt_mode | 全局 | inverter.h:2089 | 设置 Volt-Watt 模式位。 |
inverter_set_safty_mode | 全局 | inverter.h:2090 | 整体写 SAFTY_MODE_ENABLE_U(u16 位图)。 |
inverter_set_starting_slope_en | 全局 | inverter.h:2091 | 启机斜率加载使能。 |
inverter_set_rev_machine_rate | 全局 | inverter.h:2092 | 重连并网缓升速率(0.1%Pn/min)。 |
inverter_set_regulation_rate | 全局 | inverter.h:2093 | 首次并网缓升速率(0.1%Pn/min)。 |
inverter_set_regulation_rate_enable | 全局 | inverter.h:2094 | 并网缓升速率使能。 |
inverter_set_pf_value | 全局 | inverter.h:2095 | 设置固定功率因数(0.01 精度)。 |
inverter_set_fix_reactpower_value | 全局 | inverter.h:2096 | 设置固定无功功率值。 |
inverter_set_power_change_slope_limit | 全局 | inverter.h:2097 | 功率变化斜率限值。 |
inverter_set_grid_waiting_time | 全局 | inverter.h:2098 | 首次并网等待时间(1S),来自 LCD 设置。 |
inverter_set_reconnect_delay_time | 全局 | inverter.h:2099 | 并网重连延时(1S),来自 LCD 设置。 |
inverter_set_n_n_short | 全局 | inverter.h:2100 | N-N 短接检测设置(LCD)。 |
inverter_read_n_n_short | 全局 | inverter.h:2101 | 读 N-N 短接状态。 |
inverter_set_n_pe_short_enable | 全局 | inverter.h:2102 | N-PE 短接检测使能(LCD)。 |
inverter_set_gfci_detect_enable | 全局 | inverter.h:2103 | GFCI 漏电流检测使能(LCD)。 |
inverter_set_gfci_30mA_pro_threshold | 全局 | inverter.h:2104 | GFCI 30mA 保护门限(1mA)。 |
inverter_set_gfci_60mA_pro_threshold | 全局 | inverter.h:2105 | GFCI 60mA 保护门限(1mA)。 |
inverter_set_gfci_150mA_pro_threshold | 全局 | inverter.h:2106 | GFCI 150mA 保护门限(1mA)。 |
inverter_set_gfci_300mA_pro_threshold | 全局 | inverter.h:2107 | GFCI 300mA 保护门限(1mA)。 |
inverter_set_island_detect_enable | 全局 | inverter.h:2108 | 孤岛检测使能。 |
inverter_set_ln_reserve_pro_enable | 全局 | inverter.h:2109 | LN 反接保护使能。 |
inverter_set_freq_change_pro_threshold | 全局 | inverter.h:2110 | 频率变化率(df/dt)保护阈值(0.01Hz)。 |
inverter_set_freq_change_pro_time | 全局 | inverter.h:2111 | 频率变化率保护时间(0.01S)。 |
inverter_set_iso_pro_enable | 全局 | inverter.h:2112 | ISO 绝缘阻抗保护使能。 |
inverter_set_iso_pro_threshold | 全局 | inverter.h:2113 | ISO 保护门限(1kΩ)。 |
inverter_set_dci_pro_enable | 全局 | inverter.h:2114 | DCI 直流分量保护使能。 |
inverter_set_dci_pro_threshold | 全局 | inverter.h:2115 | DCI 保护门限(1mA)。 |
inverter_set_dci_pro_time | 全局 | inverter.h:2116 | DCI 保护时间(0.01S)。 |
inverter_set_afci_detect_enable | 全局 | inverter.h:2117 | AFCI 电弧检测使能。 |
inverter_set_pv_curr_monitor_enable | 全局 | inverter.h:2118 | PV 电流监测使能。 |
inverter_set_dcv_pro_enable | 全局 | inverter.h:2119 | DCV 直流电压保护使能。 |
inverter_set_wave_detection_enable | 全局 | inverter.h:2120 | 市电波形检测使能。 |
inverter_set_battery_activation_enable | 全局 | inverter.h:2121 | 电池激活功能使能。 |
inverter_set_fast_wave_detection_enable | 全局 | inverter.h:2122 | 快速波形检测使能。 |
inverter_set_ups_volt_pro_enable | 全局 | inverter.h:2123 | UPS 口过压保护使能。 |
inverter_set_pe_short_enable | 全局 | inverter.h:2124 | PE(地线)短接使能。 |
inverter_set_ovp_down_load_start | 全局 | inverter.h:2126 | 过压降载起始点。 |
inverter_set_ovp_down_load_end | 全局 | inverter.h:2127 | 过压降载终止点。 |
inverter_set_grid_ovp1_value | 全局 | inverter.h:2128 | 一阶过压保护点(0.1V)。 |
inverter_set_grid_ovp1_time | 全局 | inverter.h:2129 | 一阶过压保护时间(0.01S)。 |
inverter_set_grid_ovp2_value | 全局 | inverter.h:2130 | 二阶过压保护点(0.1V)。 |
inverter_set_grid_ovp2_time | 全局 | inverter.h:2131 | 二阶过压保护时间(0.01S)。 |
inverter_set_grid_ovp3_value | 全局 | inverter.h:2132 | 三阶过压保护点(0.1V)。 |
inverter_set_grid_ovp3_time | 全局 | inverter.h:2133 | 三阶过压保护时间(0.01S)。 |
inverter_set_grid_ovp10min_value | 全局 | inverter.h:2134 | 十分钟过压保护点(0.1V)。 |
inverter_set_grid_ovp10min_time | 全局 | inverter.h:2135 | 十分钟过压保护时间(1S)。 |
inverter_set_grid_uvp1_value | 全局 | inverter.h:2136 | 一阶欠压保护点(0.1V)。 |
inverter_set_grid_uvp1_time | 全局 | inverter.h:2137 | 一阶欠压保护时间(0.01S)。 |
inverter_set_grid_uvp2_value | 全局 | inverter.h:2138 | 二阶欠压保护点(0.1V)。 |
inverter_set_grid_uvp2_time | 全局 | inverter.h:2139 | 二阶欠压保护时间(0.01S)。 |
inverter_set_grid_uvp3_value | 全局 | inverter.h:2140 | 三阶欠压保护点(0.1V)。 |
inverter_set_grid_uvp3_time | 全局 | inverter.h:2141 | 三阶欠压保护时间(0.01S)。 |
inverter_set_grid_ofp1_value | 全局 | inverter.h:2142 | 一阶过频保护点(0.01Hz)。 |
inverter_set_grid_ofp1_time | 全局 | inverter.h:2143 | 一阶过频保护时间(0.01S)。 |
inverter_set_grid_ofp2_value | 全局 | inverter.h:2144 | 二阶过频保护点(0.01Hz)。 |
inverter_set_grid_ofp2_time | 全局 | inverter.h:2145 | 二阶过频保护时间(0.01S)。 |
inverter_set_grid_ofp3_value | 全局 | inverter.h:2146 | 三阶过频保护点(0.01Hz)。 |
inverter_set_grid_ofp3_time | 全局 | inverter.h:2147 | 三阶过频保护时间(0.01S)。 |
inverter_set_grid_ufp1_value | 全局 | inverter.h:2148 | 一阶欠频保护点(0.01Hz)。 |
inverter_set_grid_ufp1_time | 全局 | inverter.h:2149 | 一阶欠频保护时间(0.01S)。 |
inverter_set_grid_ufp2_value | 全局 | inverter.h:2150 | 二阶欠频保护点(0.01Hz)。 |
inverter_set_grid_ufp2_time | 全局 | inverter.h:2151 | 二阶欠频保护时间(0.01S)。 |
inverter_set_grid_ufp3_value | 全局 | inverter.h:2152 | 三阶欠频保护点(0.01Hz)。 |
inverter_set_grid_ufp3_time | 全局 | inverter.h:2153 | 三阶欠频保护时间(0.01S)。 |
inverter_set_ovp_restore | 全局 | inverter.h:2154 | 过压恢复点(0.1V)。 |
inverter_set_uvp_restore | 全局 | inverter.h:2155 | 欠压恢复点(0.1V)。 |
inverter_set_ofp_restore | 全局 | inverter.h:2156 | 过频恢复点(0.01Hz)。 |
inverter_set_ufp_restore | 全局 | inverter.h:2157 | 欠频恢复点(0.01Hz)。 |
inverter_set_reactive_control_percent | 全局 | inverter.h:2158 | 无功功率控制百分比(1%)。 |
inverter_set_p_v_mode_v1 | 全局 | inverter.h:2159 | P(U) 模式点 1 电压(0.1%Un)。 |
inverter_set_p_v_mode_p1 | 全局 | inverter.h:2160 | P(U) 模式点 1 功率(0.1%Pn)。 |
inverter_set_p_v_mode_v2 | 全局 | inverter.h:2161 | P(U) 模式点 2 电压(0.1%Un)。 |
inverter_set_p_v_mode_p2 | 全局 | inverter.h:2162 | P(U) 模式点 2 功率(0.1%Pn)。 |
inverter_set_p_v_mode_v3 | 全局 | inverter.h:2163 | P(U) 模式点 3 电压(0.1%Un)。 |
inverter_set_p_v_mode_p3 | 全局 | inverter.h:2164 | P(U) 模式点 3 功率(0.1%Pn)。 |
inverter_set_p_v_mode_v4 | 全局 | inverter.h:2165 | P(U) 模式点 4 电压(0.1%Un)。 |
inverter_set_p_v_mode_p4 | 全局 | inverter.h:2166 | P(U) 模式点 4 功率(0.1%Pn)。 |
inverter_read_p_v_mode_v3 | 全局 | inverter.h:2167 | 回读 P(U) 模式点 3 电压。 |
inverter_read_p_v_mode_v4 | 全局 | inverter.h:2168 | 回读 P(U) 模式点 4 电压。 |
inverter_set_p_v_mode_trigger_voltage | 全局 | inverter.h:2169 | P(U) 模式触发电压。 |
inverter_set_p_v_mode_down_load_flag | 全局 | inverter.h:2170 | P(U)/电网电压降载方式使能。 |
inverter_set_p_v_mode_response_time | 全局 | inverter.h:2171 | P(U) 模式响应时间(0.1s)。 |
inverter_set_q_v_mode_v1 | 全局 | inverter.h:2172 | Q(U) 模式点 1 电压(0.1%Un)。 |
inverter_set_q_v_mode_q1 | 全局 | inverter.h:2173 | Q(U) 模式点 1 无功(0.1%Qn)。 |
inverter_set_q_v_mode_v2 | 全局 | inverter.h:2174 | Q(U) 模式点 2 电压(0.1%Un)。 |
inverter_set_q_v_mode_q2 | 全局 | inverter.h:2175 | Q(U) 模式点 2 无功(0.1%Qn)。 |
inverter_set_q_v_mode_v3 | 全局 | inverter.h:2176 | Q(U) 模式点 3 电压(0.1%Un)。 |
inverter_set_q_v_mode_q3 | 全局 | inverter.h:2177 | Q(U) 模式点 3 无功(0.1%Qn)。 |
inverter_set_q_v_mode_v4 | 全局 | inverter.h:2178 | Q(U) 模式点 4 电压(0.1%Un)。 |
inverter_set_q_v_mode_q4 | 全局 | inverter.h:2179 | Q(U) 模式点 4 无功(0.1%Qn)。 |
inverter_set_q_v_mode_pin | 全局 | inverter.h:2180 | Q(U) 模式 lock-in 功率点(0.1%Pn)。 |
inverter_set_q_v_mode_pout | 全局 | inverter.h:2181 | Q(U) 模式 lock-out 功率点(0.1%Pn)。 |
inverter_set_q_v_mode_k | 全局 | inverter.h:2182 | Q(U) 模式 K 系数(0.1)。 |
inverter_set_q_v_mode_response_time | 全局 | inverter.h:2183 | Q(U) 模式无功响应时间(0.1s)。 |
inverter_set_s_pf_mode_p1 | 全局 | inverter.h:2184 | S-PF 模式有功点 1(1%)。 |
inverter_set_s_pf_mode_pf1 | 全局 | inverter.h:2185 | S-PF 模式功率因数点 1(1%)。 |
inverter_set_s_pf_mode_p2 | 全局 | inverter.h:2186 | S-PF 模式有功点 2(1%)。 |
inverter_set_s_pf_mode_pf2 | 全局 | inverter.h:2187 | S-PF 模式功率因数点 2(1%)。 |
inverter_set_s_pf_mode_p3 | 全局 | inverter.h:2188 | S-PF 模式有功点 3(1%)。 |
inverter_set_s_pf_mode_pf3 | 全局 | inverter.h:2189 | S-PF 模式功率因数点 3(1%)。 |
inverter_set_s_pf_mode_pin | 全局 | inverter.h:2190 | S-PF 模式触发电压(0.1%)。 |
inverter_set_s_pf_mode_pout | 全局 | inverter.h:2191 | S-PF 模式退出电压(0.1%)。 |
inverter_set_p_f_mode_down_load_flag | 全局 | inverter.h:2192 | 电网频率降载使能。 |
inverter_set_p_pf_mode_p1 | 全局 | inverter.h:2193 | cosφ(P) 模式有功点 1(1%)。 |
inverter_set_p_pf_mode_pf1 | 全局 | inverter.h:2194 | cosφ(P) 模式功率因数点 1(0.1%)。 |
inverter_set_p_pf_mode_p2 | 全局 | inverter.h:2195 | cosφ(P) 模式有功点 2(1%)。 |
inverter_set_p_pf_mode_pf2 | 全局 | inverter.h:2196 | cosφ(P) 模式功率因数点 2(0.1%)。 |
inverter_set_p_pf_mode_p3 | 全局 | inverter.h:2197 | cosφ(P) 模式有功点 3(1%)。 |
inverter_set_p_pf_mode_pf3 | 全局 | inverter.h:2198 | cosφ(P) 模式功率因数点 3(0.1%)。 |
inverter_set_p_pf_mode_p4 | 全局 | inverter.h:2199 | cosφ(P) 模式有功点 4(1%)。 |
inverter_set_p_pf_mode_pf4 | 全局 | inverter.h:2200 | cosφ(P) 模式功率因数点 4(0.1%)。 |
inverter_set_p_pf_mode_p5 | 全局 | inverter.h:2201 | cosφ(P) 模式有功点 5(1%)。 |
inverter_set_p_pf_mode_pf5 | 全局 | inverter.h:2202 | cosφ(P) 模式功率因数点 5(0.1%)。 |
inverter_set_p_f_mode | 全局 | inverter.h:2203 | P-F 模式选择(1 线性 / 2 滞回)。 |
inverter_set_p_f_over_freq_derating_rate | 全局 | inverter.h:2204 | 过频降载速率(0.1%),LCD 可设。 |
inverter_set_p_f_under_freq_derating_rate | 全局 | inverter.h:2205 | 欠频降载速率(0.1%),LCD 可设。 |
inverter_set_p_f_trigger_over_freq_delay | 全局 | inverter.h:2206 | 过频降载触发延时(0.01S)。 |
inverter_set_p_f_trigger_under_freq_delay | 全局 | inverter.h:2207 | 欠频降载触发延时(0.01S)。 |
inverter_set_p_f_exit_over_freq_delay | 全局 | inverter.h:2208 | 过频降载退出延时(0.01S)。 |
inverter_set_p_f_exit_under_freq_delay | 全局 | inverter.h:2209 | 欠频降载退出延时(0.01S)。 |
inverter_set_p_f_exit_over_freq_f1 | 全局 | inverter.h:2210 | 过频降载退出频率 F1(0.01Hz)。 |
inverter_set_p_f_trigger_over_freq_f2 | 全局 | inverter.h:2211 | 过频降载触发频率 F2(0.01Hz)。 |
inverter_set_p_f_cut_off_over_freq_f3 | 全局 | inverter.h:2212 | 过频降载截止频率 F3(0.01Hz)。 |
inverter_set_p_f_exit_under_freq_f3 | 全局 | inverter.h:2213 | 欠频降载退出频率 F3(0.01Hz)。 |
inverter_set_p_f_trigger_under_freq_f2 | 全局 | inverter.h:2214 | 欠频降载触发频率 F2(0.01Hz)。 |
inverter_set_p_f_cut_off_under_freq_f1 | 全局 | inverter.h:2215 | 欠频降载截止频率 F1(0.01Hz)。 |
inverter_set_p_f_trigger_over_freq_pm | 全局 | inverter.h:2216 | 过频降载频率恢复后加载到 Pm 的斜率。 |
inverter_set_under_freq_mode | 全局 | inverter.h:2217 | 欠频降载功能使能位。 |
inverter_set_ac_out_bat_power | 全局 | inverter.h:2218 | 奥地利列明的电池充放电功率。 |
inverter_set_ofp_preference_mode | 全局 | inverter.h:2219 | 过频降载参考功率指令。 |
inverter_set_p_f_trigger_under_freq_pn | 全局 | inverter.h:2220 | 欠频降载频率恢复后加载到 Pn 的斜率。 |
inverter_set_ofp_down_load_zero_crossing_freq | 全局 | inverter.h:2221 | 过频降载过零点频率(0.01Hz)。 |
inverter_set_ufp_down_load_zero_crossing_freq | 全局 | inverter.h:2222 | 欠频降载过零点频率(0.01Hz)。 |
inverter_set_high_low_cross_enable | 全局 | inverter.h:2223 | 高低电压穿越(HVRT/LVRT)使能。 |
inverter_set_actpower_control_enable | 全局 | inverter.h:2224 | 有功功率控制使能。 |
inverter_set_reactpower_control_enable | 全局 | inverter.h:2225 | 无功功率控制使能。 |
inverter_get_reactpower_control_mode | 全局 | inverter.h:2226 | 获取当前无功控制模式(INVERTER_REACTPOWER_MODE_E)。 |
inverter_set_zero_current_mode_enable | 全局 | inverter.h:2227 | 零电流模式使能。 |
inverter_set_zero_current_voltage_value | 全局 | inverter.h:2228 | 零电流模式电压值。 |
inverter_set_low_cross_voltage_value | 全局 | inverter.h:2229 | 低压穿越电压保护点(0.1V)。 |
inverter_set_high_cross_voltage_value | 全局 | inverter.h:2230 | 高压穿越电压保护点(0.1V)。 |
inverter_set_pe_loss_check_flag | 全局 | inverter.h:2231 | 地线(PE)检测标志。 |
inverter_set_mppt_percentage | 全局 | inverter.h:2233 | MPPT 限功率百分比(0.01)。 |
set_inverter_safty_test_flag | 全局 | inverter.h:2234 | 置安规自检启动标志(START_SELF_INSPECTION)。 |
get_inverter_safty_test_info_send_server_flag | 全局 | inverter.h:2235 | 读"自检数据待发服务器"标记。 |
set_inverter_safty_test_info_send_server_flag | 全局 | inverter.h:2236 | 置/清"自检数据已发服务器"标记(单次有效)。 |
inverter_set_islanding_check_enable | 全局 | inverter.h:2237 | 孤岛检测(islanding check)使能。 |
set_inverter_safty_test_info_send_app_flag | 全局 | inverter.h:2238 | 置/清"自检数据发 APP"标记(一直有效)。 |
get_inverter_safty_test_info_send_app_flag | 全局 | inverter.h:2239 | 读"自检数据发 APP"标记。 |
inverter_set_bypass_flag | 全局 | inverter.h:2240 | 设置旁路(Bypass)使能。 |
inverter_set_phase_negation | 全局 | inverter.h:2241 | 设置相序取反使能。 |
inverter_read_upgrade_file_offset | 全局 | inverter.h:2242 | 读主控升级文件偏移(断点续传用)。 |
inverter_read_upgrade_file_offset_arm | 全局 | inverter.h:2243 | 读 ARM 升级文件偏移。 |
inverter_set_operation_mode | 全局 | inverter.h:2244 | 设置逆变器操作模式 t_run_info.u8_inv_operation_mode。 |
inverter_support_low_volt_bms_restart | 全局 | inverter.h:2245 | 机型是否支持低压 BMS 重启。 |
inverter_get_offset_meter_power | 全局 | inverter.h:2246 | 电表功率偏置(s32)。 |
inverter_get_backup_freq | 全局 | inverter.h:2247 | 读备电口频率。 |
inverter_get_backup_freq_basic | 全局 | inverter.h:2248 | 读备电口基础(额定)频率。 |
inverter_get_ac_machine_min_charg_power | 全局 | inverter.h:2249 | AC 机型最小充电功率(W)。 |
get_14a_enwg_bat_min_power | 全局 | inverter.h:2250 | 德国 EnWG §14a 场景下的电池最小功率。 |
get_dma_data_debug_flag | 全局 | inverter.h:2251 | DMA 收发数据调试打印标志。 |
inverter_set_afci_self_check_clear | 全局 | inverter.h:2253 | 清 AFCI 自检结果。 |
inverter_get_special_control_inv_type | 全局 | inverter.h:2254 | 需特殊处理的机型标识(当前仅盛能杰 M5 返回 SNJ_M5_SPECIAL_HANDLE,inverter.c:7985)。 |
get_inverter_type_category | 全局 | inverter.h:2255 | 返回机型大类 INVERTER_CATEGORY_E(贝瓦单相/三相/非贝瓦,inverter.c:8003)。 |
inverter_set_dc_double_charge_power | 全局 | inverter.h:2256 | DC 允许二倍功率充电使能。 |
inverter_set_italy_anti_backflow | 全局 | inverter.h:2257 | 意大利防逆流使能。 |
inverter_read_safety_is_AS4777 | 全局 | inverter.h:2258 | 判定给定安规码是否属于 AS4777 族(含各州子安规,inverter.c:4315)。 |
get_risk_of_system_installation_plan | 全局 | inverter.h:2259 | 系统是否存在电池适配方案错误风险(盛能杰 M10 返回 TRUE,inverter.c:8066)。 |
inverter_set_dnsp_regulation_rate | 全局 | inverter.h:2260 | 按 DNSP 要求换算并下发首次并网/重连斜率(inverter.c:8087)。 |
inverter_get_dc_disturbance_count | 全局 | inverter.h:2261 | 直流扰动次数掩码值(盛能杰 M10 返回 1 << (count-1),inverter.c:2748)。 |
4. 核心逻辑解析
本文件是头文件,其"逻辑"体现在类型契约、编译开关与量纲约定三件事上;下面按这三点分开讲。
4.1 编译期厂商开关与两套"type"的区分
文件里存在互不相干的两套类型标识:
- 编译期的
INVERTER_TYPE(inverter.h:172):只参与预处理,用来裁剪代码体积。6 家厂商驱动的每个函数体、logic/dc_control.c全文、logic/ac_control.c全文都用#if ((INVERTER_TYPE == INVERTER_MAX) || (INVERTER_TYPE == XXX_TYPE))或#ifdef INV_DC_CTRL/INV_AC_CTRL包裹(logic/logic.c:554-567、logic/ac_control.c:21、logic/ac_control.h:56)。 - 运行期的厂商码(
KELONG_TYPE…INOVANCE_TYPE)存在g_t_inv_info.t_config_data.u8_inv_model里,由set_inverter_type()写入、get_inverter_type()读出(inverter.c:1328-1346),子机型码存在u8_inv_model_sub(inverter.c:1357-1374)。两者还交叉校验:inverter.c:1071用(get_inverter_type() == INVERTER_NULL) || (INVERTER_TYPE == INVERTER_NULL) || ((get_inverter_type() != INVERTER_TYPE) && (INVERTER_TYPE != INVERTER_MAX))判定"机型与固件不匹配"并置故障位。
INV_DC_CTRL / INV_AC_CTRL 是控制架构分岔(inverter.h:175-181):科华/盛能杰/锦浪/固德威按 DC 侧下发充放电功率限值,沃太/汇川按 AC 侧下发。logic/logic.c:1744-1809 等处成对出现 #ifdef INV_DC_CTRL / #ifdef INV_AC_CTRL,说明同一套调度算法要分别适配两种控制口。
4.2 机型识别的三级索引
从"硬件是什么"到"用哪个型号字符串上报"是三级映射,全部在本文件的宏表里固化:
u8_inv_model(厂商,inverter.h:163-170)u8_inv_model_sub(子机型,SUB_S3~SUB_B10,inverter.h:305-338)- 型号字符串宏(
TYPE_*/ OEM 专属串,inverter.h:38-150)
映射体在 inverter.c:inverter_read_inv_type()(inverter.c:1656 起)按厂商+子机型返回 TYPE_SET_S5、TYPE_GINLONG_T10 等;inverter_read_system_modle()(inverter.c:1386 起)在此基础上再看 g_system_base_info.u16_oem_flag,命中贴牌则返回 ZOE_OEM_TYPE_SEEDS_S5、BYTE_WATT_OEM_TYPE_SEEDS_T10 等(inverter.h:132-150)。子机型码不是静态配置:厂商驱动解析到设备上报的型号后回写,例如 ginlong_comm_usart.c:1222-1257 按型号串分支调用 set_inverter_sub(SUB_T10/S5/B5/S6/S3_6/S4_6),kelong_comm.c:236 置 SUB_S6,set_comm_usart_s5.c:1915-1925 置 SUB_M10/S5_II/S5。
型号字符串的消费方:升级包匹配与上报(midware/interface/modbus/modbus.c:8714-8722、net/ems.c)、SunSpec 模型名(midware/interface/modbus/sunspec_business.c:1055)、LCD 型号显示(hmi/ui/ui_Information.c:44)。
4.3 配置表的 Flash 持久化契约
INVERTER_CONFIG_TAB_T(inverter.h:435-505)的设计约束由两条信息锁定:
- 结构体首字段
u16_head存魔数CONFIG_INFO_HEAD = 0xAA55(data/system_config/system_config.h:20),末字段u16_crc_code存 Modbus CRC16。 STATIC_ASSERT(ASSERT_FLASH_SECTOR_SIZE % sizeof(INVERTER_CONFIG_TAB_T) == 0)(inverter.h:507),ASSERT_FLASH_SECTOR_SIZE = FLASH_SECTOR_SIZE = 4*1024(midware/debug/debug.h:19、hardware/flash/flash.h:27)。按#pragma pack(1)逐字段累加(含u8_reserve[172])总长为 256 字节,4096/256 = 16,正好把 Flash 扇区均分成 16 个备份槽,这是断电续传(FEE)方案的前提。
读写流程:inverter_config_info_init() 先把旧 u8_inv_model 暂存、清零整表、写 u16_head 与 VERSION_INV_HARD、默认安规 AS4777_2、算 CRC、再调 feeprom_init_write(..., INVERTER_CONFIG_PAGE, 256),失败重试 3 次并上报 EEPROM 写故障标志(data/system_config/system_config.c:557-592)。反向的 inverter_config_info_restore() 同样读 3 次、校验 CRC 后再 memcpy 到 g_t_inv_info.t_config_data,失败则置读故障标志(data/system_config/system_config.c:1563-1599)。INVERTER_CONFIG_PAGE 为 4075(data/system_config/system_config.h:27)。
4.4 安规参数体系与量纲约定
INVERTER_SAFTY_INFO_T(inverter.h:551-758)是"电网侧行为"的完整字典,可分成 6 族:
| 族 | 代表字段 | 用途 |
|---|---|---|
| 电网保护点 | u16_ovp1_value/time … u16_ufp3_value/time、u16_ovp10min_*、u16_*_restore | 三阶过/欠压、过/欠频保护与恢复点 |
| 有功-电压曲线 P(U) | u16_p_v_mode_v1..v4/p1..p4、u16_p_v_mode_trigger_voltage、u8_p_v_mode_down_load_enable | 过压降载 |
| 贝瓦专用 P(U) 点 | s16_ov_p_v_mode_v1..v4、s16_uv_p_v_mode_v1..v4 | 点 1/2 与沃太点 3/4 互换,见源码注释 inverter.h:593-602 |
| 无功曲线 Q(U) | u16_q_v_mode_v1..v4/q1..q4、pin、pout、k、response_time | 电压-无功 |
| 频率降载 P-F | u16_p_f_*(过频)与 u16_p_f_*under*(欠频)两套三元组 F1/F2/F3 + 速率 + 触发/退出延时 + 恢复斜率 | 过/欠频降载线性或滞回 |
| PF 曲线 | u8/s8_s_pf_mode_*(S-PF 3 点)、u16/s16_p_pf_mode_*(cosφ(P) 5 点) | 有功-功率因数 |
量纲约定(源码注释即规范):电压 0.1V 或 0.1%Un,频率 0.01Hz,时间 0.01S(10 分钟过压点用 1S),功率 0.1%Pn/1%Pn,无功 0.1%Qn,功率因数 0.01/0.1%,绝缘 1kΩ,漏电流 1mA。所有 inverter_set_* 原型(inverter.h:2058-2261)只做"值透传",量纲换算在各厂商驱动的组帧函数里。
安规模式位以 SAFTY_MODE_ENABLE_U(inverter.h:418-433)统一表达 9 种模式(Volt-Watt / Volt-Var / Volt-Freq / PF-Curve / Volt-Watt 充电 / 无功 / 固定 PF / 固定无功 / P-PF),inverter_set_safty_mode() 一次性写整个 u16。
4.5 故障/告警位域体系
5 个"状态字"全部采用同一模式:u64 整体值 + u8 byteData[8] + 8 字节位域结构体(inverter.h:960-1047、1134-1221、1260-1347、1433-1520、1532-1619),另有 1 个 32 位的接地故障字(inverter.h:1621-1669)。
- 位序与枚举严格一一对应:
INV_FAULT_E64 项(inverter.h:890-957)对应INVERTER_FAULT_U.bit的 64 个成员;INV_FAULT_EXTEND1_E64 项(inverter.h:1049-1131)同理;注释// 最多64个bit反复出现(inverter.h:956、1130、1257)。枚举顺序被打乱就会静默错位,这是本文件最脆弱的约束。 INV_FAULT_EXTEND2_E只用到 25 位,其余 39 位在联合体里以bit25~bit63占位(inverter.h:1299-1345);INV_WARNING_EXTEND1_E只用了 5 位(inverter.h:1525-1529)。- 消费方式:
data/fault_warn_log/fault_warn_log.c用byteData[]+BIT_VALUE/BIT_IS_SET遍历位(fault_warn_log.c:835-837、852-935、939-983、987-1070、1074-1098)并把变化写入故障日志;u64_all用于整体比较是否变化。 - 提供
u64整体读与u8存在性判断两类接口:inverter_read_fault_code*()/inverter_read_warning_code()/inverter_read_ground_fault_code()与inverter_read_fault_code_flag()/inverter_read_grid_fault_flag()(inverter.h:2016-2025)。
4.6 运行表 / 控制命令 / 控制参数的"写-清"语义
INVERTER_TABLE_T(inverter.h:1901-1915)内三张表有明确分工,读写方向固定:
t_run_info(inverter.h:1671-1842):厂商驱动单向写,上层只读。通信丢失时由 staticinverter_lost_handle()(inverter.c:115-198)批量清零实时量,例如 PV 电压从inverter.c:132起逐字段置 0;随后置u8_inverter_comm_lost_flag并上报系统故障位(inverter.c:119-126)。t_control_cmd(inverter.h:1844-1857):上层写、驱动消费后自清的一次性命令。例:u8_reset被alphaess_comm_usart.c:3809、ginlong_comm_usart.c:4843/4850、goodwe_comm.c:2384、inovance_comm_usart.c:411处理后置 FALSE;u8_start_stop被反复与设备实际状态比较后下发(ginlong_comm_usart.c:5156-5162)。t_control_parameter(inverter.h:1859-1872):带"数据就绪"标志的载荷表。5 个*_data_flag表示对应数据(电池加热、CSIP 澳洲数据、加热命令/截止电压/继电器状态)已由上层填好,驱动取走后负责清标志。
4.7 与 uCOS-II 的配合
本文件声明 3 个任务入口(inverter.h:1933-1935),全部在 user/main.c 用 OSTaskCreateExt 静态创建:
| 任务 | 创建处 | 使用栈与优先级宏 |
|---|---|---|
task_inverter | user/main.c:189 | TASK_INVERTER_STK / TASK_INVERTER_PRIO |
task_inverter_can | user/main.c:244 | TASK_INVERTER_CAN_STK / TASK_INVERTER_CAN_PRIO |
task_parallel_sci | user/main.c:299 | TASK_PARALLEL_SCI_STK / TASK_PARALLEL_SCI_PRIO(命名串误写成 "task_modbus_rtu") |
任务节拍由 inverter.h:1954-1957 的 4 个周期函数统一给出(get_inv_calculation_interval、get_inv_power_calculation_time、get_dispatch_calculation_time、get_generator_calculation_time),也就是"调度周期按机型可变"。注意:g_t_inv_info 是全工程共享的裸全局变量,本文件及其实现 inverter.c 中没有任何信号量/互斥量/消息邮箱(在 midware/inverter/*.c 中检索 OSSemPend/OSSemPost/Mutex/OSMbox* 无结果),跨任务一致性完全依赖 uCOS-II 优先级抢占与字段级"写者唯一"约定。
4.8 关键全局变量的读写面
g_t_inv_info(inverter.c:39定义):t_config_data被 26 个.c文件读写,最密集的是厂商驱动(ginlong_comm_usart.c114 处、set_comm_usart_s5.c97 处、hmi/key.c83 处、inverter.c75 处、alphaess_comm_usart.c69 处、kelong_comm.c62 处、inovance_comm_usart.c44 处、set_comm_can.c36 处),其次是net/server.c(48 处)与net/ems.c(21 处)——即"云端/APP 改配置 → 直接落在同一张表"。senergys_query_inv_register(set_comm_usart_s5.c:52定义):盛能杰 S5 的 Modbus 寄存器透传调试通道。net/server.c:1500-1537逐字节写u8_start_en/u8_modbus_flag/u8_send_data[0..7]并置u8_read_flag=1;set_comm_usart_s5.c:6015-6113在 1(标准 Modbus)/2(非标准)两种拼帧方式间选择,回填u8_rend_data[0..7];net/ems.c:802-815轮询u8_read_flag,累计 5 次后清零并把收发数据打印/上报。
5. 对外接口
5.1 本文件导出
| 类别 | 内容 | 消费方 |
|---|---|---|
全局变量(extern) | INVERTER_TABLE_T g_t_inv_info(inverter.h:1929)、SENERGYS5_QUERY_INV_REGISTER_T senergys_query_inv_register(inverter.h:1930) | 全工程;hmi/ 直接读 t_run_info/t_safty_info,net/、logic/ 直接读写 t_config_data,data/ 读故障字 |
| 函数原型(302 条) | 三大族:① 型号/机型/能力查询(get_inverter_type、inverter_read_inv_type、inverter_get_phase_number、get_inv_regulator_speed…);② 运行数据读取(inverter_read_*,含 PV/电网/逆变/备电/电池三端口与故障告警字);③ 参数与控制下发(inverter_set_*、inverter_power_*、inverter_startup/shutdown/reset) | 逐条清单见 §3;调用方以 hmi/ui/*、net/ems.c、net/server.c、midware/interface/*、logic/* 为主 |
| 类型定义 | INVERTER_TABLE_T、INVERTER_CONFIG_TAB_T、INVERTER_SAFTY_INFO_T、INVERTER_RUN_TABLE_T、INVERTER_SAFTY_TEST_T、5 个故障/告警联合体、SENERGYS5_QUERY_INV_REGISTER_T 及全部枚举 | 厂商驱动、data/system_config、data/resume_data、data/fault_warn_log、hmi/、logic/ |
| 宏 | 厂商/子机型/型号字符串宏、运行模式码、REGULATOR_SPEED_*、INVERTER_TYPE、INV_DC_CTRL/INV_AC_CTRL、PF_001_TO_01、DEBUG_INVERTER | 全工程条件编译与字符串比对 |
5.2 本文件调用的外部符号
| 外部符号 | 来源 | 用途 |
|---|---|---|
u8/u16/u32/s8/s16/s32/u64、TRUE/FALSE | includes.h → chip.h(GD32 标准外设库) | 全文件基础类型 |
OS_STK、OSTaskCreateExt 相关 | includes.h → UCOSII/uCOS-CONFIG/includes.h | 任务入口原型 void task_x(void *p_arg) |
PARALLEL_MAX_NUM 等并机常量/类型 | parallel.h(inverter.h:13) | 并机与主从机相关声明 |
| PV 充电器类型 | pvcharger.h(inverter.h:14) | PV 充电器(外接 PV 控制器)接口 |
STATIC_ASSERT、ASSERT_FLASH_SECTOR_SIZE | midware/debug/debug.h:16,19(经 inverter.h:15) | inverter.h:507 的编译期尺寸断言 |
FLASH_SECTOR_SIZE | hardware/flash/flash.h:27(被 debug.h 引用) | 断言右值 = 4096 |
反方向的调用(本文件声明、实现在别处)见 §3 与 §6。
6. 依赖关系
依赖(本文件 include 或使用)
includes.h(UCOSII/uCOS-CONFIG/includes.h):聚合chip.h、uCOS-II、Flash 等,是基础类型与TRUE/FALSE的唯一来源。parallel.h(midware/inverter/parallel.h):并机数量上限PARALLEL_MAX_NUM = 16等。pvcharger.h(midware/inverter/pvcharger.h)。debug.h(midware/debug/debug.h):STATIC_ASSERT与ASSERT_FLASH_SECTOR_SIZE。
被依赖(哪些文件会用到它)
共 70 个文件 #include "inverter.h",按目录分布:
| 目录 | 文件数 | 代表文件 |
|---|---|---|
midware/inverter(含各厂商子目录) | 18 | inverter.c、parallel.c、pvcharger.c、parallel_comm/parallel_sci.c、kelong/*、set/*、ginlong/*、alphaess/*、goodwe/*、inovance/* |
hmi/ui | 11 | ui_main.c、ui_status_grid.c、ui_status_solar.c、ui_status_ups.c、ui_test_report.c、ui_setting_admin_safety.c、ui_setting_admin_debug_power.c、ui_setting_user_func_grid_pq_mode_pow_fac.c、ui_ct_rate.c、ui_factory_mode.c、ui_Information.c |
logic | 8 | logic.c、dispatch.c、ac_control.c、ac_control.h、dc_control.h、generator.c、csip_aus.c、self_test.c |
midware/interface | 6 | modbus/modbus.c、modbus/sunspec_business.c、modbus/sunspec_modbus.c、dry_node/dry_node.c、drm/drm.c、interface.c |
net | 5 | ems.c、server.c、ems_download.c、upd_download.c、afci_download.c |
hmi 其它 | 5 | key.c、lcd.c、led.c、led/app_led.c、led.h |
data | 4 | system_config/system_config.c(配置表初始化/恢复/下发)、resume_data/flash/flash_data_store.c、fault_warn_log/fault_warn_log.h、data.c |
midware/meter | 3 | meter.c、ct.c、backupbox.c |
midware/bms | 3 | bms.c、alpha/battery_comm.c、alpha/battery_upgrade.c |
midware/afci | 2 | afci_comm.c、afci_upgrade.c |
midware/ethernt / midware/debug / midware/auxiliary | 3 | wireless/wireless_driver.c、debug/ate.c、auxiliary/system_aux.c |
user / system | 2 | user/main.c(三个任务入口的创建处)、system/board_init/board_init.c |
7. 备注与风险点
INVERTER_TYPE的取值与所有条件编译块自相矛盾(最需确认)。inverter.h:172定义为(INVERTER_NULL)(=0),而全工程的裁剪判据都是#if ((INVERTER_TYPE == INVERTER_MAX) || (INVERTER_TYPE == XXX_TYPE))(inverter.h:175-181及inverter.c、各厂商驱动、hmi/key.c、midware/bms/bms.c、net/ems.c的大量同类块)。按预处理字面展开,0 既不等于 7 也不等于任何厂商码,所有厂商分支与INV_DC_CTRL/INV_AC_CTRL都不会被定义,logic/dc_control.c、logic/ac_control.c、logic/logic.c中的#ifdef块会整体消失。同时inverter.c:1071把INVERTER_TYPE == INVERTER_NULL当作"机型与固件不匹配"故障条件,hmi/key.c:8956-8957明确把INVERTER_NULL排除在 LCD/按键功能之外,说明该值应视为"未配置"。若本仓库是要出整机固件,此宏应为INVERTER_MAX或具体厂商码;若确为裁剪占位,则 §3 中一半以上函数的实现会在链接期缺失。建议以实际编译产物复核。INVERTER_MAX一值两义:既作运行期合法上界(get_inverter_type()在>= INVERTER_MAX时钳位,inverter.c:1342;net/server.c:883、modbus.c:6920同样用它做写值校验),又作编译期"全厂商"哨兵。因此类型码 7 本身是非法运行值,两处语义混用容易在新增厂商时踩坑。- 故障/告警枚举与位域顺序强耦合且无编译期保护。
INV_FAULT_E(64 项)、INV_FAULT_EXTEND1_E(64 项)、INV_WARNING_E(64 项)与对应联合体bit成员的顺序必须逐位对齐(inverter.h:890-957vs960-1047;1049-1131vs1134-1221;1349-1430vs1433-1520)。在枚举中间插入一项就会让后面所有位静默错位,而消费方data/fault_warn_log/fault_warn_log.c:835-1098正是按位遍历生成日志。建议加STATIC_ASSERT或末尾*_MAX哨兵做校验。 - 无终止符的枚举:
INV_WARNING_EXTEND1_E只有 5 项、没有_MAX(对比GRID_REGULATION_E.Safety_Max、GRID_SAFESUB_E.SAFESUB_MAX、INVERTER_SUB_E.SUB_MAX),无法做取值范围校验;INV_FAULT_EXTEND2_E只用 25 位,其余位在联合体里以bit25~bit63占位(inverter.h:1299-1345),扩展时需同时改两处。 - 同一枚举承载两套语义:
INVERTER_DATA_E(inverter.h:340-354)里PV_CHANAEL1..4 = 1..4、PV_CHANAL_ALL = 5与PHASE_L1..L3 = 1..3、PHASE_ALL = 4混在一起,传给inverter_read_pv_volt(index)/inverter_read_grid_volt(index)时无法靠类型区分,4在 PV 场景是 L3、在相场景是"全部";拼写也不统一(CHANAEL/CHANAL)。 - 联合体成员名大小写不一致:
SAFTY_MODE_ENABLE_U用大写BIT(inverter.h:432),而INVERTER_SAFTY_TEST_RESULT_U、5 个故障/告警联合体都用小写bit(inverter.h:784、1046…)。写代码时写错大小写会直接编译报错还算安全,但阅读与复制粘贴极易混淆。 INVERTER_OVERALL_STATUS_E枚举内重复赋 0:INV_POWER_NONE = 0与INV_SHUTDOWN_NONE = 0(inverter.h:288、292)位于同一枚举,语义靠命名区分,任一取值无法唯一判定归属。- setter 只做透传、量纲全靠人脑:
INVERTER_SAFTY_INFO_T中功率因数有0.01(s8_set_power_factor)与0.1%(s16_p_pf_mode_pf1)两种刻度,功率有0.1%Pn与1%Pn,时间有0.01S与1S。inverter_set_*(inverter.h:2058-2261)全部只赋值不下发、不校验量纲,换算错误只能被测出来。 - 字段类型与命名/注释不一致:
u16 u16_bat_curr;实际声明为s16(inverter.h:1762,电池电流必须为负才有意义);u16 u8_pe_loss_check_flag;(inverter.h:1812)前缀与类型不一致;u16 u16_dc_max_charge_power/u16_dc_max_dischg_power注释标 1W 却用 u16(inverter.h:1688-1689,量程仅 65535W,大机型需确认);结构体成员INVERTER_SAFTY_TEST_T t_safty_tset_info[3](inverter.h:1907,tset拼写错误);函数名inverter_read_grid_rated_freqency(inverter.h:2034)、inverter_get_bat_breaker_statuse(inverter.h:2060)拼写错误。以上仅影响可读性,不影响功能,但改名会牵连大量调用点,故保留。 PF_001_TO_01(val)是带副作用的赋值宏(inverter.h:184-186):展开为逗号表达式,先对val写入再限幅。实参必须是可写左值(源码注释已写"修改,传变量"),若传入表达式会编译失败,传入带副作用的表达式(如a[i++])会重复求值。另外负值分支((val) - 5) / 10依赖 C99 的向零截断实现"四舍五入",换编译器/优化等级需复核。#pragma pack(1)作用域覆盖 1500 行且未用push/pop(inverter.h:416开、inverter.h:1916关)。作用域内所有结构体都按 1 字节对齐,INVERTER_RUN_TABLE_T这类含大量u32/s32的大表会造成非对齐访问;SENERGYS5_QUERY_INV_REGISTER_T(inverter.h:1918)反而定义在#pragma pack()之后,与前面所有结构体对齐方式不同——若将来把它并入 Flash 结构体,偏移会不一致。u8_reserve[172]是尺寸垫片(inverter.h:503):它使sizeof(INVERTER_CONFIG_TAB_T) == 256,从而满足STATIC_ASSERT(4096 % 256 == 0)(inverter.h:507),支撑"4KB 扇区均分 16 槽"的 FEE 方案。字段增删必须同步调整 reserve 并更新midware/inverter/inverter.c侧所有sizeof(INVERTER_CONFIG_TAB_T)用法;好在断言会在编译期拦住(data/system_config/system_config.c:568、1569、2549、3028)。g_t_inv_info无任何互斥保护:midware/inverter/*.c中检索不到OSSemPend/OSSemPost/OSMutex*/OSMbox*/OSQPost。而写入方至少有task_inverter、task_inverter_can、task_parallel_sci三个任务,加上net/server.c(48 处直接写t_config_data)、hmi/key.c(83 处)两个远端/本地配置入口,t_config_data的读改写与t_run_info的多字段快照都存在竞态。t_control_cmd更进一步是"一写多消费"的自清标志(如u8_reset被厂商驱动消费后置 FALSE),若 SCI 与 CAN 两条链路同时运行同一机型代码,存在命令重复下发或漏下发风险。- 未闭环/遗留代码:①
u8_tor_no_use_flag(inverter.h:752)命名直接表明废弃;② 过频降载有两套参数并存——u16_ofp_down_load_points/slope/delay_time/zero_crossing_freq(inverter.h:688-692)与新的u16_p_f_*族(inverter.h:648-674),存在写一套读另一套的隐患;③t_safty_tset_info[3]三相自检数据中 HMI 只读[0](hmi/ui/ui_test_report.c:39-110),第二、三相无消费方;④DEBUG_INVERTER恒为 0(inverter.h:18),调试打印路径无法通过配置打开。 SENERGYS5_QUERY_INV_REGISTER_T的容量与实际使用不一致:数组声明为[10],但net/server.c:1500-1537与set_comm_usart_s5.c:6015-6113都只用到[0..7];成员u8_rend_data应为read_data的笔误;u8_start_en/u8_modbus_flag语义是枚举/模式选择却以u8_前缀命名,且是纯调试透传通道(可由服务器/APP 直接构造任意 Modbus 帧),存在被滥用的风险。