211 lines
7.0 KiB
C
211 lines
7.0 KiB
C
/*****************************************************************************
|
||
* @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 0:sucessful;1:fault
|
||
*********************************************************************/
|
||
int creatLogicTempCtrlEntry();
|
||
|
||
/*********************************************************************
|
||
* @brief 数据返回实时库
|
||
* @param[in] 无
|
||
* @return
|
||
*********************************************************************/
|
||
int logic_paramUpload();
|
||
|
||
// 更新系统状态函数 (内部带互斥锁)
|
||
void updateState(state_e newState, bool enOrDisable);
|
||
#endif
|