ems/ems_c/logic/logic_comm.h

211 lines
7.0 KiB
C
Raw Permalink Normal View History

2025-05-13 17:49:49 +08:00
/*****************************************************************************
* @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 <stdio.h>
#include <stdint.h>
#include <time.h>
#include <sys/time.h>
#include <pthread.h>
#include <stdatomic.h>
#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 Uint8Int16
* @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 0sucessful1fault
*********************************************************************/
int creatLogicTempCtrlEntry();
/*********************************************************************
* @brief
* @param[in]
* @return
*********************************************************************/
int logic_paramUpload();
// 更新系统状态函数 (内部带互斥锁)
void updateState(state_e newState, bool enOrDisable);
#endif