/********************************************************
* 
* 文 件 名： PlatDataManage.h   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2023-12-12
* 作    者： 联锁组
* 功能描述： 从平台接收的平台设备数据处理 
* 函数包括： 
* 使用注意：
* 修改记录：   
*	23231212 BY LC
*
********************************************************/ 
#ifndef _DEVICE_PLAT_DATA_MANAGE_H_
#define _DEVICE_PLAT_DATA_MANAGE_H_

#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#include "../System/SystemParameterManage.h"


#define BOARD_TYPE_CCUA   ((UINT8)0x09)     /*通控板A*/
#define BOARD_TYPE_CCUB   ((UINT8)0x0C)     /*通控板B*/
#define BOARD_TYPE_SEBA   ((UINT8)0x01)     /*扩展板A*/
#define BOARD_TYPE_SEBB   ((UINT8)0x02)     /*扩展板B*/

#define CHECK_VOLTAGE_ZERO  ((UINT8)0x00)        /*采集点电压为0*/
#define CHECK_VOLTAGE_OVERRUN  ((UINT8)0xaa)     /*采集点电压超限*/
#define CHECK_VOLTAGE_FEWER  ((UINT8)0xbb)       /*采集点电压欠压*/
#define CHECK_VOLTAGE_NOMAL  ((UINT8)0x55)       /*采集点电压在额定范围*/

#define CHECK_CURRENT_OVERRUN  ((UINT8)0xaa)     /*采集点电流超限*/
#define CHECK_CURRENT_NOMAL  ((UINT8)0x55)       /*采集点电流在额定范围*/

#define RATED_VOLTAGE_MIN   ((UINT16)21600U)        /*额定电压最小值 mV*/
#define RATED_VOLTAGE_MAX   ((UINT16)26400U)        /*额定电压最大值 mV*/
#define RATED_CURRENT_MIN   ((UINT16)0U)            /*额定电流最小值 mA*/
#define RATED_CURRENT_MAX   ((UINT16)10000U)        /*额定电流最大值 mA*/

#define COLLECT_MODEA_CCUA   ((UINT8)0x11)        /*通控A的模块A处采集点 采集点1*/
#define COLLECT_MODEA_CCUB   ((UINT8)0x22)        /*通控B的模块A处采集点 采集点2*/
#define COLLECT_MODEB_CCUA   ((UINT8)0x33)        /*通控A的模块B处采集点 采集点3*/
#define COLLECT_MODEB_CCUB   ((UINT8)0x44)        /*通控B的模块B处采集点 采集点4*/
#define COLLECT_COUPLING_CCUA   ((UINT8)0x55)        /*通控A的系统电源处耦合采集点 采集点5*/
#define COLLECT_COUPLING_CCUB   ((UINT8)0x66)        /*通控B的系统电源处耦合采集点 采集点6*/
#define COLLECT_POWER_NODE_A  ((UINT8)0x77)        /*A系电源插箱的空开辅助触点状态*/
#define COLLECT_POWER_NODE_B  ((UINT8)0x88)        /*B系电源插箱的空开辅助触点状态*/

#define NODE_STATUS_CLOSE   ((UINT8)0x55)           /*空开闭合已供电*/
#define NODE_STATUS_BREAK   ((UINT8)0xaa)           /*空开断开未供电*/


#define POWER_STATUS_NORMAL     ((UINT8)0x55)           /*电源状态正常*/
#define POWER_STATUS_ABNORMAL   ((UINT8)0xaa)           /*电源状态异常*/

#define CCU_COMMSTATUS_GOOD    ((UINT8)0x55)           /*通控板通信正常*/
#define CCU_COMMSTATUS_BAD     ((UINT8)0xaa)           /*通控板通信故障*/

#define CCU_CommBadEnsureTime_CycleCount   	((UINT16)5u)	  /*应用与通控通信中断判断周期数*/  

#define VOLTAGE_MAX_TO_0        ((UINT16)500U)           /*电压判断为0的阈值*/

#define IO_POWERSTATE_TOLERANCE   ((UINT8)0x02)           /*平台电源报警容忍周期数，容忍3周期，超过2周期报警*/

