/***************************************************************************** * @copyright 2024-202, . POWER SUPPLY CO., LTD. * @file logic_comm.h * @brief xxxx * @author Gary * @date 2024/09/20 * @remark 初修订 *****************************************************************************/ #ifndef __LOGIC_COMMON_H__ #define __LOGIC_COMMON_H__ #pragma once #include #include #include #include #include #include #include "bsp_rtdb.h" #include "kit_math.h" #include "kit_data.h" #include "kit_db.h" #include "../kernel/kit_log.h" #include "utextend.h" #include "logic_debug.h" #include "logic_demandctrl.h" #include "logic_peakvalley.h" #include "logic_power_distr.h" #include "logic_protected.h" #define LOGIC_SIGN_NONE 0 #define LOGIC_SIGN_MESSAGE 1 #define LOGIC_SIGN_UPLOAD 2 #define _PCS // 华三PCS目前 开关是两个点需要特殊处理 // #define OTHER ; // 系统状态 typedef enum { kState_Start, // 无 kState_Charging, // 充电 kState_Discharging, // 放电 kState_Standby, // 待机 kState_Shutdown, // 停机 kState_Fault, // 故障 kState_end } state_e; // 用于log打印 与 枚举state_e 强绑定 extern const char* workModeNames[]; // 任务 typedef enum { kTask_Start, // 无 kTask_Debug, // 调试 kTask_Peakvalley, // 削峰填谷 kTask_DemdRespond, // 需求侧相应 kTask_PowerTrace, // 负载跟踪 kTask_demandCtrl, // 需量控制 kTask_PFCtrl, // 功率因数 kTask_end } task_e; // 保护 typedef enum { kProtect_start, kProtect_backFlow, // 逆流保护 kProtect_freqAdj, // 调频保护 kProtect_demand, // 需量保护 kProtect_end } protect_e; // 下发 typedef struct { int runPeriod; // 运行周期 ms float_t power; // 目标功率 INOUT // 可配参数(未知) } demandRes_params_t; // 需求响应参数(未实现 暂放在这里) typedef struct { int runPeriod; // 运行周期 ms float_t power; // 目标功率 INOUT // 可配参数 float_t percent; // 负载跟踪百分比 (10% = 0.1) } loadTrack_params_t; // 负载跟踪参数(未实现 暂放在这里) typedef struct { peakvalley_params_t pkvly; // 削峰填谷参数 IN demandRes_params_t demand; // 需求响应参数 loadTrack_params_t loadTrack; // 负载跟踪参数 debug_params_t debug; // 调试参数 IN protect_params_t protect; // 保护参数 IN power_distr_t distr; // 功率分配参数 IN } logic_paramIn_t; typedef union { struct { unsigned int Res1 : 9; // 预留位 unsigned int debug : 1; // 调试模式 unsigned int peakValley : 1; // 削峰填谷模式 unsigned int demandRes : 1; // 需求响应模式 unsigned int loadTrack : 1; // 负载跟踪模式 unsigned int dmdCtrl : 1; // 需量控制 unsigned int pfCtrl : 1; // 功率因数控制 unsigned int Res2 : 17; // 预留位 } bits; unsigned int ParaChangeUnion; // 用于一次性访问所有位的整型变量 } SignFlags; typedef struct { work_mode_e mode; // 总工作模式 IN SignFlags ParaChangeSign; // 总参数更新标志 logic_paramIn_t task_params; // 入参数据 IN } task_params_t; // 调试函数传参结构体 /*modbus客户端信息*/ typedef struct { /*线程属性*/ pthread_t tfd; // 线程fd uint8_t exitTaskFlag; // 退出线程标记 uint8_t taskStateFlag; // 处理任务标志,0-无需处理,1-更新参数,2-参数上传 task_params_t para_delivery; // 参数传递 } logic_pthread_t; extern logic_pthread_t stlogic; // 实时库获取数据 typedef struct { uint16_t No; dev_type_e devType; uint16_t pointId; } ParamFromRTDB; // 实时库参数枚举 typedef enum { e_Logic_RTDB_start, e_Logic_totalAcPower = e_Logic_RTDB_start, // 总电表总有功功率 e_Logic_emsActivePower, // 储能测总有功功率 e_Logic_bmsSoc, // 实时每个柜子的BMS的SOC e_Logic_pcsMaxChaPower, // 最大充电功率 e_Logic_pcsMaxDiscPower, // 最大放电功率 e_Logic_nowBmsPower, // bms当前实时功率 e_Logic_nowActiveDemand, // 实时需量 e_Logic_distrPower, // 下发功率 e_Logic_pcsSwitch, // PCS开关 e_Logic_pcsState, // pcs在线状态 e_Logic_bmsState, // bms在线状态 e_Logic_emsMode, // ems运行模式 // e_Logic_emsStat, // ems运行状态 e_Logic_bsuMaxCellTemp, // BMS单体最高温度 e_Logic_bsuMinCellTemp, // BMS单体最低温度 // e_Logic_AcLiquidSwitch, // 液冷机组开关 // e_Logic_AcLiquidHeatTemp, // 液冷机组制热温度 // e_Logic_AcLiquidColdTemp, // 液冷机组制冷温度 e_Logic_RTDB_end } ParamFromRTDB_e; // 需量超阈值防护 负载预测 void logic_protect_demandCtrl(protect_params_t *charge_params); // 获取需执行的命令以及策略运行的所以参数 void logic_getRTDBParams(); /***************************************************************************** * @brief 获取RTDB参数 * @param[in] 枚举序号,参数指针,数据类型 * @return 无 *****************************************************************************/ void logic_getValue(int No, void *value, data_type_e dataType); /***************************************************************************** * @brief 写入RTDB参数 * @param[in] No 枚举序号(对应 RTDBtable 中的索引) * @param[in] value 参数指针,表示要写入的数据 * @param[in] dataType 数据类型,表示写入的数据类型(Uint8、Int16 等) * @return 无 *****************************************************************************/ void logic_setValue(int No, void *value, uint16_t num, data_type_e dataType); // 初始化 GPIO模块 任务入口 void creatGpioModTaskEntry(uint16_t time); /********************************************************************* * @brief 新建温控的初始化工作 * @param[in] 无 * @return 0:sucessful;1:fault *********************************************************************/ int creatLogicTempCtrlEntry(); /********************************************************************* * @brief 数据返回实时库 * @param[in] 无 * @return *********************************************************************/ int logic_paramUpload(); // 更新系统状态函数 (内部带互斥锁) void updateState(state_e newState, bool enOrDisable); #endif