ems/ems_c/logic/logic_comm.h

211 lines
7.0 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*****************************************************************************
* @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 数据类型表示写入的数据类型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 0sucessful1fault
*********************************************************************/
int creatLogicTempCtrlEntry();
/*********************************************************************
* @brief 数据返回实时库
* @param[in] 无
* @return
*********************************************************************/
int logic_paramUpload();
// 更新系统状态函数 (内部带互斥锁)
void updateState(state_e newState, bool enOrDisable);
#endif