/*平台心跳帧信息结构*/
typedef struct S_PlatHeartDataStruct
{
	UINT16 voltageA_CCA;                                 /*24VA电源_电压*1000  通控红*/
	UINT16 voltageB_CCA;                                 /*24VB电源_电压*1000  通控红*/
	UINT16 currentA_CCA;                                 /*24VA电源_电流*1000  通控红*/
	UINT16 currentB_CCA;                                 /*24VB电源_电流*1000  通控红*/
	UINT16 voltageCoup_CCA;                                 /*24VA电源_电压*1000  通控红*/
	UINT16 currentCoup_CCA;                                 /*24VA电源_电流*1000  通控红*/
	UINT32 temperature_CCA;                             /*温度值*1000  通控红*/
	UINT8 check_EEPROM_CCA;                             /*EEPROM存储检验  通控红 成功0x55；失败0xaa*/
	UINT16 voltageA_CCB;                                 /*24VA电源_电压*1000  通控蓝*/
	UINT16 voltageB_CCB;                                 /*24VB电源_电压*1000  通控蓝*/
	UINT16 currentA_CCB;                                 /*24VA电源_电流*1000  通控蓝*/
	UINT16 currentB_CCB;                                 /*24VB电源_电流*1000  通控蓝*/
	UINT16 voltageCoup_CCB;                                 /*24VA电源_电压*1000  通控蓝*/
	UINT16 currentCoup_CCB;                                 /*24VA电源_电流*1000  通控蓝*/
	UINT32 temperature_CCB;                             /*温度值*1000  通控蓝*/
	UINT8 check_EEPROM_CCB;                             /*EEPROM存储检验  通控蓝 成功0x55；失败0xaa */
	UINT32 commStartCycle_CCA;                             /*与通控A通信开始周期，使用该周期做通控通信中断判断*/
	UINT32 commStartCycle_CCB;                             /*与通控B通信开始周期，使用该周期做通控通信中断判断*/
	UINT32 commStartCycle_SEBA;                             /*与扩展板1通信开始周期，使用该周期做通控通信中断判断*/
	UINT32 commStartCycle_SEBB;                             /*与扩展板2通信开始周期，使用该周期做通控通信中断判断*/
	UINT8 commState_CCA;                                  /*与CCA通信状态  55 通信正常  aa 通信故障*/
	UINT8 commState_CCB;                                  /*与CCB通信状态  55 通信正常  aa 通信故障*/
	UINT8 commState_SEBA;                                  /*与扩展板1通信状态  55 通信正常  aa 通信故障*/
	UINT8 commState_SEBB;                                  /*与扩展板2通信状态  55 通信正常  aa 通信故障*/
}PlatHeartDataStruct;

/*平台发AIM0x2D帧 GPIO采集电源状态结构*/
typedef struct S_PlatGPIODataStruct
{
	UINT8 powerANodeState;                                 /*A系电源插箱的空开辅助触点状态*/
	UINT8 powerBNodeState;                                 /*B系电源插箱的空开辅助触点状态*/
	UINT8 ModepowerAState_PUA;                             /*机柜A系电源插箱中为CPUA供电的24VDC电源模块状态*/
	UINT8 ModepowerBState_PUA;                             /*机柜B系电源插箱中为CPUA供电的24VDC电源模块状态*/
	UINT8 ModepowerAState_PUB;                             /*机柜A系电源插箱中为CPUB供电的24VDC电源模块状态*/
	UINT8 ModepowerBState_PUB;                             /*机柜B系电源插箱中为CPUB供电的24VDC电源模块状态*/
}PlatGPIODataStruct;


/*平台发送的电源采集状态容忍同步数据*/
typedef struct S_PlatGPIOToleranceData
{
	UINT32 powerANode_TolCyc;                                 /*A系电源插箱的故障容忍起始周期*/
	UINT32 powerBNode_TolCyc;                                  /*B系电源插箱的故障容忍起始周期*/
	UINT32 powerAMode_TolCyc;                             /*A系电源模块的故障容忍起始周期*/
	UINT32 powerBMode_TolCyc;                              /*B系电源模块的故障容忍起始周期*/
}PlatGPIOToleranceDataStruct;



/*
* 功能描述： 清空指定通控板卡发送的心跳数据
* 参数说明： 板卡ID
* 返回值  ： 无
*/
void ClearnCCUHeartData(UINT8 boardId);

/*
* 功能描述： 仿真模式下，将平台心跳帧数据设为正常值
* 参数说明： 无
* 返回值  ： 无
*/
void SetCCUHeartDataNormal(void);

/*
* 功能描述： 仿真模式下，将平台GPIOP采集数据设为正常值
* 参数说明： 无
* 返回值  ： 无
*/
void SetCCUPlatGPIODataNormal(void);

