188 lines
8.2 KiB
C
188 lines
8.2 KiB
C
/*
|
||
* @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
|
||
* @Date: 2024-09-04 11:32:56
|
||
* @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
|
||
* @LastEditTime: 2024-09-05 14:10:48
|
||
* @FilePath: /_EMS_C_V1.0.0/bsp/bsp_shm.h
|
||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||
*/
|
||
/*****************************************************************************
|
||
* @copyright 1997-2010, . POWER SUPPLY CO., LTD.
|
||
* @file bsp_shm.h
|
||
* @brief 共享内存接口封装
|
||
* @author Gary
|
||
* @date 2024-09-03
|
||
* @remark
|
||
*****************************************************************************/
|
||
#ifndef BSP_SHM_H
|
||
#define BSP_SHM_H
|
||
|
||
#include <stdio.h>
|
||
#include <string.h>
|
||
#include <time.h>
|
||
#include <math.h>
|
||
#include <stdbool.h>
|
||
#include <unistd.h>
|
||
#include <stdlib.h>
|
||
#include <sys/shm.h>
|
||
#include <sys/types.h>
|
||
#include <stdint.h>
|
||
#include <stddef.h>
|
||
#include "kit_data.h"
|
||
#include "app_parse.h"
|
||
#include "kit_log.h"
|
||
#include "bsp_data_mode.h"
|
||
#define IPC_WEB_SHEM_KEY 3000 // WEB端设置实时通知C端
|
||
#define EMS_KERNEL_KEY 2000 // RTDB实时库的测点属性缓存
|
||
|
||
#define ASSERT_SHM_ENABLE 0
|
||
|
||
typedef enum
|
||
{
|
||
kEE_SHM_READ, // 0
|
||
kEE_SHM_CREAT // 1
|
||
} shm_creat_type_e;
|
||
|
||
typedef enum
|
||
{
|
||
SHM_OK,
|
||
SHM_ERROR
|
||
} shm_state_e;
|
||
|
||
// 设备的基本测点结构
|
||
typedef struct
|
||
{
|
||
point_t *sPoint; // 考虑指针字节对齐,放前面
|
||
uint32_t id; // 设备编号
|
||
uint32_t num; // 测点总数
|
||
char name[MAX_NAME_BUF_LEN]; // 设备中文名称
|
||
char enname[MAX_NAME_BUF_LEN]; // 设备英文名称
|
||
} devPoint_t;
|
||
|
||
// 某一个设备类型所有设备
|
||
typedef struct
|
||
{
|
||
devPoint_t *sDevPoint; // MAX_SDEV_MAP_NUM 此处的测点索引 = 测点ID - 1,二者关联相等
|
||
uint32_t id; // 设备类型
|
||
uint32_t num; // 该设备类型下的设备总数
|
||
} devPointType_t;
|
||
|
||
// 所有的设备类型
|
||
typedef struct
|
||
{
|
||
uint32_t num; // 设备类型总数
|
||
devPointType_t *sDCodePoint; // MAX_DEVCODE_MAP_NUM 此处的测点索引 = 测点ID - 1,二者关联相等
|
||
} DEVPOINT_RTDB_T;
|
||
|
||
// #--------------------------------------------------------------------------------------------
|
||
// 全局变量web配置变化标志
|
||
typedef struct
|
||
{
|
||
uint16_t sysUpgradeSignal; // 系统软件升级等属性变化信号,1:变化,0:未变
|
||
uint16_t timeSignal; // 对时设置相关属性变化信号,1:变化,0:未变化
|
||
uint16_t stationInfoSignal; // 站点信息变化信号
|
||
uint16_t devArchSignal; // 站点拓扑变化信号
|
||
uint16_t logicProteSign; // 保护配置变化信号
|
||
uint16_t mallocAcPowerSign; // 有功分配算法配置变化
|
||
uint16_t mallocRePowerSign; // 无功分配算法配置变化
|
||
uint16_t logicModeSignal; // 算法切换信号
|
||
uint16_t logicNoneSignal; // 算法无
|
||
uint16_t logicDebugSignal; // 调试算法配置变化信号
|
||
uint16_t logicPeakValleySignal; // 削峰填谷算法配置变化信号
|
||
uint16_t logicDmdRespondSignal; // 需求侧响应配置变化信号
|
||
uint16_t logicLoadTraceSignal; // 负荷跟踪配置变化信号
|
||
uint16_t logicDmdCtrlSignal; // 需量管理配置变化信号
|
||
uint16_t logicPFSignal; // 功率因数控制配置变化信号
|
||
uint16_t reserver[25]; //占位用,webSign_t占用40*2=80个字节,固定不变
|
||
} webSign_t;
|
||
|
||
// 全局变量web配置变化标志类型
|
||
typedef enum
|
||
{
|
||
kSign_Start = 0,
|
||
kSign_SysUpdate = kSign_Start, // 系统软件升级
|
||
kSign_EmsConfig, // EMS配置
|
||
kSign_StationInfo, // 站点信息变化信号
|
||
kSign_DevArch, // 站点拓扑变化信号
|
||
kSign_Protect, // 保护配置变化信号
|
||
kSign_ActivePower, // 有功分配算法配置变化
|
||
kSign_ReactivePower, // 无功分配算法配置变化
|
||
kSign_LogicMode, // 算法切换信号
|
||
kSign_Logic_Start,
|
||
kSign_LogicNone = kSign_Logic_Start, // 算法无
|
||
kSign_LogicDebug, // 调试算法配置变化信号
|
||
kSign_LogicPeakValley, // 削峰填谷算法配置变化信号
|
||
kSign_LogicDmdRespond, // 需求侧响应配置变化信号
|
||
kSign_LogicLoadTrace, // 负荷跟踪配置变化信号
|
||
kSign_LogicDmdCtrl, // 需量管理配置变化信号
|
||
kSign_LogicPFCtrl, // 功率因数控制配置变化信号
|
||
kSign_TempCtrl, // 温控策略信号
|
||
kSign_DiDoCtrl, // 干节点配置管理
|
||
kSign_AdvancedSetting, // 高级设置
|
||
kSign_Logic_End,
|
||
kSign_Rev40 = kSign_Start + 39,
|
||
kSign_End
|
||
} cfg_web_sign_e;
|
||
|
||
/*****************************************************************************
|
||
* @brief 初始化用于web与c写配置变化的通知组件
|
||
* @param[in] type: 实时库的类型 默认选择Rtdb_ShMem
|
||
* @param[in] arg: 所有测点属性的指针
|
||
* @return 0-成功 1失败
|
||
*****************************************************************************/
|
||
uint16_t readWebSignShm(cfg_web_sign_e signType);
|
||
|
||
/*****************************************************************************
|
||
* @brief 读取web与c写配置变化的通知组件
|
||
* @param[in] type: 实时库的类型 默认选择Rtdb_ShMem
|
||
* @param[in] signType: 通知的地址
|
||
* @return 0-成功 1失败
|
||
*****************************************************************************/
|
||
void writeWebSignShm(cfg_web_sign_e signType, uint16_t val);
|
||
|
||
/*****************************************************************************
|
||
* @brief 写入web与c写配置变化的通知组件
|
||
* @param[in] type: 实时库的类型
|
||
* @param[in] signType: 通知的地址
|
||
* @param[in] val: 对应的值
|
||
* @return 0-成功 1失败
|
||
*****************************************************************************/
|
||
int initWebSignShm(shm_creat_type_e type);
|
||
|
||
/*****************************************************************************
|
||
* @brief 初始化rtdb
|
||
* @param[in] type: 实时库的类型
|
||
* @param[in] arg: 所有测点属性的指针
|
||
* @return 0-成功 1失败
|
||
*****************************************************************************/
|
||
int initRtdbShm(void *arg, shm_creat_type_e type);
|
||
|
||
/*****************************************************************************
|
||
* @brief 获取RTDB中的值
|
||
* @param[in] type: 实时库的类型 默认选择Rtdb_ShMem
|
||
* @param[in] devType: 设备类型
|
||
* @param[in] devId: 设备序号 从0开始
|
||
* @param[in] pointId: 该设备中点号,从0开始
|
||
* @return 获取值
|
||
*****************************************************************************/
|
||
double getShmPointValue(uint16_t devType, uint16_t devId, uint16_t pointId);
|
||
|
||
/*****************************************************************************
|
||
* @brief 获取RTDB中的设备值
|
||
* @param[in] type: 实时库的类型 默认选择Rtdb_ShMem
|
||
* @param[in] devType: 设备类型
|
||
* @param[in] devId: 设备序号 从0开始
|
||
*****************************************************************************/
|
||
point_t *getShmDevValue(uint16_t devType, uint16_t devId);
|
||
|
||
/*****************************************************************************
|
||
* @brief 向RTDB中写入值
|
||
* @param[in] type: 实时库的类型 默认选择Rtdb_ShMem
|
||
* @param[in] devType: 设备类型
|
||
* @param[in] devId: 设备序号 从0开始
|
||
* @param[in] pointId: 该设备中点号,从0开始
|
||
* @param[in] value: 向RTDB中写入的值
|
||
*****************************************************************************/
|
||
void setShmPointValue(uint16_t devType, uint16_t devId, uint16_t pointId, double value);
|
||
|
||
#endif // BSP_SHM_H
|