forked from gary/ems
2
0
Fork 0
sun_ems/ems_c/bsp/bsp_shm.h

188 lines
8.2 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.

/*
* @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 Copyright (c) 2025-2055 Gary. All rights reserved.
* @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