/*
* 功能描述： 获取指定采集点处电压
* 参数说明： UINT8 boardType 通控板类型
* 返回值  ： 采集电压
*/
UINT16 GetCollectPointVoltage(UINT8 pointType);


/*
* 功能描述： 获取指定采集点处电流
* 参数说明： UINT8 boardType 通控板类型
* 返回值  ： 采集电流
*/
UINT16 GetCollectPointCurrent(UINT8 pointType);


/*
* 功能描述： 获取电源插箱A的空开辅助触点状态
* 参数说明： 无
* 返回值  ： 0x55 触电闭合
*           0xaa 触电断开
*/
UINT8 GetPowerANodeStatue(void);

/*
* 功能描述： 获取电源插箱B的空开辅助触点状态
* 参数说明： 无
* 返回值  ： 0x55 触电闭合
*           0xaa 触电断开
*/
UINT8 GetPowerBNodeStatue(void);

/*
* 功能描述： 获取通控A通信状态
* 参数说明： 无
* 返回值  ： 0x55 通信正常
*           0xaa 通信中断
*/
UINT8 GetCCUACommStatus(void);

/*
* 功能描述： 获取通控B通信状态
* 参数说明： 无
* 返回值  ： 0x55 通信正常
*           0xaa 通信中断
*/
UINT8 GetCCUBCommStatus(void);

/*
* 功能描述： 获取扩展板A通信状态
* 参数说明： 无
* 返回值  ： 0x55 通信正常
*           0xaa 通信中断
*/
UINT8 GetSEBACommStatus(void);

/*
* 功能描述： 获取扩展板B通信状态
* 参数说明： 无
* 返回值  ： 0x55 通信正常
*           0xaa 通信中断
*/
UINT8 GetSEBBCommStatus(void);

/*
* 功能描述： 获取指定采集点处GPIO采集的电源状态
* 参数说明： UINT8 pointType 采集点类型
* 返回值  ：  0x55 电源状态正常
*           0xaa 电源状态异常
*/
UINT8 GetGPIOCollectPointStatus(UINT8 pointType);


/*
* 功能描述： 检查某处采集点电压是否在额定范围
* 参数说明： UINT8 pointType  采集点类型
* 返回值  ： 0 电压为0
*           0x55   在额定范围内
*           0xaa    超限
*           0xbb    欠压
*/
UINT8 CheckPointVoltageState(UINT8 pointType);



/*
* 功能描述： 检查联锁A系电源插箱故障状态
* 参数说明： 无
* 返回值  ： CI_SUCCESS 未故障
*           CI_ERROR   故障
*/
UINT8 CheckRCIAPowerFaultState(void);

/*
* 功能描述： 检查联锁B系电源插箱故障状态
* 参数说明： 无
* 返回值  ： CI_SUCCESS 未故障
*           CI_ERROR   故障
*/
UINT8 CheckRCIBPowerFaultState(void);


/*
* 功能描述： 检查联锁A系电源模块故障状态
* 参数说明： 无
* 返回值  ： CI_SUCCESS 未故障
*           CI_ERROR   故障
*/
UINT8 CheckRCIAPowerModeFaultState(void);

/*
* 功能描述： 检查联锁B系电源模块故障状态
* 参数说明： 无
* 返回值  ： CI_SUCCESS 未故障
*           CI_ERROR   故障
*/
UINT8 CheckRCIBPowerModeFaultState(void);

/*
* 功能描述： 检查联锁通信设备(通控)状态
* 参数说明： 无
* 返回值  ： CI_SUCCESS 通信正常
*           CI_ERROR   通信中断
*/
UINT8 CheckRCICommCCUDeviceStatue(void);

/*
* 功能描述：设置与指定通信板的通信状态
* 参数说明：UINT8 boardId 通信板卡ID
*         UINT8 commState 通信状态
* 返回值  ：
* BY LC
*/
void SetRCIandCCBoardCommStatus(UINT8 boardId, UINT8 commState);

/*
* 功能描述：获取与指定通信板的通信状态
* 参数说明：UINT8 boardId 通信板卡ID
* 返回值  ：UINT8 commState 通信状态
* BY LC
*/
UINT8 GetRCIandCCBoardCommStatus(UINT8 boardId);

/*
* 功能描述：获取与指定通信板的通信开始周期数
* 参数说明：UINT8 boardId 通信板卡ID
* 返回值  ：UINT8 commState 通信状态
* BY LC
*/
UINT32 GetRCIandCCBoardCommCyCNum(UINT8 boardId);

#endif
