/* * @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 #include #include #include #include #include #include #include #include #include #include #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