2025-05-13 17:49:49 +08:00
|
|
|
|
/*
|
|
|
|
|
* @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
|
|
|
|
|
*/
|
|
|
|
|
/*****************************************************************************
|
2025-05-24 17:16:28 +08:00
|
|
|
|
* @copyright Copyright (c) 2025-2055 Gary. All rights reserved.
|
2025-05-13 17:49:49 +08:00
|
|
|
|
* @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
|