[9.1] 9.1首版一回代码,基线版本

This commit is contained in:
lh
2026-05-22 15:05:04 +08:00
commit 875dfd5d4b
625 changed files with 562213 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
*.zip filter=lfs diff=lfs merge=lfs -text
+161
View File
@@ -0,0 +1,161 @@
ARTIFACT = RCOCI
#Build architecture/variant string, possible values: x86, armv7le, etc...
PLATFORM ?= aarch64le
#Build profile, possible values: release, debug, profile, coverage
BUILD_PROFILE ?= debug
CONFIG_NAME ?= $(PLATFORM)-$(BUILD_PROFILE)
OUTPUT_DIR = build/$(CONFIG_NAME)
TARGET = $(OUTPUT_DIR)/$(ARTIFACT)
#Compiler definitions
CC = qcc -Vgcc_nto$(PLATFORM) -D _TSCP_
CXX = qcc -lang-c++ -Vgcc_nto$(PLATFORM) -D _TSCP_
LD = $(CC)
#User defined include/preprocessor flags and libraries
#INCLUDES += -I/path/to/my/lib/include
#INCLUDES += -I../mylib/public
INCLUDES += -I ./src/APP \
-I ./src/APP/ciapp/2oo2 \
-I ./src/APP/ciapp/AllAutoReturn \
-I ./src/APP/ciapp/AutoReturn \
-I ./src/APP/ciapp/AutoRoute \
-I ./src/APP/ciapp/AxisAssert \
-I ./src/APP/ciapp/AxisSort \
-I ./src/APP/ciapp/CutoffPoint \
-I ./src/APP/ciapp/DataManage \
-I ./src/APP/ciapp/DebugPrint \
-I ./src/APP/ciapp/Deployment \
-I ./src/APP/ciapp/DiffLineDev \
-I ./src/APP/ciapp/EnvelopeManage \
-I ./src/APP/ciapp/ERROR \
-I ./src/APP/ciapp/ESB \
-I ./src/APP/ciapp/FloodGate \
-I ./src/APP/ciapp/Garagedoor \
-I ./src/APP/ciapp/HLHTMsgHead \
-I ./src/APP/ciapp/Indicator \
-I ./src/APP/ciapp/Initial \
-I ./src/APP/ciapp/InvadeSection \
-I ./src/APP/ciapp/IO \
-I ./src/APP/ciapp/LogicManage \
-I ./src/APP/ciapp/LogicProcess \
-I ./src/APP/ciapp/LogRecord \
-I ./src/APP/ciapp/Main \
-I ./src/APP/ciapp/Mask \
-I ./src/APP/ciapp/NonAutoReturn \
-I ./src/APP/ciapp/NonRoute \
-I ./src/APP/ciapp/Overlap \
-I ./src/APP/ciapp/ParsePack \
-I ./src/APP/ciapp/PSC \
-I ./src/APP/ciapp/PSD \
-I ./src/APP/ciapp/QueryFiles \
-I ./src/APP/ciapp/Relay \
-I ./src/APP/ciapp/RemoteRM \
-I ./src/APP/ciapp/ReverseCut \
-I ./src/APP/ciapp/ReverseRoute \
-I ./src/APP/ciapp/Route \
-I ./src/APP/ciapp/Section \
-I ./src/APP/ciapp/SectionStateProcess \
-I ./src/APP/ciapp/SGBJ \
-I ./src/APP/ciapp/Signal \
-I ./src/APP/ciapp/SPKS \
-I ./src/APP/ciapp/Switch \
-I ./src/APP/ciapp/System \
-I ./src/APP/ciapp/Train \
-I ./src/APP/ciapp/Transmit \
-I ./src/APP/ciapp/VirtualDevice \
-I ./src/APP/ciapp/WashMachine \
-I ./src/APP/ciapp/WLScreen \
-I ./src/APP/ciapp/WLBrake \
-I ./src/APP/PU13_integration_config \
-I ./src/commoncode/common \
-I ./src/commoncode/commoncode_config_vxworks \
-I ./src/dqu_common/dqu_idmap_common \
-I ./src/dqu_common/dqu_emap_common \
-I ./src/dqu_common/dqu_dfs_common \
-I ./src/dqu_common/dqu_cbtc_common \
-I .\src\protocol\fsfb\common_dqu_fsfb \
-I .\src\protocol\fsfb\common_fsfb \
-I .\src\protocol\protocol_cbtc\common_protocol_config \
-I .\src\protocol\protocol_cbtc\common_dqu_protocol \
-I .\src\protocol\protocol_cbtc\common_protocol \
-I .\src\protocol\redun_record_cbtc\common_dqu_rp \
-I .\src\protocol\redun_record_cbtc\common_redun \
-I .\src\protocol\redun_record_cbtc\common_redun_record_config \
-I .\src\protocol\rsr_record_cbtc\common_dqu_rsr \
-I .\src\protocol\rsr_record_cbtc\common_rsr \
-I .\src\protocol\rsr_record_cbtc\common_rsr\rssp \
-I .\src\protocol\rsr_record_cbtc\common_rsr\sig \
-I .\src\protocol\rsr_record_cbtc\common_rsr_record_config \
-I .\src\protocol\rssp_record_cbtc1\common_dqu_rssp \
-I .\src\protocol\rssp_record_cbtc1\common_rssp \
-I .\src\protocol\rssp_record_cbtc1\common_rssp_record_config \
-I .\src\protocol\rssp2_record_cbtc\dqu_rsspii_cbtc \
-I .\src\protocol\rssp2_record_cbtc\rsspii_cbtc \
-I .\src\protocol\rssp2_record_cbtc\rsspii_record_config_cbtc \
-I .\src\protocol\sfp_record_cbtc1\common_dqu_sfp \
-I .\src\protocol\sfp_record_cbtc1\common_sfp \
-I .\src\protocol\sfp_record_cbtc1\common_sfp_nr_config \
-I ./src/DRV \
-I ./src/MSCP \
-I ./src/MSCP/CM \
-I ./src/MSCP/DFM \
-I ./src/MSCP/CFM \
-I ./src/MSCP/SFM \
-I ./src/MSCP/PFM \
-I ./src/MSCP_CFG \
#LIBS += -L/path/to/my/lib/$(PLATFORM)/usr/lib -lmylib
#LIBS += -L../mylib/$(OUTPUT_DIR) -lmylib
#Compiler flags for build profiles
CCFLAGS_release += -O0
CCFLAGS_debug += -g -O0 -fno-builtin
CCFLAGS_coverage += -g -O0 -ftest-coverage -fprofile-arcs -nopipe -Wc,-auxbase-strip,$@
LDFLAGS_coverage += -ftest-coverage -fprofile-arcs
CCFLAGS_profile += -g -O0 -finstrument-functions
LIBS_profile += -lprofilingS
#Generic compiler flags (which include build type flags)
CCFLAGS_all += -w -fmessage-length=0
CCFLAGS_all += $(CCFLAGS_$(BUILD_PROFILE))
#Shared library has to be compiled with -fPIC
#CCFLAGS_all += -fPIC
LDFLAGS_all += -l socket -l m
LDFLAGS_all += $(LDFLAGS_$(BUILD_PROFILE))
LIBS_all += $(LIBS_$(BUILD_PROFILE))
DEPS = -Wp,-MMD,$(@:%.o=%.d),-MT,$@
#Macro to expand files recursively: parameters $1 - directory, $2 - extension, i.e. cpp
rwildcard = $(wildcard $(addprefix $1/*.,$2)) $(foreach d,$(wildcard $1/*),$(call rwildcard,$d,$2))
#Source list
SRCS = $(call rwildcard, src, c)
#Object files list
OBJS = $(addprefix $(OUTPUT_DIR)/,$(addsuffix .o, $(basename $(SRCS))))
#Compiling rule
$(OUTPUT_DIR)/%.o: %.c
@mkdir -p $(dir $@)
$(CC) -c $(DEPS) -o $@ $(INCLUDES) $(CCFLAGS_all) $(CCFLAGS) $<
#Linking rule
$(TARGET):$(OBJS)
$(LD) -o $(TARGET) $(LDFLAGS_all) $(LDFLAGS) $(OBJS) $(LIBS_all) $(LIBS)
#Rules section for default compilation and linking
all: $(TARGET)
clean:
rm -fr $(OUTPUT_DIR)
rebuild: clean all
#Inclusion of dependencies (object files to source and includes)
-include $(OBJS:%.o=%.d)
+797
View File
@@ -0,0 +1,797 @@
/*
这是一个示例文件,各产品应当参考本文件,开发自己的APP_API.c
也可以根据自身项目情况将这些函数分散到不同的.c文件中,只保持APP_API.h不变即可
*/
#include "APP_API.h"
#include "MSCP_APP_API.h"
#include "MSCP_APP_Interface.h"
#include "2oo2InterfaceDataManage.h"
#include "2oo2DataTransferManage.h"
#include "commonQueryStruDef.h"
#include "SystemParameterManage.h"
#include "ConfigDataReadManage.h"
#include "ProtclParam.h"
#include "../Deployment/DeploymentExtern.h"
static CM_UINT32 gFollowDataLen = 0u; /*应用跟随数据长度*/
static CM_UINT8 gFollowData[MSCP_FOLLOW_BUFF_SIZE] = { 0 }; /*应用跟随数据*/
/* 内网安全通信配置参数,示例: */
/* 内网安全通信配置参数,示例: */
/*ATP、ATO、MMI间通信时,SFP协议使用的数据库数组:
*两端ATP分别当作ZC1和ZC2,ZC1为发起方;
*ATO为CI3,MMI为CI4,CCOV为CI5(CCOV仅为预留,暂无通信的需求).ZC与CI通信时ZC为发起方
*总结各子系统ID为:两端ATP分别为0x5501,0x5502;ATO为0x7103;MMI为0x7104;CCOV为0x7105*/
const CM_UINT8 g_SfpInnetParam[] =
{
0,4,/*不同设备通信关系表记录个数*/
/*记录的格式如下:*/
/* 发起方 发起方发送数据 发起方报文 发起方报文 发起方接收Ack 跟随方 跟随方发送数据 跟随方运行 跟随方报文 此通信关系中成功发送 */
/* 设备类型 通信类型 发送周期长度 最大延时 报文最大延时差 设备类型 通信类型 周期长度 最大延时 一包数据所需最小周期数 */
/*ZC->CI*/ 0x22, 0x55, 0x01,0x1D, 0x01,0x1D, 0x01,0x1D, 0xff, 0x55, 0x00,0xC8, 0x00,0xC8, 0x02,
/*AOM->TIAS*/ 0x15, 0x55, 0x00,0xC8, 0x00,0xC8, 0x00,0xC8, 0x03, 0x55, 0x00,0xC8, 0x00,0xC8, 0x02,
/*AOM->ATP*/ 0x14, 0x55, 0x00,0xC8, 0x00,0xC8, 0x00,0xC8, 0x15, 0x55, 0x00,0xC8, 0x00,0xC8, 0x02,
/*主机->维护机*/ 0xD9, 0x55, 0x01,0x2c, 0x01,0x2C, 0x01,0x2C, 0xf8, 0x55, 0x00,0xc8, 0x00,0xc8, 0x02,
0,2,/*相同设备通信关系表记录个数*/
/*记录的格式如下:*/
/* 发起方 发起方 发起方发送数据 发起方报文 发起方报文 发起方接收Ack 跟随方 跟随方 跟随方发送数据 跟随方运行 跟随方报文 此通信关系中成功发送 */
/* 设备类型 设备ID 通信类型 发送周期长度 最大延时 报文最大延时差 设备类型 设备ID 通信类型 周期长度 最大延时 一包数据所需最小周期数 */
/*AOM1->AOM2*/ 0x22, 1, 0x55, 0x00,0xC8, 0x00,0xC8, 0x00,0xC8, 0x22, 2, 0x55, 0x00,0xC8, 0x00,0xC8, 0x02,
/*ZC1->ZC2*/ 0x55, 1, 0x55, 0x00,0xC8, 0x00,0xC8, 0x00,0xC8, 0x55, 2, 0x55, 0x00,0xC8, 0x00,0xC8, 0x02
};
/* 应用周期主逻辑2 */
ENUM_CM_RETURN APP_API_MainFunc2(void);
/* 应用周期主逻辑3 */
ENUM_CM_RETURN APP_API_MainFunc3(void);
/* 应用周期主逻辑4 */
ENUM_CM_RETURN APP_API_MainFunc4(void);
/* 应用周期主逻辑4 */
ENUM_CM_RETURN APP_API_MainFunc5(void);
/* 应用周期主逻辑4 */
ENUM_CM_RETURN APP_API_MainFunc6(void);
#if (kPLATFORM==kVXWORKS)
static ENUM_CM_RETURN AddOneAppCheckData(IN const UINT32 dwDataAddr, IN const UINT16 wDataLen);
static ENUM_CM_RETURN AddAppCheckData(UINT32* pConfigDataAdderBuf, UINT16* pConfigDataLenBuf, UINT16 wDataLen);
#endif
/**
* @brief 应用初始化
* @param VitalBuf 关键数据数组
* @param pVitalLen 关键数据长度
* @return ENUM_CM_RETURN 初始化结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @details
* 2oo2双机的关键数据内容不一致时,2oo2初始化将失败——平台宕机;
* 2x2双系的关键数据内容不一致时,非主系运行的设备将宕机;
* 关键数据应尽可能短(如几个版本号或MD5码)总长不得超过200字节。
*/
ENUM_CM_RETURN APP_API_Init(OUT CM_UINT8 VitalBuf[200], OUT CM_UINT16* pVitalLen)
{
ENUM_CM_RETURN retVal = ENUM_CM_FALSE; /*返回值*/
UINT8 initRtn = 0U; /*应用初始化结果*/
UINT16* pTiocFsVersion = NULL;/* 数据版本号 */
#if (kPLATFORM==kVXWORKS)
UINT16 wAppConfigDataLen = 0u;
UINT32 szConfigDataAddr[200u] = { 0u };
UINT16 szConfigDataLen[200u] = { 0u };
SERIAL_ID_FUNC pIsSendExtendBoard = NULL;/* 扩展板相关 */
SERIAL_OUT_ATS_VOBC pReserveOutVobc = NULL;
SERIAL_IN_VOBC_ATS pReserveInAts = NULL;
#if 1
UINT8 cSwtichFalg = FUNC_SWITCH_OFF; /* 预留 下版本支持 */
#endif
#endif
if ((NULL != VitalBuf) && (NULL != pVitalLen) && (192u >= *pVitalLen))
{
initRtn = CiAppInitial();
if (1u == initRtn)
{
retVal = ENUM_CM_TRUE;
}
else
{
; /*返回失败*/
}
}
else
{
;/* 返回失败 */
}
printf("CiAppInitial ret:%x\n", retVal);
if (ENUM_CM_TRUE == retVal)
{
/* 应用初始化成功 */
/* 获取数据版本号 */
pTiocFsVersion = GetTiocFsVersion();
if (NULL != pTiocFsVersion)
{
/* 输出数据版本号 */
ShortToChar(pTiocFsVersion[0], &VitalBuf[*pVitalLen]);
*pVitalLen += 2u;
ShortToChar(pTiocFsVersion[1], &VitalBuf[*pVitalLen]);
*pVitalLen += 2u;
ShortToChar(pTiocFsVersion[2], &VitalBuf[*pVitalLen]);
*pVitalLen += 2u;
ShortToChar(pTiocFsVersion[3], &VitalBuf[*pVitalLen]);
*pVitalLen += 2u;
}
else
{
retVal = ENUM_CM_FALSE;
}
}
else
{
;/* 无处理 */
}
printf("GetTiocFsVersion ret:%x\n", retVal);
#if (kPLATFORM==kVXWORKS)
if (ENUM_CM_TRUE == retVal)
{
/* 获取自检内存 */
wAppConfigDataLen = GetTiocDeviceConfigData(szConfigDataAddr, szConfigDataLen, 200u);
/* 添加自检内存 */
if ((0u != wAppConfigDataLen) && (200u >= wAppConfigDataLen))
{
retVal = AddAppCheckData(szConfigDataAddr, szConfigDataLen, wAppConfigDataLen);
printf("AddAppCheckData1 ret:%x\n", retVal);
}
else
{
retVal = ENUM_CM_FALSE;
}
}
else
{
;/* 无处理 */
}
printf("GetTiocDeviceConfigData ret:%x\n", retVal);
if (ENUM_CM_TRUE == retVal)
{
/* 获取自检内存 */
wAppConfigDataLen = GetTiocSystemParameterData(szConfigDataAddr, szConfigDataLen, 200u);
/* 添加自检内存 */
if ((0u != wAppConfigDataLen) && (200u >= wAppConfigDataLen))
{
retVal = AddAppCheckData(szConfigDataAddr, szConfigDataLen, wAppConfigDataLen);
printf("AddAppCheckData2 ret:%x\n", retVal);
}
else
{
retVal = ENUM_CM_FALSE;
}
}
else
{
;/* 无处理 */
}
printf("GetTiocSystemParameterData ret:%x\n", retVal);
if (ENUM_CM_TRUE == retVal)
{
pIsSendExtendBoard = Is_Send_ExtendBoard;
MSCP_SetSerial(pIsSendExtendBoard);
pReserveOutVobc = SerialOutAtsVobcFunc;
MSCP_SetOutAtsVobcFunc(pReserveOutVobc);
pReserveInAts = SerialInVobcAtsFunc;
MSCP_SetInVobcAtsFunc(pReserveInAts);
#if 1
cSwtichFalg = GetCiFunctionSwitchConfig(FUNC_OC_200_INOUTNET);
if (FUNC_SWITCH_ON == cSwtichFalg)
{
/*设置协议参数*/
MSCP_ParamData(innetProtclParam, innetProtclParamLen);
}
else
{
/* 无处理 */
}
#endif
/*设置主应用任务*/
MSCP_SetAppFunc(APP_API_MainFunc, APP_API_MainFunc2, APP_API_MainFunc3, APP_API_MainFunc4, APP_API_MainFunc5);
}
#endif
return retVal;
}
/*
* @brief 提供给平台的初始化函数
* @return无
* @details
* 给平台提供FS版本号,维护ID、内网参数,系统版本号
**/
void APP_API_Data_Init()
{
UINT8 fsVersBuffer[4] = { 0u };
UINT8 appVersBuffer[4] = { 0u };
UINT8 ciToCimDataBuffer[4] = { 0u };
UINT8 deviceSum = 0u; /*通信设备数*/
UINT16* pTiocFsVersion = NULL; /*FS版本号buff*/
UINT16 ii = 0U;
UINT8 szFSFILEVersionFS[DFS_VERSION_LENGTH] = { 0 };
UINT8 funcRetVal = 0U;
funcRetVal = dquGetFSVersion(DataPath, szFSFILEVersionFS);
#if (kPLATFORM==kVXWORKS)
/*文件配置*/
STRU_APP_CFG_T AppCfgInterface = {
.FS_NAME = "RCI.FS", /**< FS文件名称 */
.APP_NAME = "RCOCI", /**< 应用文件名称 */
.CYC_TIME = 300, /**< 系统周期 */
.app_num = 1, /**< app任务数 */
.M_2oo2_Enable = 0x55, /**< 2oo2功能开关 */
.M_2x2_Enable = 0x55, /**< 2x2功能开关*/
.M_InnetSafe_Enable = 0x55, /**< 内网安全通信功能开关 */
.M_InnetRaw_Enable = 0xAA, /**< 内网透传通信功能开关 */
.M_OutnetSafe_Enable = 0x55,/**< 外网安全通信功能开关 */
.M_OutnetRaw_Enable = 0xAA, /**< 外网透传通信功能开关 */
.M_CpuUsageGet_Enable = 0xAA,/**< 获取cpu使用率功能开关 */
.M_RemoteUpdate_Enable = 0x55,/**< 远程部署内网安全通信功能开关 */
.ID_Maintenance = DEVICE_TYPE_AIM,
.Start_Path = "/emmc1", /**< 程序启动路径 */
.reboot_replycount = 10, /**< 重启确认报文回复次数 */
.M_AutoReboot_Count = 3, /**< 自动重启次数 */
.M_AutoClear_Days = 1, /**< 连续运行多久清空宕机次数的天数 */
.CPU[0].IP_2oo2 = "192.168.0.11", /**< 2oo2通信IP */
.CPU[0].IP_2x2 = "192.168.1.62", /**< 2x2通信IP */
.CPU[0].IP_Out = "192.168.1.62", /**< 外网通信IP */
.CPU[0].IP_Maintain = "192.168.146.101", /**< 维护通信IP */
/*适用透传通道-选配*/
.CPU[0].IP_Com = "192.168.1.62", /**< 通用通信IP */
.CPU[0].IP_Com_Extend = "192.168.1.62",/**< 通用通信扩展IP */
.CPU[0].Logger_PortBase = 55011, /**< 明文日志记录发送端口 */
.CPU[0].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
.CPU[1].IP_2oo2 = "192.168.0.12", /**< 2oo2通信IP */
.CPU[1].IP_2x2 = "192.168.2.62", /**< 2x2通信IP */
.CPU[1].IP_Out = "192.168.2.62", /**< 外网通信IP */
.CPU[1].IP_Maintain = "192.168.18.102", /**< 维护通信IP */
/*适用透传通道-选配*/
.CPU[1].IP_Com = "192.168.2.62", /**< 通用通信IP */
.CPU[1].IP_Com_Extend = "192.168.2.62",/**< 通用通信扩展IP */
.CPU[1].Logger_PortBase = 55012, /**< 明文日志记录发送端口 */
.CPU[1].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
.CPU[2].IP_2oo2 = "192.168.0.21", /**< 2oo2通信IP */
.CPU[2].IP_2x2 = "192.168.1.64", /**< 2x2通信IP */
.CPU[2].IP_Out = "192.168.1.64", /**< 外网通信IP */
.CPU[2].IP_Maintain = "192.168.146.103", /**< 维护通信IP */
/*适用透传通道-选配*/
.CPU[2].IP_Com = "192.168.1.64", /**< 通用通信IP */
.CPU[2].IP_Com_Extend = "192.168.1.64",/**< 通用通信扩展IP */
.CPU[2].Logger_PortBase = 55021, /**< 明文日志记录发送端口 */
.CPU[2].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
.CPU[3].IP_2oo2 = "192.168.0.22", /**< 2oo2通信IP */
.CPU[3].IP_2x2 = "192.168.2.64", /**< 2x2通信IP */
.CPU[3].IP_Out = "192.168.2.64", /**< 外网通信IP */
.CPU[3].IP_Maintain = "192.168.18.104", /**< 维护通信IP */
/*适用透传通道-选配*/
.CPU[3].IP_Com = "192.168.2.64", /**< 通用通信IP */
.CPU[3].IP_Com_Extend = "192.168.2.64",/**< 通用通信扩展IP */
.CPU[3].Logger_PortBase = 55022, /**< 明文日志记录发送端口 */
.CPU[3].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
/*通用端口配置*/
.Port_Outnet_Safe = 54001, /**< 外网安全通信端口 */
.Port_Innet_Safe = 53001, /**< 内网安全通信端口 */
.Port_Outnet_Raw = 54002, /**< 外网透明传输端口 */
.Port_Remote_Update = 50000, /**< 远程部署通信端口 */
/*透传配置-选配*/
.Port_Innet_Raw_Num = 0, /**< 内网透传端口数量 */
.Port_Innet_Raw_Extend_Num = 0, /**< 内网透传扩展端口数量 */
.Innet_Raw_Parameter[0].Port_Innet_Raw = 3956, /**< 内网透明传输端口 */
.Innet_Raw_Parameter[0].Port_Type_Enable = RAW_COM_UDP, /**< 内网透明tcp传输模式 */
.Innet_Raw_Parameter[0].Server_DevId = 0, /**< 服务端设备类型和id */
.Innet_Raw_Parameter[0].TIME_STAMP_ENABLE = 0XAA, /**< 2取2乘时间戳使能开关 */
.Innet_Raw_Parameter[0].INNET_2oo2_RAW = 0X55, /**< 透传通道2取开关 */
.Innet_Raw_Parameter[0].INNET_2x2_RAW = 0XAA, /**< 透传通道2乘开关 */
.Innet_Raw_Parameter[0].IP_InnetRaw_maddr = "224.0.0.31",/**< 内网透传的组播IP */
.Innet_Raw_Parameter[1].Port_Innet_Raw = 3956, /**< 内网透明传输端口 */
.Innet_Raw_Parameter[1].Port_Type_Enable = RAW_COM_UDP, /**< 内网透明tcp传输模式 */
.Innet_Raw_Parameter[1].Server_DevId = 0, /**< 服务端设备类型和id */
.Innet_Raw_Parameter[1].TIME_STAMP_ENABLE = 0XAA, /**< 2取2乘时间戳使能开关 */
.Innet_Raw_Parameter[1].INNET_2oo2_RAW = 0X55, /**< 透传通道2取开关 */
.Innet_Raw_Parameter[1].INNET_2x2_RAW = 0XAA, /**< 透传通道2乘开关 */
.Innet_Raw_Parameter[1].IP_InnetRaw_maddr = "224.0.0.32",/**< 内网透传的组播IP */
/*外网通信配置*/
.OutNetRed.CC_G_IP = "192.168.1.60", /**< 通控的内网IP */
.OutNetRed.CC_P_IP = "192.168.2.60", /**< 通控的内网IP */
.OutNetRed.EXTEND_G_IP = "192.168.1.70", /**< 扩展板卡的内网IP */
.OutNetRed.EXTEND_P_IP = "192.168.2.70", /**< 扩展板卡的内网IP */
.OutNetRed.OutnetSafe_Port = 54001, /**< 外网安全通信端口 */
.OutNetRed.OutnetRaw_Port = 54002, /**< 外网透传通信端口 */
.OutNetRed.InnetRaw_Port = 53003, /**< 内网透传通信端口 */
.OutNetBlue.CC_G_IP = "192.168.1.61", /**< 通控的内网IP */
.OutNetBlue.CC_P_IP = "192.168.2.61", /**< 通控的内网IP */
.OutNetBlue.EXTEND_G_IP = "192.168.1.71", /**< 扩展板卡的内网IP */
.OutNetBlue.EXTEND_P_IP = "192.168.2.71", /**< 扩展板卡的内网IP */
.OutNetBlue.OutnetSafe_Port = 54001, /**< 外网安全通信端口 */
.OutNetBlue.OutnetRaw_Port = 54002, /**< 外网透传通信端口 */
.OutNetBlue.InnetRaw_Port = 53003, /**< 内网透传通信端口 */
/*日志记录目标设备IP配置*/
.Logger_G_IP = "192.168.146.100", /**< 绿网日志记录IP */
.Logger_P_IP = "192.168.18.100", /**< 紫网日志记录IP */
/*内网通信设备注册最大支持0-255*/
.INNET_COM_NUM = 1, /**< 内网通信设备数量 */
.INNET_COM_CFG[0].InnetID = DEVICE_TYPE_AIM, /**< 内网通信ID */
.INNET_COM_CFG[0].IP_G = (CM_UINT32)inet_addr("192.168.146.100"),/**< 绿网IP */
.INNET_COM_CFG[0].Port_Raw_G = 55004, /**< 绿网透传端口 */
.INNET_COM_CFG[0].Port_Safe_G = 55003, /**< 绿网安全端口 */
.INNET_COM_CFG[0].IP_P = (CM_UINT32)inet_addr("192.168.18.100"),/**< 紫网IP */
.INNET_COM_CFG[0].Port_Raw_P = 55004, /**< 紫网透传端口 */
.INNET_COM_CFG[0].Port_Safe_P = 55003, /**< 紫网安全端口 */
};
MSCP_Set_APP_ConfigData(&AppCfgInterface);
#endif
/*组FS版本号*/
ii = 0U;
fsVersBuffer[ii++] = szFSFILEVersionFS[0];
fsVersBuffer[ii++] = szFSFILEVersionFS[1];
fsVersBuffer[ii++] = szFSFILEVersionFS[2];
fsVersBuffer[ii++] = szFSFILEVersionFS[3];
/*组软件版本号*/
ii = 0U;
appVersBuffer[ii++] = VER_INTE_PROJECT;
appVersBuffer[ii++] = VER_INTE_PRODUCT >> 2U;
appVersBuffer[ii++] = (VER_INTE_PRODUCT << 6U) + (VER_INTE_EXE & (UINT8)0x3F);
appVersBuffer[ii++] = VER_INTE_TIME;
/*设置平台调用获取外网信息函数*/
MSCP_SetSrcId(SetOutNetPara);
/*设置内网参数*/
MSCP_SetSfpInnetPara(g_SfpInnetParam);
MSCP_SetAppVersion(appVersBuffer);
MSCP_SetFsVersion(fsVersBuffer);
}
/**
* @brief 应用周期主逻辑
* @return ENUM_CM_RETURN 函数执行结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @details
* 当本系热备状态为:ENUM_2x2_SHUTDOWN,时
* 本函数不执行;
* 当本系热备状态为:ENUM_2x2_OFFLINEENUM_2x2_PRE_MASTERENUM_2x2_SLAVE,时
* 本函数被周期执行,但 ENUM_MSG_OUTNET_SAFE 报文不会真实输出;
* 当本系热备状态为:ENUM_2x2_MASTER,时
* 本函数被周期执行,并且所有输出信息被真实输出。
*/
ENUM_CM_RETURN APP_API_MainFunc(void)
{
ENUM_CM_RETURN retVal = ENUM_CM_NULL;
CM_UINT64 startCycTick = 0u;
CM_UINT64 endCycTick = 0u;
startCycTick = MSCP_GetTick();
debug_infor_printf("app proc start at %llu us\n", startCycTick);
if (1 == MainProcess())
{
retVal = ENUM_CM_TRUE;
}
else
{
debug_infor_printf("app proc err\n");
}
endCycTick = MSCP_GetTick();
debug_infor_printf("app proc end at %llu us,used %d us\n", endCycTick, (CM_INT32)((endCycTick - startCycTick) / 1000));
gFollowDataLen = GetCiAppData(gFollowData);
MSCP_SetFollowData(gFollowData, gFollowDataLen);
return retVal;
}
/**
* @brief 应用周期主逻辑2
* @return ENUM_CM_RETURN 函数执行结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @details
* 当本系热备状态为:ENUM_2x2_SHUTDOWN,时
* 本函数不执行;
* 当本系热备状态为:ENUM_2x2_OFFLINEENUM_2x2_PRE_MASTERENUM_2x2_SLAVE,时
* 本函数被周期执行,但 ENUM_MSG_OUTNET_SAFE 报文不会真实输出;
* 当本系热备状态为:ENUM_2x2_MASTER,时
* 本函数被周期执行,并且所有输出信息被真实输出。
*/
ENUM_CM_RETURN APP_API_MainFunc2(void)
{
/*MSCP_LogMsg("app2\n");*/
/*CM_Sleep(50u);*/
return ENUM_CM_TRUE;
}
/**
* @brief 应用周期主逻辑3
* @return ENUM_CM_RETURN 函数执行结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @details
* 当本系热备状态为:ENUM_2x2_SHUTDOWN,时
* 本函数不执行;
* 当本系热备状态为:ENUM_2x2_OFFLINEENUM_2x2_PRE_MASTERENUM_2x2_SLAVE,时
* 本函数被周期执行,但 ENUM_MSG_OUTNET_SAFE 报文不会真实输出;
* 当本系热备状态为:ENUM_2x2_MASTER,时
* 本函数被周期执行,并且所有输出信息被真实输出。
*/
ENUM_CM_RETURN APP_API_MainFunc3(void)
{
/*MSCP_LogMsg("app3\n");*/
/*CM_Sleep(50u);*/
return ENUM_CM_TRUE;
}
ENUM_CM_RETURN APP_API_MainFunc4(void)
{
/*MSCP_LogMsg("app3\n");*/
/*CM_Sleep(50u);*/
return ENUM_CM_TRUE;
}
/**
* @brief 应用周期主逻辑5
* @return ENUM_CM_RETURN 函数执行结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @details
* 当本系热备状态为:ENUM_2x2_SHUTDOWN,时
* 本函数不执行;
* 当本系热备状态为:ENUM_2x2_OFFLINEENUM_2x2_PRE_MASTERENUM_2x2_SLAVE,时
* 本函数被周期执行,但 ENUM_MSG_OUTNET_SAFE 报文不会真实输出;
* 当本系热备状态为:ENUM_2x2_MASTER,时
* 本函数被周期执行,并且所有输出信息被真实输出。
*/
ENUM_CM_RETURN APP_API_MainFunc5(void)
{
/*MSCP_LogMsg("app3\n");*/
/*CM_Sleep(50u);*/
return ENUM_CM_TRUE;
}
ENUM_CM_RETURN APP_API_MainFunc6(void)
{
/*MSCP_LogMsg("app3\n");*/
/*CM_Sleep(50u);*/
return ENUM_CM_TRUE;
}
/**
* @brief 应用输入处理逻辑
* @return ENUM_CM_RETURN 函数执行结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @note
* 本函数在平台线程的输入阶段被调用
* 注意平台线程在第N周期接收的输入数据,应用线程在第N+1周期才能读取到
*/
ENUM_CM_RETURN APP_API_InputFunc(void)
{
return ENUM_CM_TRUE;
}
/**
* @brief 备系跟随接口
* @param Data 跟随数据数组
* @param Len 跟随数据长度
* @return ENUM_CM_RETURN 函数执行结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @details
* 当本系热备状态为:ENUM_2x2_OFFLINEENUM_2x2_SLAVE,且收到了邻系正确的跟随数据时
* 本函数将在APP_API_MainFunc()之前执行;
* 否则,本函数不执行。
* 应用跟随数据的最大长度不得超过1024*1000字节
* @see :: MSCP_SetFollowData
*/
ENUM_CM_RETURN APP_API_FollowUp(IN const CM_UINT8 Data[MSCP_FOLLOW_BUFF_SIZE], IN CM_UINT32 Len)
{
ENUM_CM_RETURN retVal = ENUM_CM_FALSE;
UINT8 setRtn = 0u;
setRtn = SetCiAppData(Data, Len);
if (1u == setRtn)
{
retVal = ENUM_CM_TRUE;
}
return retVal;
}
ENUM_CM_RECCUSEB Is_Send_ExtendBoard(IN const CM_UINT16 dstDevTypeId)
{
ENUM_CM_RECCUSEB retVal = ENUM_CM_CC; /*返回值*/
CM_UINT8 devType = 0U; /*设备类型*/
CM_UINT8 devId = 0U; /*设备ID*/
CM_UINT16 wAtsGtWayDevTypeId = 0U;
UINT8 chLocalCiType = 0U; /*本联锁属性*/
UINT8 chDstCiType = 0U; /*本联锁属性*/
UINT8 chCldScxCommMode = 0U;
UINT8 chResult = CI_ERROR; /*联锁属性检查结果*/
wAtsGtWayDevTypeId = GetTiocTrnsmtGtwyDevTypeId();
/**使用通控板与ATS网关通信*/
if (dstDevTypeId != wAtsGtWayDevTypeId)
{
devType = (CM_UINT8)((dstDevTypeId >> 8) & 0xFF);
devId = (CM_UINT8)(dstDevTypeId & 0xFF);
chLocalCiType = GetLocalCiType();
chDstCiType = GetCiType(devId);
chCldScxCommMode = GetCiFunctionSwitchConfig(SCX_CLD_INTERFACE_TYPE);
if ((SCX_CLD_SERIAL_PORT_COMM == chCldScxCommMode) && (CI_SYSTEM_TYPE_CI == devType))
{
if (((CI_TYPE_CLD == chLocalCiType) && (CI_TYPE_SCX == chDstCiType)) || ((CI_TYPE_SCX == chLocalCiType) && (CI_TYPE_CLD == chDstCiType)))
{
/*串口通信要求双方一个为车辆段一个为试车线*/
chResult = CI_SUCCESS;
}
else
{
; /*CI类型错误,返回失败*/
}
}
else
{
; /*不为串口通信,此时不对本地CI类型及对方CI类型进行判断*/
}
if ((CI_SYSTEM_TYPE_XIANDI == devType) || (CI_SYSTEM_TYPE_ATS == devType) || (CI_SYSTEM_TYPE_LEU == devType)
|| (CI_SUCCESS == chResult)
|| (CI_SYSTEM_TYPE_VOBC_BACKUP == devType)) /*现地,ATS,LEU,使用串口的相邻CI*/
{
retVal = ENUM_CM_SEB;
}
else if (CI_SYSTEM_TYPE_ITE == devType)
{
retVal = ENUM_CM_CCSEB;
}
else
{
retVal = ENUM_CM_CC;
}
}
else
{
retVal = ENUM_CM_CC;
}
return retVal;
}
/*
* @func: 外网输入ID 红蓝网类型及ID缓存
* @param void
* @return VOID
*/
void SetOutNetPara(UINT8* pRxBuf, UINT32 dwLen, ENUM_OUTNET_CHN_T chOutNetType, UINT16* pOutBuf, INOUT UINT16* pCurLen)
{
UINT16 wSrcId = 0U;
UINT32 dwTmpLen = 0U;
UINT16 tmpAppLen = 0U;
UINT16 objLen = 0U;
UINT16 tempLen = 0U;
UINT16 ii = 0U;
UINT16 gTransmitObjTypeId[TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX] = { 0U };
if ((NULL != pRxBuf) && (NULL != pOutBuf) && (NULL != pCurLen))
{
if ((ENUM_OUTNET_RED == chOutNetType) || (ENUM_OUTNET_EXTEND_RED == chOutNetType)
|| (ENUM_OUTNET_BLUE == chOutNetType) || (ENUM_OUTNET_EXTEND_BLUE == chOutNetType))
{
while (dwTmpLen < dwLen)
{
tmpAppLen = ShortFromChar(&pRxBuf[dwTmpLen]);
if ((tmpAppLen + 2) <= (dwLen - dwTmpLen))
{
wSrcId = ShortFromChar(&pRxBuf[dwTmpLen + 2]);
dwTmpLen += (tmpAppLen + 2);
/*去重*/
for (ii = 0U; ii < objLen; ii++)
{
if (gTransmitObjTypeId[ii] == wSrcId)
{
break;
}
}
if ((ii == objLen) && (TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX > objLen))
{
gTransmitObjTypeId[objLen++] = wSrcId;
}
}
else
{
break;
}
}
tempLen = *pCurLen;
if ((TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX) > (tempLen + objLen))
{
CommonMemCpy((void*)&pOutBuf[tempLen], objLen * sizeof(UINT16), \
(const void*)gTransmitObjTypeId, objLen * sizeof(UINT16));
*pCurLen = tempLen + objLen;
debug_infor_printf("outnet in type len :%d", chOutNetType, objLen);
debug_out_array(0xAA, gTransmitObjTypeId, objLen * sizeof(UINT16));
}
}
else
{
;
}
}
else
{
printf("buf Null\n");
}
}
#if (kPLATFORM==kVXWORKS)
/*
* 功能描述: 处理平台网络数据类型信息
* 参数说明: void
* 返回值 void
*/
void ProcessPlatformNetData(void)
{
UINT16 ii = 0U;
UINT16 wSrcId = 0U;
UINT16 gRedTransmitObjTypeId[TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX] = { 0U };
UINT16 gBlueTransmitObjTypeId[TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX] = { 0U };
MSCP_GetRciTempBuf(gRedTransmitObjTypeId, gBlueTransmitObjTypeId);
debug_infor_printf("\nRED type in cycle:%d", Get2oo2CurCycleNum());
debug_out_array(0xAA, gRedTransmitObjTypeId, TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX * sizeof(UINT16));
debug_infor_printf("\nBlue type in cycle:%d", Get2oo2CurCycleNum());
debug_out_array(0xAA, gBlueTransmitObjTypeId, TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX * sizeof(UINT16));
for (ii = 0; ii < TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX; ii++)
{
wSrcId = gRedTransmitObjTypeId[ii];
SetCiTrnsmitCycNumByNetType((UINT8)(wSrcId >> 8U), (UINT8)(wSrcId & 0x00ffU), TRANSMIT_NET_ATC_RED);
wSrcId = gBlueTransmitObjTypeId[ii];
SetCiTrnsmitCycNumByNetType((UINT8)(wSrcId >> 8U), (UINT8)(wSrcId & 0x00ffU), TRANSMIT_NET_ATC_BLUE);
}
}
ENUM_CM_RETURN AddOneAppCheckData(IN const UINT32 dwDataAddr, IN const UINT16 wDataLen)
{
ENUM_CM_RETURN retVal = ENUM_CM_FALSE; /*返回值*/
CM_UINT32* pTmpDataAdder = NULL;
CM_UINT32 wTmpDataLen = 0u;
pTmpDataAdder = (CM_UINT32*)dwDataAddr;
wTmpDataLen = (CM_UINT32)wDataLen;
if ((NULL != pTmpDataAdder) && (0u != wTmpDataLen))
{
MSCP_MemCheck_Register(pTmpDataAdder, wTmpDataLen);
retVal = ENUM_CM_TRUE;
}
return retVal;
}
ENUM_CM_RETURN AddAppCheckData(UINT32* pConfigDataAdderBuf, UINT16* pConfigDataLenBuf, UINT16 wDataLen)
{
ENUM_CM_RETURN retVal = ENUM_CM_FALSE; /*返回值*/
UINT16 i = 0u;
if ((NULL != pConfigDataAdderBuf) && (NULL != pConfigDataLenBuf) && (0u != wDataLen) && (UINT16_MAX != wDataLen))
{
for (i = 0u; i < wDataLen; i++)
{
retVal = AddOneAppCheckData(pConfigDataAdderBuf[i], pConfigDataLenBuf[i]);
if (ENUM_CM_TRUE != retVal)
{
break;
}
else
{
;/* 无处理 */
}
}
}
else
{
;/* 返回失败 */
}
return retVal;
}
#endif
/*
* 功能描述: 退出运营处理,设置板卡退出
* 参数说明: void
* 返回值 void
*/
void APP_API_ExitOperation(void)
{
UINT8 chExitOpStatus = 0U;
/*退出运营处理*/
Deploy_ExitOperationHandle();
chExitOpStatus = Deploy_GetExitOperateStatus();
if (EXIT_OP_STATUS == chExitOpStatus)
{
MSCP_SetBoardState(ENUM_BOARDSTATE_EXIT); /*设置板卡退出*/
debug_infor_printf("Tell TSCP I AM INTO EXTOPRATION!\n");
}
else
{
/*- 不处理*/
debug_infor_printf("Tell TSCP I AM STAYOPRATION!\n");
}
}
/**
* @brief 输出ats转车数据备用通道判断函数(串口扩展版)。
* @param UINT16 inSrcId UINT16 outSrcId ,UINT16 outDstId
* @details 此函数指针为一个返回值,三个参数。
* 返回值ENUM_CM_RETURN 0x55或0xaa
* 参数1入参CM_UINT16 输入目标Id
* 参数2出参CM_UINT16* 输出源Id
* 参数3出参CM_UINT16* 输出目的Id
*/
ENUM_CM_RETURN SerialOutAtsVobcFunc(UINT16 inDstId IN, UINT16* outSrcId OUT, UINT16* outDstId OUT)
{
ENUM_CM_RETURN retVal = ENUM_CM_FALSE;
UINT8 inDstType = 0U;
inDstType = (UINT8)((inDstId & 0xff00U) >> 8);
if ((CI_SYSTEM_TYPE_VOBC_BACKUP == inDstType) || (CI_SYSTEM_TYPE_ITE == inDstType))
{
*outSrcId = (CI_SYSTEM_TYPE_CI << 8) + GetSystemParaLocalCiId();
*outDstId = GetATSInterfaceTypeId();
retVal = ENUM_CM_TRUE;
}
return retVal;
}
/**
* @brief 输入ats转车数据备用通道判断函数(串口扩展版)。
* @param UINT16 inSrcId
* @details 此函数指针为一个返回值,三个参数。
* 返回值ENUM_CM_RETURN 0x55 true或0xaa false
* 参数1入参CM_UINT16 输入源Id
*/
ENUM_CM_RETURN SerialInVobcAtsFunc(UINT16 inSrcId IN)
{
ENUM_CM_RETURN retVal = ENUM_CM_FALSE;
UINT16 atsBackUpTypeId = 0U;
atsBackUpTypeId = GetATSInterfaceTypeId();
/*判断与列车后备通道0x1300一致*/
if (atsBackUpTypeId == inSrcId)
{
retVal = ENUM_CM_TRUE;
}
return retVal;
}
+114
View File
@@ -0,0 +1,114 @@
/**
* @file APP_API.h
* @brief 应用为平台提供的接口
* @details 一些由应用实现,由平台调用的函数,主要是应用初始化、应用周期逻辑等
* @author GT-BU 平台软件组
* @date 2021.3.1
* @version V1.0
* @copyright TCT
* @note 本文件采用doxygen格式编写,用于生成平台对外接口说明书
*/
#pragma once
#include "CM_Types.h"
#include "CommonTypes.h"
#include "MSCP_APP_API.h"
#ifdef __cplusplus
extern "C" {
#endif
/** 应用周期调用函数集 */
typedef struct
{
ENUM_CM_RETURN(*pApp1)(void); /**< 线程1入口函数 */
ENUM_CM_RETURN(*pApp2)(void); /**< 线程2入口函数 */
ENUM_CM_RETURN(*pApp3)(void); /**< 线程3入口函数 */
ENUM_CM_RETURN(*pApp4)(void); /**< 线程4入口函数 */
ENUM_CM_RETURN(*pApp5)(void); /**< 线程5入口函数 */
}STRU_APP_FUNC_T;
/* 以上使用内网安全通信时需要定义 */
/**
* @brief 应用周期主逻辑
* @return ENUM_CM_RETURN 函数执行结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @note
* 当本系热备状态为:ENUM_2x2_SHUTDOWN,时
* 本函数不执行;
* 当本系热备状态为:ENUM_2x2_OFFLINEENUM_2x2_PRE_MASTERENUM_2x2_SLAVE,时
* 本函数被周期执行,但 ENUM_MSG_OUTNET_SAFE 报文不会真实输出;
* 当本系热备状态为:ENUM_2x2_MASTER,时
* 本函数被周期执行,并且所有输出信息被真实输出。
*/
ENUM_CM_RETURN APP_API_MainFunc(void);
/**
* @brief 应用输入处理逻辑
* @return ENUM_CM_RETURN 函数执行结果
* - ENUM_CM_TRUE 成功
* - ENUM_CM_FALSE 失败(平台立即宕机)
* @note
* 本函数在平台线程的输入阶段被调用
* 注意平台线程在第N周期接收的输入数据,应用线程在第N+1周期才能读取到
*/
ENUM_CM_RETURN APP_API_InputFunc(void);
ENUM_CM_RECCUSEB Is_Send_ExtendBoard(IN const CM_UINT16 dstDevTypeId);
/**
* @brief 输出ats转车数据备用通道判断函数(串口扩展版)。
* @param UINT16 inSrcId UINT16 outSrcId ,UINT16 outDstId
* @details 此函数指针为一个返回值,三个参数。
* 返回值ENUM_CM_RETURN 0x55或0xaa
* 参数1入参CM_UINT16 输入目标Id
* 参数2出参CM_UINT16* 输出源Id
* 参数3出参CM_UINT16* 输出目的Id
*/
ENUM_CM_RETURN SerialOutAtsVobcFunc(UINT16 inSrcId IN, UINT16 * outSrcId OUT, UINT16* outDstId OUT);
/**
* @brief 输入ats转车数据备用通道判断函数(串口扩展版)。
* @param UINT16 inSrcId
* @details 此函数指针为一个返回值,三个参数。
* 返回值ENUM_CM_RETURN 0x55 true或0xaa false
* 参数1入参CM_UINT16 输入源Id
*/
ENUM_CM_RETURN SerialInVobcAtsFunc(UINT16 inSrcId IN);
/*
* @func: 外网输入ID 红蓝网类型及ID缓存
* @param void
* @return VOID
*/
void SetOutNetPara(UINT8* pRxBuf, UINT32 dwLen, ENUM_OUTNET_CHN_T chOutNetType,UINT16* pOutBuf,INOUT UINT16 *pCurLen);
/*
* 功能描述: 处理平台网络数据类型信息
* 参数说明: void
* 返回值 void
*/
void ProcessPlatformNetData(void);
/*
* 功能描述: 退出运营处理
* 参数说明: void
* 返回值 void
*/
void APP_API_ExitOperation(void);
/*
* @brief 提供给平台的初始化函数
* @return无
* @details
* 给平台提供FS版本号,维护ID、内网参数,系统版本号
**/
void APP_API_Data_Init();
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,35 @@
/***************************************************************************/
/* */
/* */
/* CI Software Package (V1.00) */
/* */
/* Program Name: ci_integrate_cofig.h Version: 1.00 */
/* */
/* Designer: qiaorui.liu */
/* */
/* Creat Date: 2015-05-04 */
/* */
/* Release Date: */
/* */
/* Function: This module define all system Macro definition. */
/* */
/* Project Name: NULL */
/* */
/* Change Record: */
/* Date Name Functions */
/* */
/***************************************************************************/
/*预编译指令,用于文件的条件编译*/
#ifndef _CI_INTEGRATE_CONFIG_H
#define _CI_INTEGRATE_CONFIG_H
/*手写版集成内核版本号*/
#define VER_INTE_PROJECT 220 /*项目编号*/
#define VER_INTE_PRODUCT 40 /*产品编号*/
#define VER_INTE_EXE 1 /*可执行编号*/
#define VER_INTE_TIME 77 /*集成次数编号*/
#endif/*endif of #define _CI_INTEGRATE_CONFIG_H*/
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,195 @@
/********************************************************
*
* 文 件 名: 2oo2DataTransferManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2011-06-24
* 作 者: 郭文章
* 功能描述: 联锁应用数据转换头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _APP_DATA_CONVERT_H_
#define _APP_DATA_CONVERT_H_
#include "CommonMemory.h"
#include "../Main/MainApp.h"
#include "../DataManage/DeviceDataManage.h"
#include "../Route/RouteDataManage.h"
#include "../Signal/SignalDataManage.h"
#include "../Switch/SwitchDataManage.h"
#include "../Section/AxisSectionDataManage.h"
#include "../Section/AxisConfigDataManage.h"
#include "../Section/LogicSectionDataManage.h"
#include "../Section/PhysicalSectionDataManage.h"
#include "../Relay/RelayDataManage.h"
#include "../esb/ESBDataManage.h"
#include "../psd/PSDDataManage.h"
#include "../Overlap/OverlapDataManage.h"
#include "../AutoReturn/AutoReturnDataManage.h"
#include "../AutoRoute/AutoRouteDataManage.h"
#include "../AllAutoReturn/AllAutoReturnDataManage.h"
#include "../NonRoute/NonRouteDataManage.h"
#include "../Indicator/IndicatorDataManage.h"
#include "../Garagedoor/GaragedoorDataManage.h"
#include "../spks/SpksDataManage.h"
#include "../WashMachine/WashMachineDataManage.h"
#include "../AllAutoReturn/AllAutoReturnDefine.h"
#include "../EnvelopeManage/EnvelopeManageAPI.h"
#include "../AxisSort/AxisSort_api.h"
#include "../CutoffPoint/CutoffPointDataManage.h"
#include "../Train/TrainDataManage.h"
#include "../WLScreen/WholeLineScreenAPI.h"
#include "../ERROR/ErrorDataManage.h"
#include "../ESB/ESBDataManage.h"
#include "../FloodGate/FloodGateDataManage.h"
#include "../HLHTMsgHead/HLHTHeadContexManage.h"
#include "../NonAutoReturn/NonAutoReturnDataManage.h"
#include "../ParsePack/ParsePackAtsData.h"
#include "../ParsePack/ParsePackGateWayData.h"
#include "../ParsePack/ParsePackCiData.h"
#include "../ParsePack/ParsePackLeuData.h"
#include "../ParsePack/ParsePackVobcData.h"
#include "../ParsePack/ParsePackITEData.h"
#include "../Route/LogicalRouteDataManage.h"
#include "../Route/LongRouteDataManage.h"
#include "../ReverseCut/ReverseCutDataManage.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
* 功能描述: 拷贝结构中有效的id数据
输入参数
const void *pDataStru 结构体指针
UINT16 struNum:数组长度,
UINT16 struLength:结构体长度
输出参数
UINT8 *pCurCiAppDataPointer:当前数据指针,
* 返回值 拷贝数据的长度
* 注 意 ; 只适用于结构体第一个元素为两个字节的ID
*/
UINT32 CopyValidGetDataStru(UINT8 *pCurCiAppDataPointer, const void *pDataStru, UINT16 struNum, UINT16 struLength);
/*
* 功能描述: 拷贝互联互通结构中有效的数据
输入参数
UINT16 struNum:数组长度,
UINT16 struLength:结构体长度
输出参数
UINT8 *pCurCiAppDataPointer:当前数据指针,
* 返回值 拷贝数据的长度
*/
UINT32 CopyValidGetVobcBackHlht(UINT8 *pCurCiAppDataPointer, UINT16 struNum, UINT16 struLength);
/*
* 功能描述: 拷贝结构中有效的通信车id数据
输入参数
VobcToCiDataStruct *pDataStru 结构体指针
UINT16 struNum:数组长度,
输出参数
UINT8 *pCurCiAppDataPointer:当前数据指针,
* 返回值 拷贝数据的长度
* 注 意 ; 只适用于结构体第一个元素为两个字节的ID
*/
UINT32 CopyValidGetVobcDataStru(UINT8* pCurCiAppDataPointer, VobcToCiDataStruct* pDataStru, UINT16 struNum);
/*
* 功能描述:拷贝结构中通信正常的ITE数据
* 参数说明:IteToCiDataStruct pDataStru[ITE_TO_CI_SUM_MAX] ITE结构体数组
* UINT16 struNum 数组长度
* UINT8* pCurCiAppDataPointer 当前数据指针(出参)
* 返 回 值:拷贝的数据长度
* Created By LQ 2024.06.15
*/
UINT32 CopyValidGetIteDataStru(UINT8* pCurCiAppDataPointer, IteToCiDataStruct pDataStru[ITE_TO_CI_SUM_MAX], UINT16 struNum);
/*
* 功能描述: 拷贝结构中逻辑进路数据
输出参数
UINT8 *pCurCiAppDataPointer:当前数据指针,
* 返回值 拷贝数据的长度
* 注 意 ; 只适用于结构体第一个元素为两个字节的ID
*/
UINT32 CopyValidGetLogicRouteDataStru(UINT8* pCurCiAppDataPointer);
/*
* 功能描述: 拷贝有效数据到对应的全局数组
* 参数说明:
输入参数
const UINT8 *pCurCiAppDataPointer:当前数据指针
UINT16 struNum:数组长度,
UINT16 struLength:结构体长度
输出参数
void *pDataStru:结构体指针,
* 返回值 拷贝数据的长度
* 注 意 ; 只适用于结构体第一个元素为两个字节的ID
*/
UINT32 CopyValidSetDataStru(const UINT8 *pCurCiAppDataPointer, void *pDataStru, UINT16 struNum, UINT16 struLength);
/*
* 功能描述: 拷贝有效数据到互联互通结构
输入参数
const UINT8 *pCurCiAppDataPointer:当前数据指针
UINT16 struNum:数组长度,
UINT16 struLength:结构体长度
输出参数
* 返回值 拷贝数据的长度
*/
UINT32 CopyValidSetVobcBackHlht(const UINT8 *pCurCiAppDataPointer, UINT16 struNum, UINT16 struLength);
/*
* 功能描述: 拷贝通信车有效数据到对应的全局数组
* 参数说明:
输入参数
const UINT8 *pCurCiAppDataPointer:当前数据指针
UINT16 struNum:数组长度,
输出参数
VobcToCiDataStruct *pDataStru:结构体指针,
* 返回值 拷贝数据的长度
* 注 意 ; 只适用于结构体第一个元素为两个字节的ID
*/
UINT32 CopyValidSetVobcDataStru(const UINT8* pCurCiAppDataPointer, VobcToCiDataStruct* pDataStru, UINT16 struNum);
/*
* 功能描述:拷贝ITE有效数据到对应的全局数组
* 参数说明:const UINT8 *pCurCiAppDataPointer:当前数据指针
* UINT16 struNum 数组长度
* IteToCiDataStruct pDataStru[ITE_TO_CI_SUM_MAX] ITE结构体数组 (出参)
* 返 回 值:拷贝数据的长度
* Created By LQ 2024.06.15
*/
UINT32 CopyValidSetIteDataStru(const UINT8* pCurCiAppDataPointer, IteToCiDataStruct pDataStru[ITE_TO_CI_SUM_MAX], UINT16 struNum);
/*
* 功能描述: 拷贝逻辑进路有效数据到对应的全局数组
* 参数说明:
输入参数
const UINT8 *pCurCiAppDataPointer:当前数据指针
* 返回值 拷贝数据的长度
* 注 意 ; 只适用于结构体第一个元素为两个字节的ID
*/
UINT32 CopyValidSetLogicRouteDataStru(const UINT8* pCurCiAppDataPointer);
/*
* 功能描述: 获取CI应用数据
* 参数说明: UINT8 *pCiAppDataPointer, CI应用数据指针
* 返回值 void
*/
UINT32 GetCiAppData(UINT8 *pCiAppDataPointer);
/*
* 功能描述: 设置CI应用数据
* 参数说明: UINT8 *pCiAppDataPointer, CI应用数据指针
const UINT32 len,数据长度
* 返回值 void
*/
UINT8 SetCiAppData(const UINT8 *pCiAppDataPointer,const UINT32 len);
#ifdef __cplusplus
}
#endif
#endif
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,416 @@
/********************************************************
*
* 文 件 名: 2oo2InterfaceDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-26
* 作 者: 联锁组
* 功能描述: 安全计算机接口数据管理
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _2OO2_INTERFACE_DATA_MANAGE_H_
#define _2OO2_INTERFACE_DATA_MANAGE_H_
#include "../System/SystemConfigDefine.h"
#include "../System/CiSystemDefine.h"
#include "CommonTypes.h"
#include "CommonQueue.h"
#include "../Transmit/TransmitStateDataManage.h"
#ifdef PLATFORM_2OO2
#include "sfpplatform.h"
#include "RsspWl.h"
#include "FsfbProtcl.h"
#endif
/*上电获取FSIO数据周期数*/
#define START_GET_FSIO_CYCLE_NUM ((UINT16)20) /*上电获取FSIO数据周期数*/
#ifdef __cplusplus
extern "C" {
#endif
/*平台通信状态结构体*/
typedef struct S_PlatComStatusStruct
{
UINT8* SystemType; /*通信的系统设备类型*/
UINT8* SystemNum; /*通信的系统设备数量*/
UINT8* SystemIdBuf[TRANSMIT_OBJECT_DEVICE_SUM_MAX]; /*通信的系统设备ID数组*/
UINT8* CommunicationStatusBuf[TRANSMIT_OBJECT_DEVICE_SUM_MAX]; /*通信状态数组 与ID数组对应*/
} PlatComStatusStruct;
/*全局变量声明*/
extern PlatComStatusStruct PlatComStatusStru[TRANSMIT_OBJECT_SUM_MAX]; /*定义平台通信关系数据结构体*/
extern QueueStruct* FsfbToCiDataQueue; /*Fsfb到CI数据队列*/
extern QueueStruct* CiToFsfbDataQueue; /*CI到Fsfb数据队列*/
extern QueueStruct* ProtocolToCiDataQueue; /*协议到应用的数据队列*/
extern QueueStruct* CiToProtocolDataQueue; /*CI到协议数据队列*/
extern QueueStruct* AtsToCiDataQueue; /*ATS到CI数据队列*/
extern QueueStruct* CiToAtsDataQueue; /*CI到ATS数据队列*/
extern QueueStruct* XianDiToCiDataQueue; /*现地到CI数据队列*/
extern QueueStruct* CiToXianDiDataQueue; /*CI到现地数据队列*/
extern QueueStruct* IoToCiDataQueue; /*IO到CI数据队列*/
extern QueueStruct* CiToIoDataQueue; /*CI到IO数据队列*/
extern QueueStruct* ZcToCiDataQueue; /*ZC到CI数据队列*/
extern QueueStruct* CiToZcDataQueue; /*CI到Zc数据队列*/
extern QueueStruct* LEUToCiDataQueue; /*LEU到CI数据队列*/
extern QueueStruct* CiToLEUDataQueue; /*CI到LEU数据队列*/
extern QueueStruct* VobcToCiDataQueue; /*Vobc到CI数据队列*/
extern QueueStruct* CiToVobcDataQueue; /*CI到Vobc数据队列*/
extern QueueStruct* PlatformToCiDataQueue; /*Platform到CI数据队列*/
extern QueueStruct* CiToPlatformDataQueue; /*CI到platform数据队列*/
extern QueueStruct* PscToCiDataQueue; /*Psc到CI数据队列*/
extern QueueStruct* CiToPscDataQueue; /*CI到Psc数据队列*/
extern QueueStruct* CiRecvFromCiDataQueue; /*CI接受其他CI数据队列*/
extern QueueStruct* CiSendToCiDataQueue; /*CI发送到其他CI数据队列*/
extern QueueStruct* AxisToCiDataQueue; /*Axis到CI数据队列*/
extern QueueStruct* CiToAxisDataQueue; /*CI到Axis数据队列*/
extern QueueStruct* OcToCiDataQueue; /*Oc到Ci的数据队列*/
extern QueueStruct* CiToOcDataQueue; /*Ci到Oc的数据队列*/
extern UINT32* CurCycleNum; /*当前周期号*/
extern UINT32 StartCycleNum; /*上电周期号*/
extern UINT8* PlatComputerId; /*平台本机联锁ID*/
extern UINT8* PlatRunMode; /*平台处理模式*/
extern UINT8* CiAndIoComState; /*联锁与IO通信状态*/
extern UINT8* CiAndLeuComState; /*联锁与LEU通信状态*/
extern UINT8* CiAndZcComState; /*联锁与ZC通信状态*/
extern UINT8* CiAndCiComDeviceNum; /*相邻联锁数量*/
extern UINT8* CiAndCiComIdBuf; /*联锁与联锁通信设备ID*/
extern UINT8* CiAndCiComState; /*联锁与联锁通信状态*/
extern UINT8* PlatSheBeiType; /*平台对外设备类型*/
/*
* 功能描述: 平台初始化
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: 平台ATS到CI接口队列
*/
UINT8 Initial2oo2Interface(void);
/*
* 功能描述: 获取平台通用协议到CI接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: 平台通用协议到CI接口队列
*/
QueueStruct* Get2oo2ProtocolToCiDataQueue(void);
/*
* 功能描述: 获取平台CI到通用协议接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: 平台CI到通用协议接口队列
*/
QueueStruct* Get2oo2CiToProtocolDataQueue(void);
/*
* 功能描述: 获取平台Fsfb到CI接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: 平台CI到Fsfb接口队列
*/
QueueStruct* Get2oo2FsfbToCiDataQueue(void);
/*
* 功能描述: 获取平台CI到FsfbP接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: 平台CI到Fsfb接口队列
*/
QueueStruct* Get2oo2CiToFsfbDataQueue(void);
/*
* 功能描述: 获取平台ATS到CI接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: 平台ATS到CI接口队列
*/
QueueStruct* Get2oo2AtsToCiDataQueue(void);
/*
* 功能描述: 获取平台CI到ATS接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: 平台CI到ATS接口队列
*/
QueueStruct* Get2oo2CiToAtsDataQueue(void);
/*
* 功能描述: 获取平台CI到现地接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: 平台CI到现地接口队列
*/
QueueStruct* Get2oo2CiToXianDiDataQueue(void);
/*
* 功能描述: 获取平台现地到CI接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: 平台现地到CI接口队列
*/
QueueStruct* Get2oo2XianDiToCiDataQueue(void);
/*
* 功能描述: 获取ZC到CI接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: ZC到CI接口队列
*/
QueueStruct* Get2oo2ZcToCiDataQueue(void);
/*
* 功能描述: 获取CI到ZC接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: CI到ZC接口队列
*/
QueueStruct* Get2oo2CiToZcDataQueue(void);
/*
* 功能描述: 获取平台CI从其他CI接收接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: 平台CI接收CI接口队列
*/
QueueStruct* Get2oo2CiRecvCiDataQueue(void);
/*
* 功能描述: 获取CI发送到其他CI接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: CI发送CI接口队列
*/
QueueStruct* Get2oo2CiSendCiDataQueue(void);
/*
* 功能描述: 获取平台IO到CI接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: 平台IO到CI接口队列
*/
QueueStruct* Get2oo2IoToCiDataQueue(void);
/*
* 功能描述: 获取平台CI到IO接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: 平台CI到IO接口队列
*/
QueueStruct* Get2oo2CiToIoDataQueue(void);
/*
* 功能描述: 获取Leu到CI接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: Leu到CI接口队列
*/
QueueStruct* Get2oo2LEUToCiDataQueue(void);
/*
* 功能描述: 获取CI到Leu接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: CI到Leu接口队列
*/
QueueStruct* Get2oo2CiToLEUDataQueue(void);
/*
* 功能描述: 获取CI到Vobc接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: CI到Vobc接口队列
*/
QueueStruct* Get2oo2VobcToCiDataQueue(void);
/*
* 功能描述: 获取CI到Vobc接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: CI到Vobc接口队列
*/
QueueStruct* Get2oo2CiToVobcDataQueue(void);
/*
* 功能描述: 获取CI到Oc接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: CI到Oc接口队列
*/
QueueStruct* Get2oo2CiToOcDataQueue(void);
/*
* 功能描述: 获取PSD到CI接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: PSD到CI接口队列
*/
QueueStruct* Get2oo2PlatformToCiDataQueue(void);
/*
* 功能描述: 获取CI到Psd接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: CI到Psd接口队列
*/
QueueStruct* Get2oo2CiToPlatformDataQueue(void);
/*
* 功能描述: 获取Psc到CI接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: Psc到CI接口队列
*/
QueueStruct* Get2oo2PscToCiDataQueue(void);
/*
* 功能描述: 获取CI到Psc接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: CI到Psc接口队列
*/
QueueStruct* Get2oo2CiToPscDataQueue(void);
/*
* 功能描述: 获取平台周期号
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 平台周期号
*/
UINT32 Get2oo2CurCycleNum(void);
/*
* 功能描述: 获取平台本机ID
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 平台本机ID
*/
UINT8 Get2oo2ComputerId(void);
/*
* 功能描述: 获取平台本机处理模式
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 平台本机处理模式
*/
UINT8 Get2oo2ProcessMode(void);
/*
* 功能描述: 获取平台其他主机处理模式
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 平台其他主机处理模式
*/
UINT8 Get2oo2OhterProcessMode(void);
/*
* 功能描述: 获取CI与其他设备通信的该设备数量
* 参数说明: const UINT8 systemType, 系统类型
* 返回值 通信设备数目
*/
UINT8 Get2oo2CiAndOtherSysCommNum(const UINT8 systemType);
/*
* 功能描述: 获取CI与IO通信状态
* 参数说明: void
* 返回值
*/
UINT8 Get2oo2CiAndIoCommState(void);
/*
* 功能描述: 获取起始周期号
* 参数说明: void
* 返回值
*/
UINT32 Get2oo2StartCycleNum(void);
/*
* 功能描述: 获取平台设备类型
* 参数说明: void
* 返回值
*/
UINT8 Get2oo2SheBeiType(void);
/*
* 功能描述: 获取Axis到CI接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: Axis到CI接口队列
*/
QueueStruct* Get2oo2AxisToCiDataQueue(void);
/*
* 功能描述: 获取CI到Axis接口队列
* 参数说明: void
* 返回值 : NULL: 获取数据失败
* !NULL: CI到Axis接口队列
*/
QueueStruct* Get2oo2CiToAxisDataQueue(void);
/*
* 功能描述: 将队列中的数据传输出去
* 参数说明: UINT8* thisString, 本周期数据
* 返回值 0: 打印失败
* 1: 打印成功
*/
void SendOut_LogBuff();
void debug_infor_printf(char* debug_string, ...);
void debug_out_array(UINT8 mode, UINT8* debug_array, UINT16 len);
UINT8 OutnetSafeRecv(UINT16* srcTypeId, UINT16* srcLogicId, UINT8* data, UINT32* dataLen, UINT32 dataMaxLen);
UINT8 InnetSafeRecv(UINT16* srcTypeId, UINT16* srcLogicId, UINT8* data, UINT32* dataLen, UINT32 dataMaxLen);
UINT8 OutnetSafeSend(UINT16 dstTypeId, UINT16 dstLogicId, UINT8* data, UINT32 dataLen);
UINT8 InnetSafeSend(UINT16 dstTypeId, UINT16 dstLogicId, UINT8* data, UINT32 dataLen);
UINT32 InnetRawIoRecv(UINT8* data, UINT32 dataMaxLen);
UINT8 InnetRawIoSend(UINT8* data, UINT32 dataLen);
UINT32 InnetRawLeuRecv(UINT16* srcTypeId, UINT8* data, UINT32 dataMaxLen);
UINT8 InnetRawLeuSend(UINT16 dstTypeId, UINT8* data, UINT32 dataLen);
void InnetHeartFrameRecv(OUT UINT8* CC1_data, OUT UINT8* CC2_data, OUT UINT8* SEB1_data, OUT UINT8* SEB2_data, OUT UINT8* CC1_commFFlag, OUT UINT8* CC2_commFFlag, OUT UINT8* SEB1_commFFlag, OUT UINT8* SEB2_commFFlag);
UINT8 InnetChannelIODataRecv(UINT8* ioData);
#if (kPLATFORM == kWINDOWS)
#define TMP_BUF_LEN 10000
static UINT8 gTempDataBuf[TMP_BUF_LEN] = {0}; /*数据临时数组*/
#endif
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,385 @@
/********************************************************
*
* 文 件 名: AllAutoReturnConfigDataManage.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2014-10-11
* 作 者: 联锁组
* 功能描述: 全自动折返配置数据管理
* 修改记录:
*
********************************************************/
#include "../AllAutoReturn/AllAutoReturnConfigDataManage.h"
AllAutoReturnConfigDataStruct AllAutoReturnConfigDataStru[ALL_AUTO_RETURN_SUM_MAX]; /*定义全自动折返数据配置结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
UINT16 LocalCiAllAutoReturnIdBuf[ALL_AUTO_RETURN_SUM_MAX] = {0u}; /*定义本地联锁全自动折返进路ID映射数组*/
INT16 AllAutoReturnCurSum = 0; /*全自动折返当前总数*/
/*
* 功能描述: 获取全自动折返进路当前总数
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 全自动折返进路当前总数
*/
UINT16 GetAllAutoReturnRouteCurSum(void)
{
UINT16 allAutoReturnCurSum = 0u;
if ((INT16)ALL_AUTO_RETURN_SUM_MAX <= AllAutoReturnCurSum)
{
allAutoReturnCurSum = ALL_AUTO_RETURN_SUM_MAX;
}
else if (0 > AllAutoReturnCurSum)
{
allAutoReturnCurSum = 0u;
}
else
{
allAutoReturnCurSum = (UINT16)AllAutoReturnCurSum;
}
return allAutoReturnCurSum;
}
/*
* 功能描述: 获取指定数组下标对应的全自动折返进路ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 全自动折返进路ID
*/
UINT16 GetAllAutoReturnRouteId(const UINT16 bufIndex)
{
UINT16 localCiAllAutoReturnId = CI_ERROR;
UINT16 routeCurSum = 0u;
routeCurSum = GetAllAutoReturnRouteCurSum();
if (bufIndex < routeCurSum)
{
localCiAllAutoReturnId = LocalCiAllAutoReturnIdBuf[bufIndex];
}
return localCiAllAutoReturnId;
}
/*
* 功能描述: 获取指定ID全自动折返进路数组下标
* 参数说明: const UINT16 allAutoReturnId, 全自动折返ID
* 返回值 0: 获取数据失败
* >0: 全自动折返进路ID
*/
UINT16 GetAllAutoReturnBufIndex(const UINT16 allAutoReturnId)
{
UINT16 index = 0u;
if ((allAutoReturnId >= 1u) && (allAutoReturnId < ALL_AUTO_RETURN_SUM_MAX))
{
index = allAutoReturnId;
}
else
{
index = ALL_AUTO_RETURN_SUM_MAX;
}
return index;
}
/*
* 功能描述: 获取指定ID全自动折返包含进路数目
* 参数说明: const UINT16 allAutoReturnId, 全自动折返ID
* 返回值 0: 获取数据失败
* >0: 进路数目
*/
UINT8 GetAllAutoReturnIncludeRouteSum(const UINT16 allAutoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 routeSum = CI_ERROR;
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取全自动折返数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
routeSum = AllAutoReturnConfigDataStru[bufIndex].RouteSum;
}
return routeSum;
}
/*
* 功能描述: 获取指定ID全自动折返所属联锁ID
* 参数说明: const UINT16 allAutoReturnId, 全自动折返ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
*/
UINT8 GetAllAutoReturnRouteBelongCiId(const UINT16 allAutoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 belongCiId = CI_ERROR;
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取全自动折返数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
belongCiId = AllAutoReturnConfigDataStru[bufIndex].BelongCiId;
}
return belongCiId;
}
/*
* 功能描述: 获取指定ID全自动折返包含进路ID数组
* 参数说明: const UINT8 allAutoReturnId, 全自动折返ID
* 返回值 0: 获取数据失败
* >0: 进路ID数组
*/
UINT16* GetAllAutoReturnIncludeRouteBuf(const UINT16 allAutoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* routeIdBuf = NULL;
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取全自动折返数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
routeIdBuf = AllAutoReturnConfigDataStru[bufIndex].RouteIdBuf;
}
return routeIdBuf;
}
/*
* 功能描述: 获取指定ID全自动折返结构中折出进路Id数组
* 参数说明: const UINT16 allAutoReturnId, 全自动折返ID
* 返回值 0: 获取数据失败
* >0: 进路ID
*/
UINT16* GetAllAutoReturnRebackRouteBuf(const UINT16 allAutoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* rebackRouteIdBuf = NULL;
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取全自动折返数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
rebackRouteIdBuf = AllAutoReturnConfigDataStru[bufIndex].RebackRouteIdBuf;
}
return rebackRouteIdBuf;
}
/*
* 功能描述: 获取指定ID全自动折返结构中折出进路Id数目
* 参数说明: const UINT16 allAutoReturnId, 全自动折返ID
* 返回值 0: 获取数据失败
* >0: 进路ID
*/
UINT8 GetAllAutoReturnRebackRouteSum(const UINT16 allAutoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 rebackRouteSum = CI_ERROR;
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取全自动折返数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
rebackRouteSum = AllAutoReturnConfigDataStru[bufIndex].RebackRouteSum;
}
return rebackRouteSum;
}
/*
* 功能描述: 整理读入的全自动折返进路配置数据
* 参数说明: 无
* 返回值 1,整理成功
* 0,整理失败
*/
UINT8 AllAutoReturnConfigDataManage(void)
{
UINT16 ii = 0u; /*游标*/
UINT16 jj = 0u; /*游标*/
UINT16 allAutoReturnConfigDataSum = 0u; /*全自动折返进路设备配置数据总数*/
UINT8 returnValue = CI_SUCCESS;
/*保存全自动折返进路Id索引数组*/
allAutoReturnConfigDataSum = GetAllAutoReturnRouteCurSum();
if (allAutoReturnConfigDataSum >= ALL_AUTO_RETURN_SUM_MAX)
{/*配置数据总数错误*/
returnValue = CI_ERROR;
}
else
{
for (ii = 0u; ii < ALL_AUTO_RETURN_SUM_MAX; ii++)
{
if (jj == allAutoReturnConfigDataSum)
{/*allAutoReturnConfigDataSum为0表示数据没有配置全自动折返进路,allAutoReturnConfigDataSum大于0表示遍历有效数据完毕*/
break;
}
if (AllAutoReturnConfigDataStru[ii].BelongCiId == GetSystemParaLocalCiId())
{/*该部分为有效数据*/
LocalCiAllAutoReturnIdBuf[jj] = AllAutoReturnConfigDataStru[ii].AllAutoReturnId;
jj++;
}
}
}
return returnValue;
}
/*
* 功能描述: 获取全自动折返进路抵触自动通过进路数目
* 参数说明: const UINT16 allAutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAllAutoRtnOppRouteIdSum(const UINT16 allAutoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 returnValue = CI_ERROR;
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnOpposedRouteIdSum;
}
return returnValue;
}
/*
* 功能描述: 获取全自动折返进路抵触自动通过进路数组
* 参数说明: const UINT16 allAutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAllAutoRtnOppRouteIdBuf(const UINT16 allAutoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* returnValue = NULL;
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnOpposedRouteIdBuf;
}
return returnValue;
}
/*
* 功能描述: 获取全自动折返进路抵触自动折返进路数目
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAllAutoRtnOppReturnIdSum(const UINT16 allAutoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 returnValue = CI_ERROR;
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnOpposedReturnIdSum;
}
return returnValue;
}
/*
* 功能描述: 获取全自动折返进路抵触自动折返进路数组
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAllAutoRtnOppReturnIdBuf(const UINT16 allAutoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* returnValue = NULL;
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnOpposedReturnIdBuf;
}
return returnValue;
}
/*
* 功能描述: 获取全自动折返进路抵触全自动折返进路数目
* 参数说明: const UINT16 allAutoReturnId, 全自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAllAutoRtnOppAllReturnIdSum(const UINT16 allAutoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 returnValue = CI_ERROR;
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnOpposedAllRtnIdSum;
}
return returnValue;
}
/*
* 功能描述: 获取全自动折返进路抵触全自动折返进路数组
* 参数说明: const UINT16 allAutoReturnId, 全自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAllAutoRtnOppAllRtnIdBuf(const UINT16 allAutoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* returnValue = NULL;
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnOpposedAllRtnIdBuf;
}
return returnValue;
}
/*
* 功能描述: 获取全自动折返进路中与折入抵触折出进路数目
* 参数说明: const UINT16 allAutoReturnId, 全自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAllAutoRtnInOppOutIdSum(const UINT16 allAutoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 returnValue = CI_ERROR;
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnInOpposedOutSum;
}
return returnValue;
}
/*
* 功能描述: 获取全自动折返进路中与折入抵触折出进路数组
* 参数说明: const UINT16 routeId, 折入进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组
*/
UINT16* GetAllAutoRtnInOppOutIdBuf(const UINT16 allAutoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* returnValue = NULL;
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
returnValue = AllAutoReturnConfigDataStru[bufIndex].AllAutoReturnInOpposedOutBuf;
}
return returnValue;
}
@@ -0,0 +1,195 @@
/********************************************************
*
* 文 件 名: AllAutoReturnConfigDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2014-10-11
* 作 者: 联锁组
* 功能描述: 全自动折返配置数据管理头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _ALLAUTORETURN_CONFIG_DATA_MANAGE_H_
#define _ALLAUTORETURN_CONFIG_DATA_MANAGE_H_
#include "AllAutoReturnDefine.h"
#include "../Route/RouteDefine.h"
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#include "../System/SystemParameterManage.h"
#ifdef __cplusplus
extern "C" {
#endif
/*全自动折返配置数据结构体*/
typedef struct S_AllAutoReturnConfigDataStruct
{
UINT16 AllAutoReturnId; /*全自动折返ID (配置字段)*/
UINT8 BelongCiId; /*所属联锁ID*/
UINT8 RouteSum; /*全自动折返包含进路数目 (配置字段)*/
UINT16 RouteIdBuf[ALL_AUTO_RETURN_INCLROUTE_SUM_MAX]; /*全自动折返进路ID数组 (配置字段)*/
UINT16 RebackRouteIdBuf[ALL_AUTO_RETURN_REBACKROUTE_SUM_MAX]; /*全自动折返包含折出进路数组(配置字段)*/
UINT8 RebackRouteSum; /*全自动折返包含折出进路数量(配置字段)*/
UINT8 AllAutoReturnOpposedReturnIdSum; /*全自动折返抵触自动折返进路数目 (配置字段)*/
UINT16 AllAutoReturnOpposedReturnIdBuf[ROUTE_OPPOSED_ROUTE_SUM_MAX]; /*全自动折返抵触自动折返进路ID数组 (配置字段)*/
UINT8 AllAutoReturnOpposedRouteIdSum; /*全自动折返进路抵触自动进路数目 (配置字段)*/
UINT16 AllAutoReturnOpposedRouteIdBuf[ROUTE_OPPOSED_ROUTE_SUM_MAX]; /*全自动折返进路抵触自动进路ID数组 (配置字段)*/
UINT8 AllAutoReturnOpposedAllRtnIdSum; /*全自动折返进路抵触全自动折返进路数目 (配置字段)*/
UINT16 AllAutoReturnOpposedAllRtnIdBuf[ROUTE_OPPOSED_ROUTE_SUM_MAX]; /*全自动折返进路抵触全自动折返进路ID数组 (配置字段)*/
UINT16 AllAutoReturnInOpposedOutBuf[ROUTE_OPPOSED_ROUTE_SUM_MAX]; /*全自动折返进路中与折入进路抵触折出进路ID数组 (配置字段)*/
UINT8 AllAutoReturnInOpposedOutSum; /*全自动折返进路中与折入进路抵触折出进路ID数目 (配置字段)*/
} AllAutoReturnConfigDataStruct;
/*全局变量声明*/
extern AllAutoReturnConfigDataStruct AllAutoReturnConfigDataStru[ALL_AUTO_RETURN_SUM_MAX]; /*定义全自动折返数据配置结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
extern UINT16 LocalCiAllAutoReturnIdBuf[ALL_AUTO_RETURN_SUM_MAX]; /*定义本地联锁全自动折返进路ID映射数组*/
extern INT16 AllAutoReturnCurSum; /*全自动折返当前总数*/
/*
* 功能描述: 获取全自动折返进路当前总数
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 全自动折返进路当前总数
*/
UINT16 GetAllAutoReturnRouteCurSum(void);
/*
* 功能描述: 获取指定数组下标对应的全自动折返进路ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 全自动折返进路ID
*/
UINT16 GetAllAutoReturnRouteId(const UINT16 bufIndex);
/*
* 功能描述: 获取指定ID全自动折返进路数组下标
* 参数说明: const UINT16 allAutoReturnId, 全自动折返ID
* 返回值 0: 获取数据失败
* >0: 全自动折返进路ID
*/
UINT16 GetAllAutoReturnBufIndex(const UINT16 allAutoReturnId);
/*
* 功能描述: 获取指定ID全自动折返包含进路数目
* 参数说明: const UINT16 allAutoReturnId, 全自动折返ID
* 返回值 0: 获取数据失败
* >0: 进路数目
*/
UINT8 GetAllAutoReturnIncludeRouteSum(const UINT16 allAutoReturnId);
/*
* 功能描述: 获取指定ID全自动折返所属联锁ID
* 参数说明: const UINT16 allAutoReturnId, 全自动折返ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
*/
UINT8 GetAllAutoReturnRouteBelongCiId(const UINT16 allAutoReturnId);
/*
* 功能描述: 获取指定ID全自动折返包含进路ID数组
* 参数说明: const UINT16 allAutoReturnId, 全自动折返ID
* 返回值 0: 获取数据失败
* >0: 进路ID数组
*/
UINT16* GetAllAutoReturnIncludeRouteBuf(const UINT16 allAutoReturnId);
/*
* 功能描述: 获取指定ID全自动折返结构中折出进路Id数组
* 参数说明: const UINT16 allAutoReturnId, 全自动折返ID
* 返回值 0: 获取数据失败
* >0: 进路ID
*/
UINT16* GetAllAutoReturnRebackRouteBuf(const UINT16 allAutoReturnId);
/*
* 功能描述: 获取指定ID全自动折返结构中折出进路Id数目
* 参数说明: const UINT16 allAutoReturnId, 全自动折返ID
* 返回值 0: 获取数据失败
* >0: 进路ID
*/
UINT8 GetAllAutoReturnRebackRouteSum(const UINT16 allAutoReturnId);
/*
* 功能描述: 整理读入的全自动折返进路配置数据
* 参数说明: 无
* 返回值 1,整理成功
* 0,整理失败
*/
UINT8 AllAutoReturnConfigDataManage(void);
/*
* 功能描述: 获取全自动折返进路抵触自动通过进路数目
* 参数说明: const UINT16 allAutoReturnId, 全自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAllAutoRtnOppRouteIdSum(const UINT16 allAutoReturnId);
/*
* 功能描述: 获取全自动折返进路抵触自动通过进路数组
* 参数说明: const UINT16 allAutoReturnId, 全自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAllAutoRtnOppRouteIdBuf(const UINT16 allAutoReturnId);
/*
* 功能描述: 获取全自动折返进路抵触自动折返进路数目
* 参数说明: const UINT16 allAutoReturnId, 全自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAllAutoRtnOppReturnIdSum(const UINT16 allAutoReturnId);
/*
* 功能描述: 获取全自动折返进路抵触自动折返进路数组
* 参数说明: const UINT16 allAutoReturnId, 全自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAllAutoRtnOppReturnIdBuf(const UINT16 allAutoReturnId);
/*
* 功能描述: 获取全自动折返进路抵触全自动折返进路数目
* 参数说明: const UINT16 allAutoReturnId, 全自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAllAutoRtnOppAllReturnIdSum(const UINT16 allAutoReturnId);
/*
* 功能描述: 获取全自动折返进路抵触全自动折返进路数组
* 参数说明: const UINT16 allAutoReturnId, 全自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAllAutoRtnOppAllRtnIdBuf(const UINT16 allAutoReturnId);
/*
* 功能描述: 获取全自动折返进路中与折入抵触折出进路数目
* 参数说明: const UINT16 allAutoReturnId, 全自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAllAutoRtnInOppOutIdSum(const UINT16 allAutoReturnId);
/*
* 功能描述: 获取全自动折返进路中与折入抵触折出进路数组
* 参数说明: const UINT16 allAutoReturnId, 折入进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAllAutoRtnInOppOutIdBuf(const UINT16 allAutoReturnId);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,114 @@
/********************************************************
*
* 文 件 名: AllAutoReturnDataManage.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2014-10-11
* 作 者: 联锁组
* 功能描述: 全自动折返数据管理
* 修改记录:
*
********************************************************/
#include "../AllAutoReturn/AllAutoReturnDataManage.h"
AllAutoReturnDataStruct AllAutoReturnDataStru[ALL_AUTO_RETURN_SUM_MAX]; /*定义自动折返数据结构体*/
/*
* 功能描述: 获取指定ID自动折返办理标志
* 参数说明: const UINT8 allAutoReturnId, 自动折返ID
* 返回值 0: 获取数据失败
* >0: 办理标志
*/
UINT8 GetAllAutoReturnSetFlag(const UINT16 allAutoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 allAutoReturnSetFlag = CI_ERROR;
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取自动折返数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
allAutoReturnSetFlag = AllAutoReturnDataStru[bufIndex].AllAutoReturnSetFlag;
}
return allAutoReturnSetFlag;
}
/*
* 功能描述: 设置指定ID全自动折返办理标志
* 参数说明: const UINT8 allAutoReturnId, 全自动折返ID
* const UINT8 setState, 办理标志
* 返回值
*
*/
void SetAllAutoReturnSetFlag(const UINT16 allAutoReturnId, const UINT8 setState)
{
UINT8 ii = 0u;
UINT8 jj = 0u;
UINT8 autoIncludeRouteSum = 0u;
UINT16 *pAutoIncludeRouteIdbuf = NULL;
UINT8 autoSetFlag = CI_ERROR;
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取自动折返数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
autoIncludeRouteSum = GetAllAutoReturnIncludeRouteSum(allAutoReturnId);
pAutoIncludeRouteIdbuf = GetAllAutoReturnIncludeRouteBuf(allAutoReturnId);
if (ALL_AUTO_RETURN_SET_YES == setState)
{
autoSetFlag = CI_ERROR;
/*设置自动属性*/
for (ii = 0u; ii < autoIncludeRouteSum; ii++)
{
autoSetFlag = SetRouteAllAutoReturnId(pAutoIncludeRouteIdbuf[ii],allAutoReturnId);
if (autoSetFlag == CI_ERROR)
{
/*设置失败*/
break;
}
}
if (autoSetFlag == CI_ERROR)
{
for (jj = 0u; jj < ii; jj++)
{
/*清除已设置Id*/
(void)SetRouteAllAutoReturnId(pAutoIncludeRouteIdbuf[jj],0u);
}
}
else
{
AllAutoReturnDataStru[bufIndex].AllAutoReturnSetFlag = ALL_AUTO_RETURN_SET_YES;
}
}
else if (ALL_AUTO_RETURN_SET_NO == setState)
{
for (ii = 0; ii < autoIncludeRouteSum; ii++)
{
/*清除已设置Id*/
(void)SetRouteAllAutoReturnId(pAutoIncludeRouteIdbuf[ii],0u);
}
AllAutoReturnDataStru[bufIndex].AllAutoReturnSetFlag = ALL_AUTO_RETURN_SET_NO;
}
else
{
/*不做处理*/
}
}
}
@@ -0,0 +1,61 @@
/********************************************************
*
* 文 件 名: AllAutoReturnDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2014-10-11
* 作 者: 联锁组
* 功能描述: 全自动折返数据管理头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _ALLAUTORETURN_DATA_MANAGE_H_
#define _ALLAUTORETURN_DATA_MANAGE_H_
#include "AllAutoReturnDefine.h"
#include "AllAutoReturnConfigDataManage.h"
#include "CommonTypes.h"
#include "../DataManage/DeviceDataManage.h"
#ifdef __cplusplus
extern "C" {
#endif
/*全自动折返数据结构体*/
typedef struct S_AllAutoReturnDataStruct
{
UINT16 AllAutoReturnId; /*全自动折返ID (初始化字段)*/
UINT8 AllAutoReturnSetFlag; /*全自动折设置标志(未设置/设置) (动态字段)*/
} AllAutoReturnDataStruct;
/*全局变量声明*/
extern AllAutoReturnDataStruct AllAutoReturnDataStru[ALL_AUTO_RETURN_SUM_MAX]; /*定义自动折返数据结构体*/
/*
* 功能描述: 获取指定ID全自动折返办理标志
* 参数说明: const UINT8 allAutoReturnId, 全自动折返ID
* 返回值 0: 获取数据失败
* >0: 办理标志
*/
UINT8 GetAllAutoReturnSetFlag(const UINT16 allAutoReturnId);
/*
* 功能描述: 设置指定ID全自动折返办理标志
* 参数说明: const UINT8 allAutoReturnId, 全自动折返ID
* const UINT8 setState, 办理标志
* 返回值
*
*/
void SetAllAutoReturnSetFlag(const UINT16 allAutoReturnId, const UINT8 setState);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,45 @@
/********************************************************
*
* 文 件 名: AllAutoReturnDefine.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2014-10-11
* 作 者: 联锁组
* 功能描述: 全自动折返配置头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _ALLAUTORETURN_CONFIG_H_
#define _ALLAUTORETURN_CONFIG_H_
/*全自动折返总数最大值*/
#define ALL_AUTO_RETURN_SUM_MAX ((UINT16)30) /*定义全自动折返数量最大值*/
/*最大值定义*/
#define ALL_AUTO_RETURN_INCLROUTE_SUM_MAX ((UINT16)10) /*定义全自动折返包含进路数量最大值*/
#define ALL_AUTO_RETURN_REBACKROUTE_SUM_MAX ((UINT16)2) /*定义全自动折返包含折出进路数量最大值*/
/*自动折返进路属性*/
#define ALL_AUTO_RETURN_ROUTE_TYPE_IN ((UINT8)0x55) /*折入*/
#define ALL_AUTO_RETURN_ROUTE_TYPE_OUT ((UINT8)0xAA) /*折出*/
#define ALL_AUTO_RETURN_ROUTE_TYPE_VAIN ((UINT8)0xFF) /*无效*/
/*自动折返办理标志*/
#define ALL_AUTO_RETURN_SET_NO ((UINT8)0x55) /*未办理*/
#define ALL_AUTO_RETURN_SET_YES ((UINT8)0xaa) /*办理*/
#define ALL_AUTO_RETURN_DICHU_AUTOR ((UINT8)0x01) /*抵触的自动通过进路已办理*/
#define ALL_AUTO_RETURN_DICHU_AUTORETR ((UINT8)0x04) /*抵触的自动折返进路已办理*/
#define ALL_AUTO_RETURN_DICHU_ALLAUTOR ((UINT8)0x05) /*抵触的全自动折返进路已办理*/
#define ALL_AUTO_RETURN_DICHU_COMMR ((UINT8)0x06) /*抵触的普通进路已办理*/
#define ALL_AUTO_RETURN_HAVE_BLOCK ((UINT8)0x02) /*全自动折返进路存在封锁*/
#define ALL_AUTO_RETURN_FLOOD_STATE_ERR ((UINT8)0x03) /*全自动折返进路存在防淹门不满足*/
#endif
@@ -0,0 +1,328 @@
/********************************************************
*
* 文 件 名: AutoReturnConfigDataManage.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-20
* 作 者: 联锁组
* 功能描述: 自动折返配置数据管理
* 修改记录:
*
********************************************************/
#include "../AutoReturn/AutoReturnConfigDataManage.h"
AutoReturnConfigDataStruct AutoReturnConfigDataStru[AUTO_RETURN_SUM_MAX]; /*定义自动折返数据配置结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
UINT16 LocalCiAutoReturnIdBuf[AUTO_RETURN_SUM_MAX] = {0u}; /*定义本地联锁自动折返进路ID映射数组*/
INT16 AutoReturnCurSum = 0; /*自动折返当前总数*/
/*
* 功能描述: 获取自动折返进路当前总数
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 自动折返进路当前总数
*/
UINT16 GetAutoReturnRouteCurSum(void)
{
UINT16 autoReturnCurSum = 0u;
if ((INT16)AUTO_RETURN_SUM_MAX <= AutoReturnCurSum)
{
autoReturnCurSum = AUTO_RETURN_SUM_MAX;
}
else if (0 > AutoReturnCurSum)
{
autoReturnCurSum = 0u;
}
else
{
autoReturnCurSum = (UINT16)AutoReturnCurSum;
}
return autoReturnCurSum;
}
/*
* 功能描述: 获取指定数组下标对应的自动折返进路ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 自动折返进路ID
*/
UINT16 GetAutoReturnRouteId(const UINT16 bufIndex)
{
UINT16 returnValue = CI_ERROR;
if (bufIndex < GetAutoReturnRouteCurSum())
{
returnValue = LocalCiAutoReturnIdBuf[bufIndex];
}
return returnValue;
}
/*
* 功能描述: 获取指定ID自动折返进路数组下标
* 参数说明: const UINT16 autoReturnId, 自动折返ID
* 返回值 0: 获取数据失败
* >0: 自动折返进路ID
*/
UINT16 GetAutoReturnBufIndex(const UINT16 autoReturnId)
{
UINT16 returnValue = AUTO_RETURN_SUM_MAX;
if ((autoReturnId >= 1u) && (autoReturnId < AUTO_RETURN_SUM_MAX))
{
returnValue = autoReturnId;
}
return returnValue;
}
/*
* 功能描述: 获取指定ID自动折返包含进路数目
* 参数说明: const UINT16 autoReturnId, 自动折返ID
* 返回值 0: 获取数据失败
* >0: 进路数目
*/
UINT8 GetAutoReturnIncludeRouteSum(const UINT16 autoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 returnValue = CI_ERROR;
bufIndex = GetAutoReturnBufIndex(autoReturnId); /*获取自动折返数组下标*/
if (bufIndex < AUTO_RETURN_SUM_MAX)
{
returnValue = AutoReturnConfigDataStru[bufIndex].RouteSum;
}
return returnValue;
}
/*
* 功能描述: 获取指定ID自动折返所属联锁ID
* 参数说明: const UINT16 autoReturnId, 自动折返ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
*/
UINT8 GetAutoReturnRouteBelongCiId(const UINT16 autoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 returnValue = CI_ERROR;
bufIndex = GetAutoReturnBufIndex(autoReturnId); /*获取自动折返数组下标*/
if (bufIndex < AUTO_RETURN_SUM_MAX)
{
returnValue = AutoReturnConfigDataStru[bufIndex].BelongCiId;
}
return returnValue;
}
/*
* 功能描述: 获取指定ID自动折返包含进路ID数组
* 参数说明: const UINT8 autoReturnId, 自动折返ID
* 返回值 0: 获取数据失败
* >0: 进路ID数组
*/
UINT16* GetAutoReturnIncludeRouteBuf(const UINT16 autoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* returnValue = NULL;
bufIndex = GetAutoReturnBufIndex(autoReturnId); /*获取自动折返数组下标*/
if (bufIndex < AUTO_RETURN_SUM_MAX)
{
returnValue = AutoReturnConfigDataStru[bufIndex].RouteIdBuf;
}
return returnValue;
}
/*
* 功能描述: 获取指定ID自动折返结构中折出进路Id
* 参数说明: const UINT16 autoReturnId, 自动折返ID
* 返回值 0: 获取数据失败
* >0: 进路ID
*/
UINT16 GetAutoReturnRebackRouteId(const UINT16 autoReturnId)
{
UINT8 includeRouteSum = 0u;
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 returnValue = CI_ERROR;
bufIndex = GetAutoReturnBufIndex(autoReturnId); /*获取自动折返数组下标*/
if (bufIndex < AUTO_RETURN_SUM_MAX)
{
includeRouteSum = AutoReturnConfigDataStru[bufIndex].RouteSum;
if ((includeRouteSum >= 1u) && (includeRouteSum < AUTO_RETURN_INCLROUTE_SUM_MAX))
{
returnValue = AutoReturnConfigDataStru[bufIndex].RouteIdBuf[includeRouteSum - 1U];
}
}
return returnValue;
}
/*
* 功能描述: 整理读入的自动折返进路配置数据
* 参数说明: 无
* 返回值 1,整理成功
* 0,整理失败
*/
UINT8 AutoReturnConfigDataManage(void)
{
UINT16 ii = 0u; /*游标*/
UINT16 jj = 0u; /*游标*/
UINT16 autoReturnConfigDataSum = 0u; /*自动折返进路设备配置数据总数*/
UINT8 returnValue = CI_SUCCESS;
UINT8 localCiId = 0u;
localCiId = GetSystemParaLocalCiId();
/*保存自动折返进路Id索引数组*/
autoReturnConfigDataSum = GetAutoReturnRouteCurSum();
if (autoReturnConfigDataSum >= AUTO_RETURN_SUM_MAX)
{/*配置数据总数错误*/
returnValue = CI_ERROR;
}
else
{
for (ii = 0u; ii < AUTO_RETURN_SUM_MAX; ii++)
{
if (jj == autoReturnConfigDataSum)
{/*遍历有效数据完毕*/
break;
}
if (AutoReturnConfigDataStru[ii].BelongCiId == localCiId)
{/*该部分为有效数据*/
LocalCiAutoReturnIdBuf[jj] = AutoReturnConfigDataStru[ii].AutoReturnId;
jj++;
}
}
}
return returnValue;
}
/*
* 功能描述: 获取自动折返进路抵触自动通过进路数目
* 参数说明: const UINT16 autoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAutoReturnOpposedRouteIdSum(const UINT16 autoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 returnValue = CI_ERROR;
bufIndex = GetAutoReturnBufIndex(autoReturnId); /*获取数组下标*/
if (bufIndex < AUTO_RETURN_SUM_MAX)
{
returnValue = AutoReturnConfigDataStru[bufIndex].AutoReturnOpposedRouteIdSum;
}
return returnValue;
}
/*
* 功能描述: 获取自动折返进路抵触自动通过进路数组
* 参数说明: const UINT16 autoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAutoReturnOpposedRouteIdBuf(const UINT16 autoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* returnValue = NULL;
bufIndex = GetAutoReturnBufIndex(autoReturnId); /*获取数组下标*/
if (bufIndex < AUTO_RETURN_SUM_MAX)
{
returnValue = AutoReturnConfigDataStru[bufIndex].AutoReturnOpposedRouteIdBuf;
}
return returnValue;
}
/*
* 功能描述: 获取自动折返进路抵触自动折返进路数目
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAutoReturnOpposedReturnIdSum(const UINT16 autoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 returnValue = CI_ERROR;
bufIndex = GetAutoReturnBufIndex(autoReturnId); /*获取数组下标*/
if (bufIndex < AUTO_RETURN_SUM_MAX)
{
returnValue = AutoReturnConfigDataStru[bufIndex].AutoReturnOpposedReturnIdSum;
}
return returnValue;
}
/*
* 功能描述: 获取自动折返进路抵触自动折返进路数组
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAutoReturnOpposedReturnIdBuf(const UINT16 autoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* returnValue = NULL;
bufIndex = GetAutoReturnBufIndex(autoReturnId); /*获取数组下标*/
if (bufIndex < AUTO_RETURN_SUM_MAX)
{
returnValue = AutoReturnConfigDataStru[bufIndex].AutoReturnOpposedReturnIdBuf;
}
return returnValue;
}
/*
* 功能描述: 获取自动折返进路抵触全自动折返进路数目
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAutoRtnOppAllReturnIdSum(const UINT16 autoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 returnValue = CI_ERROR;
bufIndex = GetAutoReturnBufIndex(autoReturnId); /*获取数组下标*/
if (bufIndex < AUTO_RETURN_SUM_MAX)
{
returnValue = AutoReturnConfigDataStru[bufIndex].AutoReturnOpposedAllReturnIdSum;
}
return returnValue;
}
/*
* 功能描述: 获取自动折返进路抵触全自动折返进路数组
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAutoRtnOppAllReturnIdBuf(const UINT16 autoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* returnValue = NULL;
bufIndex = GetAutoReturnBufIndex(autoReturnId); /*获取数组下标*/
if (bufIndex < AUTO_RETURN_SUM_MAX)
{
returnValue = AutoReturnConfigDataStru[bufIndex].AutoReturnOpposedAllReturnIdBuf;
}
return returnValue;
}
@@ -0,0 +1,165 @@
/********************************************************
*
* 文 件 名: AutoReturnConfigDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-21
* 作 者: 联锁组
* 功能描述: 自动折返配置数据管理头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _AUTORETURN_CONFIG_DATA_MANAGE_H_
#define _AUTORETURN_CONFIG_DATA_MANAGE_H_
#include "AutoReturnDefine.h"
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#include "../System/SystemParameterManage.h"
#include "../Route/RouteDefine.h"
#ifdef __cplusplus
extern "C" {
#endif
/*自动折返配置数据结构体*/
typedef struct S_AutoReturnConfigDataStruct
{
UINT16 AutoReturnId; /*自动折返ID (配置字段)*/
UINT8 BelongCiId; /*所属联锁ID*/
UINT8 RouteSum; /*自动折返包含进路数目 (配置字段)*/
UINT16 RouteIdBuf[AUTO_RETURN_INCLROUTE_SUM_MAX]; /*自动折返进路包含进路ID数组 (配置字段)*/
UINT8 AutoReturnOpposedReturnIdSum; /*自动折返抵触自动折返进路数目 (配置字段)*/
UINT16 AutoReturnOpposedReturnIdBuf[ROUTE_OPPOSED_ROUTE_SUM_MAX]; /*自动折返抵触自动折返进路ID数组 (配置字段)*/
UINT8 AutoReturnOpposedRouteIdSum; /*自动折返进路抵触自动进路数目 (配置字段)*/
UINT16 AutoReturnOpposedRouteIdBuf[ROUTE_OPPOSED_ROUTE_SUM_MAX]; /*自动折返进路抵触自动进路ID数组 (配置字段)*/
UINT8 AutoReturnOpposedAllReturnIdSum; /*自动折返抵触全自动折返进路数目 (配置字段)*/
UINT16 AutoReturnOpposedAllReturnIdBuf[ROUTE_OPPOSED_ROUTE_SUM_MAX]; /*自动折返抵触全自动折返进路ID数组 (配置字段)*/
} AutoReturnConfigDataStruct;
/*全局变量声明*/
extern AutoReturnConfigDataStruct AutoReturnConfigDataStru[AUTO_RETURN_SUM_MAX]; /*定义自动折返数据配置结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
extern UINT16 LocalCiAutoReturnIdBuf[AUTO_RETURN_SUM_MAX]; /*定义本地联锁自动折返进路ID映射数组*/
extern INT16 AutoReturnCurSum; /*自动折返当前总数*/
/*
* 功能描述: 获取自动折返进路当前总数
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 自动折返进路当前总数
*/
UINT16 GetAutoReturnRouteCurSum(void);
/*
* 功能描述: 获取指定数组下标对应的自动折返进路ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 自动折返进路ID
*/
UINT16 GetAutoReturnRouteId(const UINT16 bufIndex);
/*
* 功能描述: 获取指定ID自动折返进路数组下标
* 参数说明: const UINT16 autoReturnId, 自动折返ID
* 返回值 0: 获取数据失败
* >0: 自动折返进路ID
*/
UINT16 GetAutoReturnBufIndex(const UINT16 autoReturnId);
/*
* 功能描述: 获取指定ID自动折返包含进路数目
* 参数说明: const UINT16 autoReturnId, 自动折返ID
* 返回值 0: 获取数据失败
* >0: 进路数目
*/
UINT8 GetAutoReturnIncludeRouteSum(const UINT16 autoReturnId);
/*
* 功能描述: 获取指定ID自动折返所属联锁ID
* 参数说明: const UINT16 autoReturnId, 自动折返ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
*/
UINT8 GetAutoReturnRouteBelongCiId(const UINT16 autoReturnId);
/*
* 功能描述: 获取指定ID自动折返包含进路ID数组
* 参数说明: const UINT16 autoReturnId, 自动折返ID
* 返回值 0: 获取数据失败
* >0: 进路ID数组
*/
UINT16* GetAutoReturnIncludeRouteBuf(const UINT16 autoReturnId);
/*
* 功能描述: 获取指定ID自动折返结构中折出进路Id
* 参数说明: const UINT16 autoReturnId, 自动折返ID
* 返回值 0: 获取数据失败
* >0: 进路ID
*/
UINT16 GetAutoReturnRebackRouteId(const UINT16 autoReturnId);
/*
* 功能描述: 整理读入的自动折返进路配置数据
* 参数说明: 无
* 返回值 1,整理成功
* 0,整理失败
*/
UINT8 AutoReturnConfigDataManage(void);
/*
* 功能描述: 获取自动折返进路抵触自动通过进路数目
* 参数说明: const UINT16 autoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAutoReturnOpposedRouteIdSum(const UINT16 autoReturnId);
/*
* 功能描述: 获取自动折返进路抵触自动通过进路数组
* 参数说明: const UINT16 autoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAutoReturnOpposedRouteIdBuf(const UINT16 autoReturnId);
/*
* 功能描述: 获取自动折返进路抵触自动折返进路数目
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAutoReturnOpposedReturnIdSum(const UINT16 autoReturnId);
/*
* 功能描述: 获取自动折返进路抵触自动折返进路数组
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAutoReturnOpposedReturnIdBuf(const UINT16 autoReturnId);
/*
* 功能描述: 获取自动折返进路抵触全自动折返进路数组
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAutoRtnOppAllReturnIdBuf(const UINT16 autoReturnId);
/*
* 功能描述: 获取自动折返进路抵触全自动折返进路数目
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAutoRtnOppAllReturnIdSum(const UINT16 autoReturnId);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,115 @@
/********************************************************
*
* 文 件 名: AutoReturnDataManage.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-20
* 作 者: 联锁组
* 功能描述: 自动折返数据管理
* 修改记录:
*
********************************************************/
#include "AutoReturnDataManage.h"
AutoReturnDataStruct AutoReturnDataStru[AUTO_RETURN_SUM_MAX]; /*定义自动折返数据结构体*/
/*
* 功能描述: 获取指定ID自动折返办理标志
* 参数说明: const UINT8 autoReturnId, 自动折返ID
* 返回值 0: 获取数据失败
* >0: 办理标志
*/
UINT8 GetAutoReturnSetFlag(const UINT16 autoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 autoReturnSetFlag = CI_ERROR;
bufIndex = GetAutoReturnBufIndex(autoReturnId); /*获取自动折返数组下标*/
if (bufIndex < AUTO_RETURN_SUM_MAX)
{
autoReturnSetFlag = AutoReturnDataStru[bufIndex].AutoReturnSetFlag;
}
return autoReturnSetFlag;
}
/*
* 功能描述: 设置指定ID自动折返办理标志
* 参数说明: const UINT8 autoReturnId, 自动折返ID
* const UINT8 setState, 办理标志
* 返回值
*
*/
void SetAutoReturnSetFlag(const UINT16 autoReturnId, const UINT8 setState)
{
UINT8 ii = 0u;
UINT8 jj = 0u;
UINT8 autoIncludeRouteSum = 0u;
UINT16 *pAutoIncludeRouteIdbuf = NULL;
UINT8 autoSetFlag = CI_ERROR;
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetAutoReturnBufIndex(autoReturnId); /*获取自动折返数组下标*/
if (bufIndex < AUTO_RETURN_SUM_MAX)
{
autoIncludeRouteSum = GetAutoReturnIncludeRouteSum(autoReturnId);
pAutoIncludeRouteIdbuf = GetAutoReturnIncludeRouteBuf(autoReturnId);
if (AUTO_RETURN_SET_YES == setState)
{
autoSetFlag = CI_ERROR;
/*设置自动属性*/
for (ii = 0u; ii < autoIncludeRouteSum; ii++)
{
autoSetFlag = SetRouteAutoReturnId(pAutoIncludeRouteIdbuf[ii],autoReturnId);
if (autoSetFlag == CI_ERROR)
{
/*设置失败*/
break;
}
}
if (autoSetFlag == CI_ERROR)
{
for (jj = 0u; jj < ii; jj++)
{
/*清除已设置Id*/
(void)SetRouteAutoReturnId(pAutoIncludeRouteIdbuf[jj],0u);
}
}
else
{
AutoReturnDataStru[bufIndex].AutoReturnSetFlag = AUTO_RETURN_SET_YES;
}
}
else if (AUTO_RETURN_SET_NO == setState)
{
for (ii = 0u; ii < autoIncludeRouteSum; ii++)
{
/*清除已设置Id*/
(void)SetRouteAutoReturnId(pAutoIncludeRouteIdbuf[ii],0u);
}
AutoReturnDataStru[bufIndex].AutoReturnSetFlag = AUTO_RETURN_SET_NO;
}
else
{
/*不做处理*/
}
}
}
@@ -0,0 +1,60 @@
/********************************************************
*
* 文 件 名: AutoReturnDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-21
* 作 者: 联锁组
* 功能描述: 自动折返数据管理头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _AUTORETURN_DATA_MANAGE_H_
#define _AUTORETURN_DATA_MANAGE_H_
#include "AutoReturnDefine.h"
#include "AutoReturnConfigDataManage.h"
#include "CommonTypes.h"
#include "../DataManage/DeviceDataManage.h"
#ifdef __cplusplus
extern "C" {
#endif
/*自动折返数据结构体*/
typedef struct S_AutoReturnDataStruct
{
UINT16 AutoReturnId; /*自动折返ID (配置字段)*/
UINT8 AutoReturnSetFlag; /*自动折设置标志(未设置/设置) (配置字段)*/
} AutoReturnDataStruct;
/*全局变量声明*/
extern AutoReturnDataStruct AutoReturnDataStru[AUTO_RETURN_SUM_MAX]; /*定义自动折返数据结构体*/
/*
* 功能描述: 获取指定ID自动折返办理标志
* 参数说明: const UINT8 autoReturnId, 自动折返ID
* 返回值 0: 获取数据失败
* >0: 办理标志
*/
UINT8 GetAutoReturnSetFlag(const UINT16 autoReturnId);
/*
* 功能描述: 设置指定ID自动折返办理标志
* 参数说明: const UINT8 autoReturnId, 自动折返ID
* const UINT8 setState, 办理标志
* 返回值
*
*/
void SetAutoReturnSetFlag(const UINT16 autoReturnId, const UINT8 setState);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,45 @@
/********************************************************
*
* 文 件 名: AutoReturnConfig.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-21
* 作 者: 联锁组
* 功能描述: 自动折返配置头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _AUTORETURN_CONFIG_H_
#define _AUTORETURN_CONFIG_H_
/*自动折返总数最大值*/
#define AUTO_RETURN_SUM_MAX ((UINT16)100) /*定义自动折返数量最大值*/
/*最大值定义*/
#define AUTO_RETURN_INCLROUTE_SUM_MAX ((UINT16)8) /*定义自动折返包含进路数量最大值*/
/*自动折返进路属性*/
#define AUTO_RETURN_ROUTE_TYPE_IN ((UINT8)0x55) /*折返*/
#define AUTO_RETURN_ROUTE_TYPE_OUT ((UINT8)0xAA) /*折出*/
#define AUTO_RETURN_ROUTE_TYPE_VAIN ((UINT8)0xFF) /*无效*/
/*自动折返办理标志*/
#define AUTO_RETURN_SET_NO ((UINT8)0x55) /*未办理*/
#define AUTO_RETURN_SET_YES ((UINT8)0xaa) /*办理*/
#define AUTO_RETURN_DICHU_AUTOROUTE ((UINT8)0x01) /*抵触的自动通过进路已办理*/
#define AUTO_RETURN_DICHU_AUTOREROUTE ((UINT8)0x04) /*抵触的自动折返进路已办理*/
#define AUTO_RETURN_DICHU_ALLAUTOROUTE ((UINT8)0x05) /*抵触的全自动折返进路已办理*/
#define AUTO_RETURN_DICHU_COMMROUTE ((UINT8)0x06) /*抵触的普通进路已办理*/
#define AUTO_RETURN_HAVE_BLOCK ((UINT8)0x02) /*自动折返进路存在封锁*/
#define AUTO_RETURN_FLOOD_STATE_ERR ((UINT8)0x03) /*自动折返进路存在防淹门不满足*/
#endif
@@ -0,0 +1,364 @@
/********************************************************
*
* 文 件 名: AutoRouteConfigDataManage.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-20
* 作 者: 联锁组
* 功能描述: 自动进路配置数据管理
* 修改记录:
*
********************************************************/
#include "AutoRouteConfigDataManage.h"
AutoRouteConfigDataStruct AutoRouteConfigDataStru[AUTO_ROUTE_SUM_MAX]; /*定义自动进路数据配置结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
UINT16 LocalCiAutoRouteIdBuf[AUTO_ROUTE_SUM_MAX] = {0u}; /*定义本地联锁自动进路ID映射数组*/
INT16 AutoRouteCurSum = 0; /*自动进路当前总数*/
GroupAutoRouteConfigDataStruct GroupAutoRouteConfigDataStru[GROUP_AUTO_ROUTE_SUM_MAX] = {0u}; /*定义组合自动进路数据配置结构体*/
/*
* 功能描述: 获取自动进路进路当前总数
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 自动进路进路当前总数
*/
UINT16 GetAutoRouteRouteCurSum(void)
{
UINT16 autoRouteCurSum = 0u;
if ((INT16)AUTO_ROUTE_SUM_MAX <= AutoRouteCurSum)
{
autoRouteCurSum = AUTO_ROUTE_SUM_MAX;
}
else if (0 > AutoRouteCurSum)
{
autoRouteCurSum = 0u;
}
else
{
autoRouteCurSum = (UINT16)AutoRouteCurSum;
}
return autoRouteCurSum;
}
/*
* 功能描述: 获取指定数组下标对应的自动进路进路ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 自动进路进路ID
*/
UINT16 GetAutoRouteRouteId(const UINT16 bufIndex)
{
UINT16 returnValue = CI_ERROR;
UINT16 routeCurSum = 0u;
routeCurSum = GetAutoRouteRouteCurSum();
if (bufIndex < routeCurSum)
{
returnValue = LocalCiAutoRouteIdBuf[bufIndex];
}
return returnValue;
}
/*
* 功能描述: 获取指定ID自动进路数组下标
* 参数说明: const UINT16 AutoRouteId, 自动进路ID
* 返回值 0: 获取数据失败
* >0: 自动进路ID
*/
UINT16 GetAutoRouteBufIndex(const UINT16 AutoRouteId)
{
UINT16 returnValue = AUTO_ROUTE_SUM_MAX;
if ((AutoRouteId >= 1u) && (AutoRouteId < AUTO_ROUTE_SUM_MAX))
{
returnValue = AutoRouteId;
}
return returnValue;
}
/*
* 功能描述: 获取指定ID自动进路所属联锁ID
* 参数说明: const UINT16 autoRouteId, 自动进路ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
*/
UINT8 GetAutoRouteBelongCiId(const UINT16 autoRouteId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 belongCiId = CI_ERROR;
bufIndex = GetAutoRouteBufIndex(autoRouteId); /*获取自动进路数组下标*/
if (bufIndex < AUTO_ROUTE_SUM_MAX)
{
belongCiId = AutoRouteConfigDataStru[bufIndex].BelongCiId;
}
return belongCiId;
}
/*
* 功能描述: 获取指定ID自动进路包含进路数目
* 参数说明: const UINT16 AutoRouteId, 自动进路ID
* 返回值 0: 获取数据失败
* >0: 进路数目
*/
UINT8 GetAutoRouteIncludeRouteSum(const UINT16 autoRouteId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 routeSum = CI_ERROR;
bufIndex = GetAutoRouteBufIndex(autoRouteId); /*获取自动进路数组下标*/
if (bufIndex < AUTO_ROUTE_SUM_MAX)
{
routeSum = AutoRouteConfigDataStru[bufIndex].RouteSum;
}
return routeSum;
}
/*
* 功能描述: 获取指定ID自动进路包含进路数组
* 参数说明: const UINT8 autoRouteId, 自动进路ID
* 返回值 0: 获取数据失败
* >0: 进路数组
*/
UINT16* GetAutoRouteIncludeRouteBuf(const UINT16 autoRouteId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* routeIdBuf = NULL;
bufIndex = GetAutoRouteBufIndex(autoRouteId); /*获取自动进路数组下标*/
if (bufIndex < AUTO_ROUTE_SUM_MAX)
{
routeIdBuf = AutoRouteConfigDataStru[bufIndex].RouteIdBuf;
}
return routeIdBuf;
}
/*
* 功能描述: 整理读入的自动进路配置数据
* 参数说明: 无
* 返回值 CI_SUCCESS,整理成功
* CI_ERROR,整理失败
*/
UINT8 AutoRouteConfigDataManage(void)
{
UINT16 ii = 0u; /*游标*/
UINT16 jj = 0u; /*游标*/
UINT16 autoRouteConfigDataSum = 0u; /*自动进路设备配置数据总数*/
UINT8 returnValue = CI_SUCCESS;
UINT8 localCiId = 0u;
localCiId = GetSystemParaLocalCiId();
/*保存自动进路Id索引数组*/
autoRouteConfigDataSum = GetAutoRouteRouteCurSum();
if (autoRouteConfigDataSum >= AUTO_ROUTE_SUM_MAX)
{/*配置数据总数错误*/
returnValue = CI_ERROR;
}
else
{
for (ii = 0u; ii < AUTO_ROUTE_SUM_MAX; ii++)
{
if (jj == autoRouteConfigDataSum)
{/*autoRouteConfigDataSum为0表示数据没有配置自动进路;autoRouteConfigDataSum大于0表示遍历有效数据完毕*/
break;
}
if (AutoRouteConfigDataStru[ii].BelongCiId == localCiId)
{/*该部分为有效数据*/
LocalCiAutoRouteIdBuf[jj] = AutoRouteConfigDataStru[ii].AutoRouteId;
jj++;
}
}
}
return returnValue;
}
/*
* 功能描述: 获取自动通过进路抵触自动通过进路数目
* 参数说明: const UINT16 autoRouteId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAutoRouteOpposedRouteIdSum(const UINT16 autoRouteId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 returnValue = CI_ERROR;
bufIndex = GetAutoRouteBufIndex(autoRouteId); /*获取数组下标*/
if (bufIndex < AUTO_ROUTE_SUM_MAX)
{
returnValue = AutoRouteConfigDataStru[bufIndex].AutoRouteOpposedRouteIdSum;
}
return returnValue;
}
/*
* 功能描述: 获取自动通过进路抵触自动通过进路数组
* 参数说明: const UINT16 autoRouteId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAutoRouteOpposedRouteIdBuf(const UINT16 autoRouteId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* returnValue = NULL;
bufIndex = GetAutoRouteBufIndex(autoRouteId); /*获取数组下标*/
if (bufIndex < AUTO_ROUTE_SUM_MAX)
{
returnValue = AutoRouteConfigDataStru[bufIndex].AutoRouteOpposedRouteIdBuf;
}
return returnValue;
}
/*
* 功能描述: 获取自动通过进路抵触自动折返进路数目
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAutoRouteOpposedReturnIdSum(const UINT16 autoRouteId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 returnValue = CI_ERROR;
bufIndex = GetAutoRouteBufIndex(autoRouteId); /*获取数组下标*/
if (bufIndex < AUTO_ROUTE_SUM_MAX)
{
returnValue = AutoRouteConfigDataStru[bufIndex].AutoRouteOpposedReturnIdSum;
}
return returnValue;
}
/*
* 功能描述: 获取自动通过进路抵触自动折返进路数组
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAutoRouteOpposedReturnIdBuf(const UINT16 autoRouteId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* returnValue = NULL;
bufIndex = GetAutoRouteBufIndex(autoRouteId); /*获取数组下标*/
if (bufIndex < AUTO_ROUTE_SUM_MAX)
{
returnValue = AutoRouteConfigDataStru[bufIndex].AutoRouteOpposedReturnIdBuf;
}
return returnValue;
}
/*
* 功能描述: 获取自动通过进路抵触全自动折返进路数目
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAutoRouteOpposedAllRtnIdSum(const UINT16 autoRouteId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 returnValue = CI_ERROR;
bufIndex = GetAutoRouteBufIndex(autoRouteId); /*获取数组下标*/
if (bufIndex < AUTO_ROUTE_SUM_MAX)
{
returnValue = AutoRouteConfigDataStru[bufIndex].AutoRouteOpposedAllReturnIdSum;
}
return returnValue;
}
/*
* 功能描述: 获取自动通过进路抵触全自动折返进路数组
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAutoRouteOpposedAllRtnIdBuf(const UINT16 autoRouteId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* returnValue = NULL;
bufIndex = GetAutoRouteBufIndex(autoRouteId); /*获取数组下标*/
if (bufIndex < AUTO_ROUTE_SUM_MAX)
{
returnValue = AutoRouteConfigDataStru[bufIndex].AutoRouteOpposedAllReturnIdBuf;
}
return returnValue;
}
/*
* 功能描述: 获取指定ID组合自动进路数组下标
* 参数说明: const UINT16 groupAutoRouteId, 组合自动进路ID
* 返回值 0: 获取数据失败
* >0: 自动进路ID
*/
UINT16 GetGroupAutoRouteBufIndex(const UINT16 groupAutoRouteId)
{
UINT16 returnValue = GROUP_AUTO_ROUTE_SUM_MAX;
if ((groupAutoRouteId >= 1u) && (GROUP_AUTO_ROUTE_SUM_MAX > groupAutoRouteId))
{
returnValue = groupAutoRouteId;
}
return returnValue;
}
/*
* 功能描述: 获取组合自动进路包含自动进路数量
* 参数说明: const UINT16 groupAutoRouteId, 组合自动进路ID
* 返回值 0: 获取数据失败
* >0: 组合自动进路数量
*/
UINT16 GetGroupAutoRouteHasRouteSum(const UINT16 groupAutoRouteId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 returnValue = CI_ERROR;
bufIndex = GetGroupAutoRouteBufIndex(groupAutoRouteId); /*获取数组下标*/
if (GROUP_AUTO_ROUTE_SUM_MAX > bufIndex)
{
returnValue = GroupAutoRouteConfigDataStru[bufIndex].InAutoRouteSum;
}
else
{
/*无操作*/
}
return returnValue;
}
/*
* 功能描述: 获取组合自动进路包含自动进路ID数组
* 参数说明: const UINT16 groupAutoRouteId, 组合自动进路ID
* 返回值 0: 获取数据失败
* >0: 组合自动进路包含自动进路ID数组
*/
UINT16* GetGroupAutoRouteHasRouteIdBuff(const UINT16 groupAutoRouteId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* returnValue = NULL;
bufIndex = GetGroupAutoRouteBufIndex(groupAutoRouteId); /*获取数组下标*/
if (GROUP_AUTO_ROUTE_SUM_MAX > bufIndex)
{
returnValue = GroupAutoRouteConfigDataStru[bufIndex].InAutoRouteIdBuff;
}
else
{
/*无操作*/
}
return returnValue;
}
@@ -0,0 +1,193 @@
/********************************************************
*
* 文 件 名: AutoRouteConfigDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-21
* 作 者: 联锁组
* 功能描述: 自动进路配置数据管理头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _AUTOROUTE_CONFIG_DATA_MANAGE_H_
#define _AUTOROUTE_CONFIG_DATA_MANAGE_H_
#include "AutoRouteDefine.h"
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#include "../System/SystemParameterManage.h"
#include "../Route/RouteDefine.h"
#ifdef __cplusplus
extern "C" {
#endif
/*自动进路配置数据结构体*/
typedef struct S_AutoRouteConfigDataStruct
{
UINT16 AutoRouteId; /*自动进路ID (配置字段)*/
UINT8 BelongCiId; /*所属联锁ID*/
UINT8 RouteSum; /*自动进路包含进路数目 (配置字段)*/
UINT16 RouteIdBuf[AUTO_ROUTE_INCLROUTE_SUM_MAX]; /*自动进路进路ID数组 (配置字段)*/
UINT8 AutoRouteOpposedRouteIdSum; /*自动通过进路抵触自动通过进路数目 (配置字段)*/
UINT16 AutoRouteOpposedRouteIdBuf[ROUTE_OPPOSED_ROUTE_SUM_MAX]; /*自动通过进路抵触自动通过进路ID数组 (配置字段)*/
UINT8 AutoRouteOpposedReturnIdSum; /*自动通过抵触自动折返进路数目 (配置字段)*/
UINT16 AutoRouteOpposedReturnIdBuf[ROUTE_OPPOSED_ROUTE_SUM_MAX]; /*自动通过抵触自动折返进路ID数组 (配置字段)*/
UINT8 AutoRouteOpposedAllReturnIdSum; /*自动通过抵触全自动折返进路数目 (配置字段)*/
UINT16 AutoRouteOpposedAllReturnIdBuf[ROUTE_OPPOSED_ROUTE_SUM_MAX]; /*自动通过抵触全自动折返进路ID数组 (配置字段)*/
} AutoRouteConfigDataStruct;
/*组合自动进路配置数据结构体*/
typedef struct Group_AutoRouteConfigDataStruct
{
UINT16 GroupAutoRouteId; /*组合自动进路ID*/
UINT16 InAutoRouteSum; /*包含的自动进路数量*/
UINT16 InAutoRouteIdBuff[IN_AUTO_ROUTE_SUM_MAX]; /*自动进路ID数组*/
}GroupAutoRouteConfigDataStruct;
/*全局变量声明*/
extern AutoRouteConfigDataStruct AutoRouteConfigDataStru[AUTO_ROUTE_SUM_MAX]; /*定义自动进路数据配置结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
extern UINT16 LocalCiAutoRouteIdBuf[AUTO_ROUTE_SUM_MAX] ; /*定义本地联锁自动进路ID映射数组*/
extern INT16 AutoRouteCurSum; /*自动进路当前总数*/
extern GroupAutoRouteConfigDataStruct GroupAutoRouteConfigDataStru[GROUP_AUTO_ROUTE_SUM_MAX]; /*定义组合自动进路数据配置结构体*/
/*
* 功能描述: 获取自动进路进路当前总数
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 自动进路进路当前总数
*/
UINT16 GetAutoRouteRouteCurSum(void);
/*
* 功能描述: 获取指定数组下标对应的自动进路进路ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 自动进路进路ID
*/
UINT16 GetAutoRouteRouteId(const UINT16 bufIndex);
/*
* 功能描述: 获取指定ID自动折返进路数组下标
* 参数说明: const UINT16 AutoRouteId, 自动进路ID
* 返回值 0: 获取数据失败
* >0: 自动折返进路ID
*/
UINT16 GetAutoRouteBufIndex(const UINT16 AutoRouteId);
/*
* 功能描述: 获取指定ID自动进路所属联锁ID
* 参数说明: const UINT16 autoRouteId, 自动进路ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
*/
UINT8 GetAutoRouteBelongCiId(const UINT16 autoRouteId);
/*
* 功能描述: 获取指定ID自动进路包含进路数目
* 参数说明: const UINT16 AutoRouteId, 自动进路ID
* 返回值 0: 获取数据失败
* >0: 进路数目
*/
UINT8 GetAutoRouteIncludeRouteSum(const UINT16 autoRouteId);
/*
* 功能描述: 获取指定ID自动进路包含进路数目
* 参数说明: const UINT8 AutoRouteId, 自动进路ID
* 返回值 0: 获取数据失败
* >0: 进路数目
*/
UINT16* GetAutoRouteIncludeRouteBuf(const UINT16 autoRouteId);
/*
* 功能描述: 整理读入的自动进路配置数据
* 参数说明: 无
* 返回值 CI_SUCCESS,整理成功
* CI_ERROR,整理失败
*/
UINT8 AutoRouteConfigDataManage(void);
/*
* 功能描述: 获取自动通过进路抵触自动通过进路数目
* 参数说明: const UINT16 autoRouteId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAutoRouteOpposedRouteIdSum(const UINT16 autoRouteId);
/*
* 功能描述: 获取自动通过进路抵触自动通过进路数组
* 参数说明: const UINT16 autoRouteId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAutoRouteOpposedRouteIdBuf(const UINT16 autoRouteId);
/*
* 功能描述: 获取自动通过进路抵触自动折返进路数目
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAutoRouteOpposedReturnIdSum(const UINT16 autoRouteId);
/*
* 功能描述: 获取自动通过进路抵触自动折返进路数组
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAutoRouteOpposedReturnIdBuf(const UINT16 autoRouteId);
/*
* 功能描述: 获取自动通过进路抵触全自动折返进路数目
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数目
*/
UINT8 GetAutoRouteOpposedAllRtnIdSum(const UINT16 autoRouteId);
/*
* 功能描述: 获取自动通过进路抵触全自动折返进路数组
* 参数说明: const UINT16 AutoReturnId, 自动折返进路ID
* 返回值 0: 获取数据失败
* >0: 抵触进路数组指针
*/
UINT16* GetAutoRouteOpposedAllRtnIdBuf(const UINT16 autoRouteId);
/*
* 功能描述: 获取指定ID组合自动进路数组下标
* 参数说明: const UINT16 groupAutoRouteId, 组合自动进路ID
* 返回值 0: 获取数据失败
* >0: 自动进路ID
*/
UINT16 GetGroupAutoRouteBufIndex(const UINT16 groupAutoRouteId);
/*
* 功能描述: 获取组合自动进路包含自动进路数量
* 参数说明: const UINT16 groupAutoRouteId, 组合自动进路ID
* 返回值 0: 获取数据失败
* >0: 组合自动进路数量
*/
UINT16 GetGroupAutoRouteHasRouteSum(const UINT16 groupAutoRouteId);
/*
* 功能描述: 获取组合自动进路包含自动进路ID数组
* 参数说明: const UINT16 groupAutoRouteId, 组合自动进路ID
* 返回值 0: 获取数据失败
* >0: 组合自动进路包含自动进路ID数组
*/
UINT16* GetGroupAutoRouteHasRouteIdBuff(const UINT16 groupAutoRouteId);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,113 @@
/********************************************************
*
* 文 件 名: AutoRouteDataManage.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-20
* 作 者: 联锁组
* 功能描述: 自动进路数据管理
* 修改记录:
*
********************************************************/
#include "AutoRouteDataManage.h"
AutoRouteDataStruct AutoRouteDataStru[AUTO_ROUTE_SUM_MAX] = {0u}; /*定义自动进路数据结构体*/
/*
* 功能描述: 获取指定ID自动进路办理标志
* 参数说明: const UINT8 autoRouteId, 自动进路ID
* 返回值 0: 获取数据失败
* >0: 办理标志
*/
UINT8 GetAutoRouteSetFlag(const UINT16 autoRouteId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 autoRouteSetFlag = CI_ERROR;
bufIndex = GetAutoRouteBufIndex(autoRouteId); /*获取自动进路数组下标*/
if (bufIndex < AUTO_ROUTE_SUM_MAX)
{
autoRouteSetFlag = AutoRouteDataStru[bufIndex].AutoRouteSetFlag;
}
return autoRouteSetFlag;
}
/*
* 功能描述: 设置指定ID自动进路办理标志
* 参数说明: const UINT8 autoRouteId, 自动进路ID
* const UINT8 setState, 办理标志
* 返回值
*
*/
void SetAutoRouteSetFlag(const UINT16 autoRouteId, const UINT8 setState)
{
UINT8 autoIncludeRouteSum = 0u;
UINT16 *pAutoIncludeRouteIdbuf = NULL;
UINT8 autoSetFlag = CI_ERROR;
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 ii = 0u;
UINT8 jj = 0u;
bufIndex = GetAutoRouteBufIndex(autoRouteId); /*获取自动进路数组下标*/
if (bufIndex < AUTO_ROUTE_SUM_MAX)
{
autoIncludeRouteSum = GetAutoRouteIncludeRouteSum(autoRouteId);
pAutoIncludeRouteIdbuf = GetAutoRouteIncludeRouteBuf(autoRouteId);
if (AUTO_ROUTE_SET_YES == setState)
{
autoSetFlag = CI_ERROR;
/*设置自动属性*/
for (ii = 0u; ii < autoIncludeRouteSum; ii++)
{
autoSetFlag = SetRouteAutoRouteId(pAutoIncludeRouteIdbuf[ii],autoRouteId);
if (autoSetFlag == CI_ERROR)
{
/*设置失败*/
break;
}
}
if (autoSetFlag == CI_ERROR)
{
for (jj = 0u; jj < ii; jj++)
{
/*清除已设置Id*/
(void)SetRouteAutoRouteId(pAutoIncludeRouteIdbuf[jj],0u);
}
}
else
{
AutoRouteDataStru[bufIndex].AutoRouteSetFlag = AUTO_ROUTE_SET_YES;
}
}
else if (AUTO_ROUTE_SET_NO == setState)
{
for (ii = 0u; ii < autoIncludeRouteSum; ii++)
{
/*清除已设置Id*/
(void)SetRouteAutoRouteId(pAutoIncludeRouteIdbuf[ii],0u);
}
AutoRouteDataStru[bufIndex].AutoRouteSetFlag = AUTO_ROUTE_SET_NO;
}
else
{
/*不做处理*/
}
}
}
@@ -0,0 +1,65 @@
/********************************************************
*
* 文 件 名: AutoRouteDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-21
* 作 者: 联锁组
* 功能描述: 自动进路数据管理头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _AUTOROUTE_DATA_MANAGE_H_
#define _AUTOROUTE_DATA_MANAGE_H_
#include "AutoRouteDefine.h"
#include "AutoRouteConfigDataManage.h"
#include "CommonTypes.h"
#include "../DataManage/DeviceDataManage.h"
#ifdef __cplusplus
extern "C" {
#endif
/*自动进路数据结构体*/
typedef struct S_AutoRouteDataStruct
{
UINT16 AutoRouteId; /*自动进路ID (配置字段)*/
UINT8 AutoRouteSetFlag; /*自动进路设置标志(未设置/设置) (配置字段)*/
} AutoRouteDataStruct;
/*全局变量声明*/
extern AutoRouteDataStruct AutoRouteDataStru[AUTO_ROUTE_SUM_MAX]; /*定义自动进路数据结构体*/
/*
* 功能描述: 获取指定ID自动进路办理标志
* 参数说明: const UINT8 autoRouteId, 自动进路ID
* 返回值 0: 获取数据失败
* >0: 办理标志
*/
UINT8 GetAutoRouteSetFlag(const UINT16 autoRouteId);
/*
* 功能描述: 设置指定ID自动进路办理标志
* 参数说明: const UINT8 autoRouteId, 自动进路ID
* const UINT8 setState, 办理标志
* 返回值
*
*/
void SetAutoRouteSetFlag(const UINT16 autoRouteId, const UINT8 setState);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,42 @@
/********************************************************
*
* 文 件 名: AutoRouteConfig.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-21
* 作 者: 联锁组
* 功能描述: 自动进路配置头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _AUTOROUTE_CONFIG_H_
#define _AUTOROUTE_CONFIG_H_
/*自动进路总数最大值*/
#define AUTO_ROUTE_SUM_MAX ((UINT16)200) /*定义自动进路数量最大值*/
/*组合自动进路*/
#define GROUP_AUTO_ROUTE_SUM_MAX ((UINT16)120) /*定义组合自动进路数量最大值*/
#define IN_AUTO_ROUTE_SUM_MAX ((UINT16)20) /*组合进路包含的自动进路数量最大值*/
/*最大值定义*/
#define AUTO_ROUTE_INCLROUTE_SUM_MAX ((UINT16)20) /*定义自动进路包含进路数量最大值*/
/*自动进路办理标志*/
#define AUTO_ROUTE_SET_NO ((UINT8)0x55) /*未办理*/
#define AUTO_ROUTE_SET_YES ((UINT8)0xaa) /*办理*/
#define AUTO_ROUTE_DICHU_AUTOROUTE ((UINT8)0x01) /*抵触自动通过进路已办理*/
#define AUTO_ROUTE_DICHU_AUTOREROUTE ((UINT8)0x04) /*抵触自动折返进路已办理*/
#define AUTO_ROUTE_DICHU_ALLAUTOREROUTE ((UINT8)0x05) /*抵触全自动折返进路已办理*/
#define AUTO_ROUTE_DICHU_COMMROUTE ((UINT8)0x06) /*抵触普通进路已办理*/
#define AUTO_ROUTE_HAVE_BLOCK ((UINT8)0x02) /*自动进路存在封锁*/
#define AUTO_ROUTE_FLOOD_STATE_ERR ((UINT8)0x03) /*自动进路存在防淹门不满足*/
#endif
@@ -0,0 +1,601 @@
#include "AxisAssertDataPrepare.h"
#include "AxisSectionConfigDataManage.h"
#include "PhysicalSectionDataManage.h"
#include "SystemParameterManage.h"
#include <stdarg.h>
/**
* @brief 打印Debug信息
* @param[in] UINT8 level 日志级别
* @param[in] const char *fmt 打印信息
* @return 无
* @note 通过调用外部接口,实现本模块的打印
*/
void aam_PrintDebugInfo(UINT8 level,const char *fmt, ...)
{
va_list para;
CHAR tmpPrintBuf[AMM_PRINT_LEN] = {'\0'};
if (AAM_LOG_LEVEL >= level)
{
va_start(para,fmt);
(void)vsnprintf(tmpPrintBuf,AMM_PRINT_LEN,fmt,para);
va_end(para);
debug_infor_printf((const)"%s",(const)tmpPrintBuf);
}
else
{
/** 日志级别不够*/
}
}
/**
* @brief 获取本OC范围有共管区内计轴区段的数组索引
* @param[out] OUT UINT16** pACIdBuff 计轴区段ID数缓存
* @return 0 查询错误
1~AXIS_SECTION_SUM_MAX 查询正确
* @note 由于OC支持计轴区段ID和索引的映射关系,故直接获取即可
*/
UINT16 aam_PrepareACBuffIndexs(OUT const UINT16** pACIdBuff)
{
return elm_PrepareACBuffIndexs(pACIdBuff);
}
/**
* @brief 通过计轴区段ID获取计轴区段的数组索引
* @param[in] UINT16 ACId 计轴区段ID
* @return 计轴区段缓存索引
* @note 无
*/
UINT16 aam_PrepareACIndex(UINT16 ACId)
{
return elm_PrepareACIndex(ACId);
}
/**
* @brief 通过计轴ID获取计轴状态
* @param[in] UINT16 ACID 计轴区段ID
* @return ELM_AC_OCC 计轴占用
ELM_AC_FREE 计轴空闲
* @note
*/
UINT8 aam_PrepareACStatus(UINT16 ACID)
{
return elm_PrepareACStatus(ACID);
}
/**
* @brief 获取计轴区段是否属于本OC
* @param[in] UINT16 acID 计轴区段ID
* @param[out] UINT8 *pOCId 所属OCid
* @return ELM_BELONG_OTHER 属于相邻OC
ELM_BELONG_OWNER 属于本OC
其他,非法
* @note 无
*/
UINT8 aam_PrepareACIsSelf(UINT16 acID,UINT8 *pOCId)
{
return elm_PrepareACIsSelf(acID,pOCId);
}
/**
* @brief 查询计轴前/后方计轴
* @param[in] UINT16 ACID 基准计轴ID
* @param[in] UINT8 dir 查询方向
* @param[out] UINT16 arACID[AC_MAXCNT_IN_SWITCH] 相邻计轴ID
* @return UINT8_MAX 查询失败
0~AC_MAXCNT_IN_SWITCH 查询成功
* @note 无
*/
UINT8 aam_PrepareAdjacentAC(UINT16 ACID, UINT8 dir, INOUT UINT16 arACID[AC_MAXCNT_IN_SWITCH])
{
UINT8 cDirectionPointFlag = 0U; /*是否具有方向变化点标志*/
return elm_PrepareAdjacentAC(ACID, dir, arACID, &cDirectionPointFlag);
}
/**
* @brief 通过计轴区段ID查找计轴区段位置
* @param[in] UINT16 ACID 计轴区段ID
* @param[in] UINT8 dir 查询方向
* @param[out] ELM_AxisLocStruct* pACLoc 计轴区段位置
* @return CI_SUCCESS 查询正确,返回成功
* CI_ERROR 查询错误,返回失败
* @note
*/
UINT8 aam_PrepareACLoc(UINT16 ACID, UINT8 dir, INOUT ELM_AxisLocStruct* pACLoc)
{
return elm_PrepareACLoc(ACID,dir,pACLoc);
}
/**
* @brief 通过计轴区段查找计轴区段相邻的物理区段
* @param[in] UINT16 ACID
* @param[out] UINT16 *PrePhyid 前方物理区段ID
* @param[out] UINT16 *BackPhyid 后方物理区段ID
* @return CI_ERROR 返回错误
CI_SUCCESS 返回正确
* @note
* 1、新建,2022年4月22日,前方后方按照逻辑正方向进行确定
*/
UINT8 aam_PreparePreAndBackPhySecOFAC(UINT16 ACID,UINT16 *PrePhyid, UINT16 *BackPhyid)
{
/*- 局部变量定义 */
UINT8 ret = CI_ERROR;
UINT8 tmpACCnt = 0u;
UINT16 tmpACId[AC_MAXCNT_IN_SWITCH] = {0u};
UINT16 tmpPrePhyId = 0u;
UINT16 tmpBackPhyid = 0u;
UINT8 cDirectionPointFlag = 0U; /*是否具有方向变化点标志*/
/*- 入口参数判断 */
ASSERT_RET_VALUE(NULL == PrePhyid,ret,0x80000000u);
ASSERT_RET_VALUE(NULL == BackPhyid,ret,0x40000000u);
/** 查询正方向相邻计轴区段 */
tmpACCnt = elm_PrepareAdjacentAC(ACID, EMAP_SAME_DIR, tmpACId, &cDirectionPointFlag);
if (UINT8_MAX == tmpACCnt)
{
/** 查询错误*/
}
else
{
if (0u == tmpACCnt)
{
/** 前方为尽头线 */
tmpPrePhyId = UINT16_MAX;
}
else
{
tmpPrePhyId = GetAxisSecRelativePhySecId(tmpACId[0u]);
}
(*PrePhyid) = tmpPrePhyId;
}
/** 查询反方向相邻计轴区段 */
tmpACCnt = elm_PrepareAdjacentAC(ACID, EMAP_CONVER_DIR, tmpACId, &cDirectionPointFlag);
if (UINT8_MAX == tmpACCnt)
{
/** 查询错误*/
}
else
{
if (0u == tmpACCnt)
{
/** 前方为尽头线 */
tmpBackPhyid = UINT16_MAX;
}
else
{
tmpBackPhyid = GetAxisSecRelativePhySecId(tmpACId[0u]);
}
(*BackPhyid) = tmpBackPhyid;
}
/** 设置函数返回值 */
ASSERT_SETRET((0u == tmpPrePhyId) || (0u == tmpBackPhyid) || ((UINT16_MAX == tmpPrePhyId) && (tmpPrePhyId == tmpBackPhyid)),ret,CI_ERROR,CI_SUCCESS);
return ret;
}
/**
* @brief 获取物理区段状态
* @param[in] UINT16 PhyId 物理区段id
* @param[out] 无
* @return SECTION_OCCUPY_YES 物理区段占用
SECTION_OCCUPY_NO 物理区段空闲
* @note
*/
UINT8 aam_PreparePhyOccStatus(UINT16 PhyId)
{
/*- 局部变量定义 */
UINT8 ret = SECTION_OCCUPY_YES;
/** 查询物理区段状态 */
ret = GetPhySecCurOccupyState(PhyId);
if (SECTION_OCCUPY_NO == ret)
{
/** 物理区段空闲,不处理*/
}
else
{
/** 其他情况都设置为占用 */
ret = SECTION_OCCUPY_YES;
}
/** 函数返回 */
return ret;
}
/**
* @brief 获取计轴对应的物理区段
* @param[in] UINT16 ACID 计轴区段ID
* @param[out] 无
* @return
* @note
*/
UINT16 aam_PrepareACBelongPhyid(UINT16 ACID)
{
return GetAxisSecRelativePhySecId(ACID);
}
/**
* @brief 判断计轴区段是否为联锁线
* @param[in] UINT16 ACID 计轴区段ID
* @param[out]
* @return CI_SUCCESS 为联锁线
CI_ERROR 不为联锁线
* @note
*/
UINT8 aam_PrepareACIsLinkingAxle(UINT16 ACID)
{
UINT8 chFunRet = AXIS_SEC_LINK_LINE_NO;
UINT8 ret = CI_ERROR;
chFunRet = GetAxisSecLinkLineFlag(ACID);
if (AXIS_SEC_LINK_LINE_YES == chFunRet)
{
ret = CI_SUCCESS;
}
else
{
;
}
return ret;
}
/**
* @brief 获取尽头线功能开关
* @param[in] 无
* @param[out] 无
* @return CI_SUCCESS 功能打开
CI_ERROR 功能关闭
* @note
*/
UINT8 aam_PrepareInitCTPassFlagSwitch(void)
{
UINT8 chFunRet = 0u;
UINT8 ret = CI_ERROR;
chFunRet = GetCiFunctionSwitchConfig(FUNC_RESET_ARB_SWITCH);
if (FUNC_SWITCH_ON == chFunRet)
{/* 功能开关打开 */
ret = CI_SUCCESS;
}
else
{
; /* 功能开关关闭 */
}
return ret;
}
/**
* @brief 获取计轴诊断冗余周期数
* @param[in] 无
* @param[out] 无
* @return 计轴诊断冗余周期数
* @note
*/
UINT8 aam_PrepareRedunTimes(void)
{
/** 是否需要考虑对函数的返回值进行校验,比较纠结,先只是强制转换*/
return (UINT8)GetSystemParaOccuToIdleCyc();
}
/**
* @brief 获取物理区段包含的计轴区段
* @param[in] UINT16 PhyId 物理区段
* @param[out] UINT8* pACCnt 计轴区段数量
* @return const UINT16* 计轴区段存储地址
* @note 非NULL 查询正确
NULL 查询错误
*/
const UINT16* aam_PreparePhyRelACIds(UINT16 PhyId,UINT8* pACCnt)
{
const UINT16* ret = NULL;
UINT8 tempCnt = 0u;
/** 入口参数检查 */
ASSERT_RET_VALUE(NULL == pACCnt,ret,0x80000000u);
/** 获取物理区段包含的计轴区段 */
tempCnt = GetPAxisSectionSum(PhyId);
ret = GetPAxisSectionIdBuf(PhyId);
if (0u == tempCnt)
{
/** 查询错误 */
*pACCnt = 0u;
ret = NULL;
}
else
{
/** 查询正确 */
*pACCnt = tempCnt;
}
return ret;
}
/**
* @brief 获取物理区段是否属于本TIOC
* @param[in] UINT16 phyID 物理区段ID
* @param[out] UINT8 *pOCId 所属TIOCid
* @return ELM_BELONG_OTHER 属于相邻TIOC
ELM_BELONG_OWNER 属于本TIOC
其他,非法
* @note 无
*/
UINT8 aam_PreparePhyIsSelf(UINT16 phyID, UINT8 *pOCId)
{
/*- 局部变量定义 */
UINT8 ret = ELM_BELONG_OWNER;
UINT8 localOCid = 0u;
UINT8 phyBelongOcid = 0u;
/** 入口参数校验 */
if (NULL == pOCId)
{
/** 入口参数错误 */
}
else
{
/** 获取本OCid */
localOCid = GetSystemParaLocalCiId();
/** 获取计轴所属OC id 不超过255*/
phyBelongOcid = (UINT8)GetPhySecBelongCiId(phyID);
if ((0u == localOCid) || (0u == phyBelongOcid))
{
/** 数据初始化错误 */
}
else if (localOCid == phyBelongOcid)
{
/** 在一个OC*/
*pOCId = phyBelongOcid;
ret = ELM_BELONG_OWNER;
}
else
{
/** 不在同一OC*/
*pOCId = phyBelongOcid;
ret = ELM_BELONG_OTHER;
}
}
return ret;
}
/**
* @brief 判断数值是否存在UINT16数值中
* @param[in] UINT16 targetValue 待查询的值
* @param[in] const UINT16 arValue[] 冲突范围
* @param[in] UINT16 buffsize 冲突范围大小
* @return CI_SUCCESS 指定值在冲突范围内
* CI_ERROR 指定值不在冲突范围内
* @note 无
*/
UINT8 aam_PrepareInUINT16Array(UINT16 targetValue,const UINT16 arValue[],UINT16 buffsize)
{
/*- 局部变量定义 */
UINT8 cRetVal = CI_ERROR;
UINT16 cycle = 0u;
/** 入口参数校验 */
if (NULL == arValue)
{
/** 入口参数错误 */
}
else
{
/*- 目标值是否在指定范围内 */
for (cycle = 0u; cycle < buffsize; cycle++)
{
if (targetValue == arValue[cycle])
{
cRetVal = CI_SUCCESS;
break;
}
}
}
/** 函数返回*/
return cRetVal;
}
/**
* @brief 获取ARB功能开关
* @param[in] 无
* @param[out] 无
* @return CI_SUCCESS 功能打开
CI_ERROR 功能关闭
* @note
*/
UINT8 aam_PrepareArbSwitch(void)
{
UINT8 chFunRet = 0u;
UINT8 ret = CI_ERROR;
chFunRet = GetCiFunctionSwitchConfig(FUNC_ARB_SWITCH);
if (FUNC_SWITCH_ON == chFunRet)
{/* 功能开关打开 */
ret = CI_SUCCESS;
}
else
{
; /* 功能开关关闭 */
}
return ret;
}
/**
* @brief 获取本RC通信的OCid
* @param[out] UINT8 *pOCIDbuff OCid缓存
* @return 本OC通信数量
*/
UINT8 aam_PrepareComOcId(IN const UINT8 **pOcIdBuff)
{
/*- 局部变量定义 */
UINT8 ret = 0u;
/** 入口参数校验 */
if (NULL == pOcIdBuff)
{
/** 入口参数错误,返回0,由外部处理*/
}
else
{
/** 获取本RC通信的OC数量 */
ret = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_OC);
/** 判断是否存在,不存在直接返回*/
if (0u == ret)
{
/** 无OC */
}
else
{
/** 获取通信OD ID */
(*pOcIdBuff) = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_OC);
}
}
return ret;
}
/**
* @brief 获取OC的通信状态
* @param[in] UINT8 OCID
* @return AAM_COM_STATUS_ERROR 通信状态错误
AAM_COM_STATUS_OK 通信状态正确
* @note
*/
UINT8 aam_PrepareOcCommStatus(UINT8 OcId)
{
/*- 局部变量定义 */
UINT8 ret = AAM_COM_STATUS_ERROR;
UINT8 funRtn = TRANSMIT_STATE_BAD;
UINT8 localId = GetSystemParaLocalCiId();
UINT32 recvCyc = 0u;
/** 获取OC通信状态 */
funRtn = GetCiTransmitState(CI_SYSTEM_TYPE_OC, OcId);
/** 获取收到消息周期号 */
recvCyc = GetCiTransmitRecvDataCycNum(localId, CI_SYSTEM_TYPE_OC, OcId);
/** 设置函数返回值 */
ASSERT_SETRET(((TRANSMIT_STATE_GOOD == funRtn) && (0u != recvCyc)), ret, AAM_COM_STATUS_OK, AAM_COM_STATUS_ERROR);
/** 函数返回*/
return ret;
}
/**
* @brief 获取计轴系统功能开关
* @param[in] 无
* @param[out] 无
* @return CI_SUCCESS 功能打开
CI_ERROR 功能关闭
* @note
*/
UINT8 aam_PrepareAsSwitch(void)
{
UINT8 ret = CI_ERROR;
UINT8 acFty = 0u;
acFty = GetCiFunctionSwitchConfig(FUNC_SWITCH_AC_FACTORY);
/** 设置函数返回值 */
ASSERT_SETRET(FUNC_SWITCH_OFF == acFty, ret, CI_ERROR, CI_SUCCESS);
return ret;
}
/**
* @brief 获取本RC通信的计轴系统id
* @param[out] UINT8 *pAsIdBuff 计轴系统id缓存
* @return 本RC通信计轴系统数量
*/
UINT8 aam_PrepareComAsId(IN const UINT8 **pAsIdBuff)
{
/*- 局部变量定义 */
UINT8 ret = 0u;
/** 入口参数校验 */
if (NULL == pAsIdBuff)
{
/** 入口参数错误,返回0,由外部处理*/
}
else
{
/** 获取本RC通信的计轴系统数量 */
ret = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_AXIS);
/** 判断是否存在,不存在直接返回*/
if (0u == ret)
{
/** 无计轴系统 */
}
else
{
/** 获取通信计轴系统 ID */
(*pAsIdBuff) = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_AXIS);
}
}
return ret;
}
/**
* @brief 获取计轴系统的通信状态
* @param[in] UINT8 AsId
* @return AAM_COM_STATUS_ERROR 通信状态错误
AAM_COM_STATUS_OK 通信状态正确
* @note
*/
UINT8 aam_PrepareAsCommStatus(UINT8 AsId)
{
/*- 局部变量定义 */
UINT8 ret = AAM_COM_STATUS_ERROR;
UINT8 funRtn = TRANSMIT_STATE_BAD;
UINT8 localId = GetSystemParaLocalCiId();
UINT32 recvCyc = 0u;
/** 获取计轴系统通信状态 */
funRtn = GetCiTransmitState(CI_SYSTEM_TYPE_AXIS, AsId);
/** 获取计轴系统接收周期数 */
recvCyc = GetCiTransmitRecvDataCycNum(localId, CI_SYSTEM_TYPE_AXIS, AsId);
/** 设置函数返回值 */
ASSERT_SETRET(((TRANSMIT_STATE_GOOD == funRtn) && (0u != recvCyc)), ret, AAM_COM_STATUS_OK, AAM_COM_STATUS_ERROR);
/** 函数返回*/
return ret;
}
/**
* @brief 判断两点是否同向
* @param[in] LOD_STRU strPointA
* @param[in] LOD_STRU strPointB
* @return CI_ERROR:比较失败;FLAG_SET:同向;FLAG_UNSET:不同向
* @note 无
*/
UINT8 aam_PrepareTwoPointsSameDir(const LOD_STRU strPointA, const LOD_STRU strPointB)
{
return IsPointABSameDir(strPointA, strPointB);
}
@@ -0,0 +1,268 @@
/******************************************************************************
** 文件名: AxisAssertDataPrepare.h
** 描 述: 计轴故障诊断模块,计轴故障诊断模块简称aam,数据准备区
*******************************************************************************/
#ifndef AXIS_ASSERT_DATA_PREPARE_H_
#define AXIS_ASSERT_DATA_PREPARE_H_
#include "AxisAssertDefine.h"
#include "EnvelopeDefine.h"
#include "ELMDataPrepare.h"
#include "dsuEmapDefine.h"
#define AAM_LOG_FATAL 0u /** 维护日志--维护级别 */
#define AAM_LOG_ERROR 1u /*维护日志--错误级别*/
#define AAM_LOG_WARING 2u /*维护日志--警告级别*/
#define AAM_LOG_DEBUG 3u /*维护日志--调试级别*/
#define AAM_LOG_LEVEL AAM_LOG_DEBUG /*维护日志--当前日志级别*/
#define AMM_PRINT_LEN 1280u /* 维护日志打印打印长度 1024+256 */
/** 日志打印函数 */
#define AAM_LOG_LOC(level,fmt,...) aam_PrintDebugInfo(level,fmt" line:%d fun:%s.\n",##__VA_ARGS__,__LINE__,__FUNCTION__);
#define AAM_LOG(level,fmt,...) aam_PrintDebugInfo(level,fmt,##__VA_ARGS__);
#if (kPLATFORM==kWINDOWS)
#define AAM_LOG_TIME(level,fmt,...) { \
SYSTEMTIME sys; \
GetLocalTime(&sys); \
aam_PrintDebugInfo(level,fmt" time:%02d:%02d:%02d.%03d.\n",##__VA_ARGS__,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds); \
}
#else
#define AAM_LOG_TIME(level,fmt,...) aam_PrintDebugInfo(level,fmt" time:%08d.\n",##__VA_ARGS__,TimeStamp);
#endif
/**
* @brief 打印Debug信息
* @param[in] UINT8 level 日志级别
* @param[in] const char *fmt 打印信息
* @return 无
* @note 通过调用外部接口,实现本模块的打印
*/
void aam_PrintDebugInfo(UINT8 level, const char *fmt, ...);
/**
* @brief 获取本OC范围有共管区内计轴区段的数组索引
* @param[out] OUT UINT16** pACIdBuff 计轴区段ID数缓存
* @return 0 查询错误
1~AXIS_SECTION_SUM_MAX 查询正确
* @note 由于OC支持计轴区段ID和索引的映射关系,故直接获取即可
*/
UINT16 aam_PrepareACBuffIndexs(OUT const UINT16** pACIdBuff);
/**
* @brief 通过计轴区段ID获取计轴区段的数组索引
* @param[in] UINT16 ACId 计轴区段ID
* @return 计轴区段缓存索引
* @note 无
*/
UINT16 aam_PrepareACIndex(UINT16 ACId);
/**
* @brief 通过计轴ID获取计轴状态
* @param[in] UINT16 ACID 计轴区段ID
* @return ELM_AC_OCC 计轴占用
ELM_AC_FREE 计轴空闲
* @note
*/
UINT8 aam_PrepareACStatus(UINT16 ACID);
/**
* @brief 获取计轴区段是否属于本OC
* @param[in] UINT16 acID 计轴区段ID
* @param[out] UINT8 *pOCId 所属OCid
* @return ELM_BELONG_OTHER 属于相邻OC
ELM_BELONG_OWNER 属于本OC
其他,非法
* @note 无
*/
UINT8 aam_PrepareACIsSelf(UINT16 acID,UINT8 *pOCId);
/**
* @brief 查询计轴前/后方计轴
* @param[in] UINT16 ACID 基准计轴ID
* @param[in] UINT8 dir 查询方向
* @param[out] UINT16 arACID[AC_MAXCNT_IN_SWITCH] 相邻计轴ID
* @return UINT8_MAX 查询失败
0~AC_MAXCNT_IN_SWITCH 查询成功
* @note 无
*/
UINT8 aam_PrepareAdjacentAC(UINT16 ACID, UINT8 dir, INOUT UINT16 arACID[AC_MAXCNT_IN_SWITCH]);
/**
* @brief 通过计轴区段ID查找计轴区段位置
* @param[in] UINT16 ACID 计轴区段ID
* @param[in] UINT8 dir 查询方向
* @param[out] ELM_AxisLocStruct* pACLoc 计轴区段位置
* @return CI_SUCCESS 查询正确,返回成功
* CI_ERROR 查询错误,返回失败
* @note
*/
UINT8 aam_PrepareACLoc(UINT16 ACID, UINT8 dir,INOUT ELM_AxisLocStruct* pACLoc);
/**
* @brief 通过计轴区段查找计轴区段相邻的物理区段
* @param[in] UINT16 ACID
* @param[out] UINT16 *PrePhyid 前方物理区段ID
* @param[out] UINT16 *BackPhyid 后方物理区段ID
* @return CI_ERROR 返回错误
CI_SUCCESS 返回正确
* @note
* 1、新建,2022年4月22日,前方后方按照逻辑正方向进行确定
*/
UINT8 aam_PreparePreAndBackPhySecOFAC(UINT16 ACID,UINT16 *PrePhyid, UINT16 *BackPhyid);
/**
* @brief 获取物理区段状态
* @param[in] UINT16 PhyId 物理区段id
* @param[out] 无
* @return SECTION_OCCUPY_YES 物理区段占用
SECTION_OCCUPY_NO 物理区段空闲
* @note
*/
UINT8 aam_PreparePhyOccStatus(UINT16 PhyId);
/**
* @brief 获取计轴对应的物理区段
* @param[in] UINT16 ACID 计轴区段ID
* @param[out] 无
* @return
* @note
*/
UINT16 aam_PrepareACBelongPhyid(UINT16 ACID);
/**
* @brief 判断计轴区段是否为联锁线
* @param[in] UINT16 ACID 计轴区段ID
* @param[out]
* @return CI_SUCCESS 为联锁线
CI_ERROR 不为联锁线
* @note
*/
UINT8 aam_PrepareACIsLinkingAxle(UINT16 ACID);
/**
* @brief 获取尽头线功能开关
* @param[in] 无
* @param[out] 无
* @return CI_SUCCESS 功能打开
CI_ERROR 功能关闭
* @note
*/
UINT8 aam_PrepareInitCTPassFlagSwitch(void);
/**
* @brief 获取计轴诊断冗余周期数
* @param[in] 无
* @param[out] 无
* @return 计轴诊断冗余周期数
* @note
*/
UINT8 aam_PrepareRedunTimes(void);
/**
* @brief 获取物理区段包含的计轴区段
* @param[in] UINT16 PhyId 物理区段
* @param[out] UINT8* pACCnt 计轴区段数量
* @return const UINT16* 计轴区段存储地址
* @note 非NULL 查询正确
NULL 查询错误
*/
const UINT16* aam_PreparePhyRelACIds(UINT16 PhyId,UINT8* pACCnt);
/**
* @brief 获取物理区段是否属于本TIOC
* @param[in] UINT16 phyID 物理区段ID
* @param[out] UINT8 *pOCId 所属TIOCid
* @return ELM_BELONG_OTHER 属于相邻TIOC
ELM_BELONG_OWNER 属于本TIOC
其他,非法
* @note 无
*/
UINT8 aam_PreparePhyIsSelf(UINT16 phyID, UINT8 *pOCId);
/**
* @brief 判断数值是否存在UINT16数值中
* @param[in] UINT16 targetValue 待查询的值
* @param[in] const UINT16 arValue[] 冲突范围
* @param[in] UINT16 buffsize 冲突范围大小
* @return CI_SUCCESS 指定值在冲突范围内
* CI_ERROR 指定值不在冲突范围内
* @note 无
*/
UINT8 aam_PrepareInUINT16Array(UINT16 targetValue,const UINT16 arValue[],UINT16 buffsize);
/**
* @brief 获取ARB功能开关
* @param[in] 无
* @param[out] 无
* @return CI_SUCCESS 功能打开
CI_ERROR 功能关闭
* @note
*/
UINT8 aam_PrepareArbSwitch(void);
/**
* @brief 获取本RC通信的OCid
* @param[out] UINT8 *pOCIDbuff OCid缓存
* @return 本OC通信数量
*/
UINT8 aam_PrepareComOcId(IN const UINT8 **pOcIdBuff);
/**
* @brief 获取OC的通信状态
* @param[in] UINT8 OCID
* @return ELM_COM_STATUS_ERROR 通信状态错误
ELM_COM_STATUS_OK 通信状态正确
* @note
*/
UINT8 aam_PrepareOcCommStatus(UINT8 OcId);
/**
* @brief 获取计轴系统功能开关
* @param[in] 无
* @param[out] 无
* @return CI_SUCCESS 功能打开
CI_ERROR 功能关闭
* @note
*/
UINT8 aam_PrepareAsSwitch(void);
/**
* @brief 获取本RC通信的计轴系统id
* @param[out] UINT8 *pAsIdBuff 计轴系统id缓存
* @return 本RC通信计轴系统数量
*/
UINT8 aam_PrepareComAsId(IN const UINT8 **pAsIdBuff);
/**
* @brief 获取计轴系统的通信状态
* @param[in] UINT8 AsId
* @return AAM_COM_STATUS_ERROR 通信状态错误
AAM_COM_STATUS_OK 通信状态正确
* @note
*/
UINT8 aam_PrepareAsCommStatus(UINT8 AsId);
/**
* @brief 判断两点是否同向
* @param[in] LOD_STRU strPointA
* @param[in] LOD_STRU strPointB
* @return CI_ERROR:比较失败;FLAG_SET:同向;FLAG_UNSET:不同向
* @note 无
*/
UINT8 aam_PrepareTwoPointsSameDir(const LOD_STRU strPointA, const LOD_STRU strPointB);
#endif /*AXIS_ASSERT_DATA_PREPARE_H_*/
@@ -0,0 +1,66 @@
/******************************************************************************
** 文件名: AxisAssertDefine.h
** 描 述: 计轴故障诊断模块,计轴故障诊断模块简称aam 为包络管理的附属模块
*******************************************************************************/
#ifndef AXIS_ASSERT_DEFINE_H_
#define AXIS_ASSERT_DEFINE_H_
#include "EnvelopeDefine.h"
#define AAM_STATUS_OCC 0x00u /* 计轴占用状态(CT/UT占用) */
#define AAM_STATUS_ARB 0x55u /* 计轴ARB状态 */
#define AAM_STATUS_FREE_OR_REDUN 0xaau /* 计轴空闲或者冗余状态 */
#define AAM_CT_PASS 0xffu /* 计轴区段好车通过 */
#define AAM_UT_PASS 0x00u /* 计轴区段坏车通过*/
#define AAM_ENVELOPE_ENTER_ERROR 0x00u /* 好车通过步骤错误*/
#define AAM_ENVELOPE_HEAD_ENTER 0x01u /* 好车通过第一步:车头进入*/
#define AAM_ENVELOPE_TAIL_ENTER 0x02u /* 好车通过第二步:车尾进入*/
#define AAM_ENVELOPE_TAIL_EXIT 0x03u /* 好车通过第三步:车尾出清*/
#define AAM_ENVELOPE_HEAD_EXIT 0x04u /* 车头出清 */
#define AAM_GOOD_NEAR 0x01u /* 好车接近 */
#define AAM_GOOD_FAR_AWAY 0x02u /* 好车远离 */
#define AAM_BAD_NEAR 0x03u /* 坏车接近 */
#define AAM_NO_TRAIN_NEAR 0x04u /* 无车接近 */
#define AAM_GOOD_OCC 0x05u /* 好车占用 */
#define AAM_API_AC_ARB 0x01u /* 计轴ARB*/
#define AAM_API_AC_REDUNARB 0x02u /* 计轴ARB冗余 */
#define AAM_API_AC_UT 0x03u /* 计轴UT */
#define AAM_API_AC_REDUNUT 0x04u /* 计轴UT冗余 */
/*计轴区段冗余结束后可否判为ARB标志*/
#define REDUN_OVER_ARB_YES ((UINT8)0x55) /*可ARB*/
#define REDUN_OVER_ARB_NO ((UINT8)0xaa) /*需置为UT占用*/
#define AAM_END_LINE_INIT 0x55u /* 尽头线ARB初始化 */
#define AAM_END_LINE_UNINIT 0xaau /* 尽头线ARB未初始化 */
#define AAM_COM_STATUS_OK (0x55u) /* 通信状态正确 */
#define AAM_COM_STATUS_ERROR (0xaau) /* 通信状态错误 */
/*计轴系统通信中断ARB有效标志*/
#define AAM_COMM_BAD_ARB_YES (0x55U) /*计轴系统通信中断ARB有效*/
#define AAM_COMM_BAD_ARB_NO (0xAAU) /*计轴系统通信中断ARB无效*/
/** 定义计轴诊断信息结构体 */
typedef struct
{
UINT8 acAssertStatus; /* 计轴ARB状态 */
UINT8 passTrainFlag; /* 好车通过标志位 */
UINT16 passTrainID; /* 好车通过列车ID */
UINT8 redunTime; /* 占用冗余时间*/
UINT8 headEnterTrainCnt; /* 进入的列车头数量 */
UINT16 headEnterTrainId[SECTION_REL_ENVELOPE_SUM_MAX]; /* 列车头进入的计轴 */
UINT8 tailEnterTrainCnt; /* 进入的列车尾数量 */
UINT16 tailEnterTrainId[SECTION_REL_ENVELOPE_SUM_MAX]; /* 列车尾进入的计轴 */
UINT8 redunOverCanArb; /*冗余结束后能否判为ARB标志 空闲时设置为0x55*/
UINT8 AxisCommBadArbFlag; /*计轴通信中断可判ARB有效标志:0x55-有效,0xAA-无效*/
}AxisAsserStruct;
#endif
@@ -0,0 +1,593 @@
#include "AxisAssertManage.h"
static AxisAsserStruct gs_AxisAssert[AXIS_SECTION_SUM_MAX] = {0u}; /** 计轴故障诊断数据缓存 */
static UINT8 gs_InitEndlineFlag = AAM_END_LINE_UNINIT; /* 尽头线ARB特殊处理标志 */
/**
* @brief 初始化计轴诊断信息
* @param[in] 无
* @param[out] 无
* @return CI_ERROR, 处理错误
* CI_SUCCESS, 处理成功
* @note
*/
UINT8 aam_InitAxisAssert(void)
{
return CommonMemSet(&gs_AxisAssert[0u],(UINT32)sizeof(AxisAsserStruct) * AXIS_SECTION_SUM_MAX,0u, (UINT32)sizeof(AxisAsserStruct)*AXIS_SECTION_SUM_MAX);
}
/**
* @brief 通过数组索引获取计轴诊断信息
* @param[in]
* @param[out]
* @return
* @note
*/
const AxisAsserStruct* aam_GetAxisAssertInfo(UINT16 acIndex)
{
AxisAsserStruct* pRtn = NULL;
if ((0u != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX))
{
pRtn = &gs_AxisAssert[acIndex];
}
return pRtn;
}
/**
* @brief 设置包络进入的计轴区段类型
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_SetEnvelopeEnterType(UINT16 acIndex,UINT8 type,UINT16 trainID)
{
UINT8 cycle = 0u;
if ((0u != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX))
{
if (AAM_ENVELOPE_HEAD_ENTER == type)
{
for (cycle = 0u;cycle < gs_AxisAssert[acIndex].headEnterTrainCnt; cycle++)
{
if (trainID == gs_AxisAssert[acIndex].headEnterTrainId[cycle])
{
break;
}
}
if ((cycle == gs_AxisAssert[acIndex].headEnterTrainCnt) &&
(gs_AxisAssert[acIndex].headEnterTrainCnt < SECTION_REL_ENVELOPE_SUM_MAX))
{
gs_AxisAssert[acIndex].headEnterTrainId[cycle] = trainID;
gs_AxisAssert[acIndex].headEnterTrainCnt++;
}
else
{
/** 不处理*/
}
}
else if(AAM_ENVELOPE_TAIL_ENTER == type)
{
for (cycle = 0u;cycle < gs_AxisAssert[acIndex].tailEnterTrainCnt; cycle++)
{
if (trainID == gs_AxisAssert[acIndex].tailEnterTrainId[cycle])
{
break;
}
}
if ((cycle == gs_AxisAssert[acIndex].tailEnterTrainCnt) &&
(gs_AxisAssert[acIndex].tailEnterTrainCnt < SECTION_REL_ENVELOPE_SUM_MAX))
{
gs_AxisAssert[acIndex].tailEnterTrainId[cycle] = trainID;
gs_AxisAssert[acIndex].tailEnterTrainCnt++;
}
else
{
/** 不处理*/
}
}
else
{
/** 不处理 */
}
}
}
/**
* @brief 设置好车通过标志位
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_SetPassTrainFlag(UINT16 acIndex,UINT16 trainID)
{
if ((0u != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX))
{
gs_AxisAssert[acIndex].passTrainFlag = AAM_CT_PASS;
gs_AxisAssert[acIndex].passTrainID = trainID;
}
}
/**
* @brief 冗余计时位增加
* @param[in] UINT16 acIndex 计轴索引
* @param[in] UINT8 maxTimes 占用到空闲的冗余时间
* @param[out] 无
* @return 无
* @note
*/
void aam_AddRedunTime(UINT16 acIndex,UINT8 maxTimes)
{
if ((0u != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX))
{
if (gs_AxisAssert[acIndex].redunTime >= maxTimes)
{
/** 计时器满,不继续累加 */
}
else
{
gs_AxisAssert[acIndex].redunTime++;
}
}
}
/**
* @brief 设置计轴状态
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_SetAxisStatus(UINT16 acIndex,UINT8 status)
{
if ((0u != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX) &&
((AAM_STATUS_FREE_OR_REDUN == status) ||(AAM_STATUS_ARB == status) || (AAM_STATUS_OCC == status)))
{
gs_AxisAssert[acIndex].acAssertStatus = status;
}
}
/**
* @brief 设置指定诊断信息
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_SetAxisAssert(UINT16 acIndex,const AxisAsserStruct* pBuff)
{
UINT8 ret = CI_ERROR;
UINT8 funRtn = 0u;
if ((0u != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX) && (NULL != pBuff))
{
funRtn = CommonMemCpy((void*)&gs_AxisAssert[acIndex], (UINT32)sizeof(AxisAsserStruct), (const void*)pBuff, (UINT32)sizeof(AxisAsserStruct));
ASSERT_SETRET(1u == funRtn,ret,CI_SUCCESS,CI_ERROR);
}
return ret;
}
/**
* @brief 重置指定计轴诊断信息存储空间
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_ResetAxisAssertByACIndex(UINT16 acIndex)
{
if ((0U != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX))
{
(void)CommonMemSet(&gs_AxisAssert[acIndex], (UINT32)sizeof(AxisAsserStruct),0, (UINT32)sizeof(AxisAsserStruct));
}
}
/**
* @brief 清除好车通过标志位
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_ClearPassTrainFlag(UINT16 acIndex)
{
UINT8 ret = CI_ERROR;
if ((0u != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX))
{
gs_AxisAssert[acIndex].passTrainFlag = AAM_UT_PASS;
gs_AxisAssert[acIndex].passTrainID = 0u;
ret = CI_SUCCESS;
}
return ret;
}
/**
* @brief 清除冗余计时位
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_ClearRedunTime(UINT16 acIndex)
{
UINT8 ret = CI_ERROR;
if ((0u != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX))
{
gs_AxisAssert[acIndex].redunTime = 0u;
ret = CI_SUCCESS;
}
return ret;
}
/**
* @brief 清除计轴上车头进入的信息
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_ClearHeadEnterTrainId(UINT16 acIndex)
{
if ((0u != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX))
{
(void)CommonMemSet(&gs_AxisAssert[acIndex].headEnterTrainId[0], (UINT32)sizeof(UINT16)*SECTION_REL_ENVELOPE_SUM_MAX,0, (UINT32)sizeof(UINT16)*SECTION_REL_ENVELOPE_SUM_MAX);
gs_AxisAssert[acIndex].headEnterTrainCnt = 0u;
}
}
/**
* @brief 清除计轴上车头进入的信息的指定列车信息
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_ClearHeadEnterIdForTrain(UINT16 acIndex,UINT16 trainId)
{
UINT8 cycle = 0u;
UINT8 moveCycle = 0u;
if ((0u != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX) && (0u != gs_AxisAssert[acIndex].headEnterTrainCnt))
{
for (cycle = 0u;cycle < gs_AxisAssert[acIndex].headEnterTrainCnt; cycle++)
{
if (trainId == gs_AxisAssert[acIndex].headEnterTrainId[cycle])
{
break;
}
}
if (cycle == gs_AxisAssert[acIndex].headEnterTrainCnt)
{
/** 数据上没有,不处理 */
}
else
{
/** 找到,直接清除*/
for (moveCycle = cycle; moveCycle < (gs_AxisAssert[acIndex].headEnterTrainCnt - 1u);moveCycle++)
{
gs_AxisAssert[acIndex].headEnterTrainId[cycle] = gs_AxisAssert[acIndex].headEnterTrainId[cycle+1u];
}
gs_AxisAssert[acIndex].headEnterTrainId[moveCycle] = 0u;
gs_AxisAssert[acIndex].headEnterTrainCnt--;
}
}
}
/**
* @brief 清除计轴上车尾进入的信息
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_ClearTailEnterTrainId(UINT16 acIndex)
{
if ((0u != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX))
{
(void)CommonMemSet(&gs_AxisAssert[acIndex].tailEnterTrainId[0u], (UINT32)sizeof(UINT16)*SECTION_REL_ENVELOPE_SUM_MAX,0, (UINT32)sizeof(UINT16)*SECTION_REL_ENVELOPE_SUM_MAX);
gs_AxisAssert[acIndex].tailEnterTrainCnt = 0u;
}
}
/**
* @brief 清除计轴上车尾进入的信息的指定列车信息
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_ClearTailEnterIdForTrain(UINT16 acIndex,UINT16 trainId)
{
UINT8 cycle = 0u;
UINT8 moveCycle = 0u;
if ((0u != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX) && (0u != gs_AxisAssert[acIndex].tailEnterTrainCnt))
{
for (cycle = 0u;cycle < gs_AxisAssert[acIndex].tailEnterTrainCnt; cycle++)
{
if (trainId == gs_AxisAssert[acIndex].tailEnterTrainId[cycle])
{
break;
}
}
if (cycle == gs_AxisAssert[acIndex].tailEnterTrainCnt)
{
/** 数据上没有,不处理 */
}
else
{
/** 找到,直接清除*/
for (moveCycle = cycle; moveCycle < (gs_AxisAssert[acIndex].tailEnterTrainCnt - 1u);moveCycle++)
{
gs_AxisAssert[acIndex].tailEnterTrainId[cycle] = gs_AxisAssert[acIndex].tailEnterTrainId[cycle+1u];
}
gs_AxisAssert[acIndex].tailEnterTrainId[moveCycle] = 0u;
gs_AxisAssert[acIndex].tailEnterTrainCnt--;
}
}
}
/**
* @brief 设置尽头线ARB特殊处理标志
* @param[in] UINT8 flag 处理标志
* @param[out]
* @return
* @note
*/
void aam_SetInitEndlineFlag(UINT8 flag)
{
if ((AAM_END_LINE_UNINIT == flag) || (AAM_END_LINE_INIT == flag))
{
gs_InitEndlineFlag = flag;
}
else
{
gs_InitEndlineFlag = AAM_END_LINE_INIT;
}
}
/**
* @brief 获取尽头线ARB特殊处理标志
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_GetInitEndlineFlag(void)
{
return gs_InitEndlineFlag;
}
/**
* @brief 获取好车通过标志位
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_GetPassTrainFlag(UINT16 acIndex)
{
UINT8 ret = AAM_UT_PASS;
if ((0u != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX))
{
ret = gs_AxisAssert[acIndex].passTrainFlag;
}
return ret;
}
/**
* @brief 获取计轴状态
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_GetAxisStatus(UINT16 acIndex)
{
UINT8 ret = AAM_STATUS_OCC;
if ((0U != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX))
{
ret = gs_AxisAssert[acIndex].acAssertStatus;
}
return ret;
}
/**
* @brief 获取计轴冗余时间
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_GetRedunTime(UINT16 acIndex)
{
UINT8 ret = 0u;
if ((0u != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX))
{
ret = gs_AxisAssert[acIndex].redunTime;
}
return ret;
}
/**
* @brief 获取列车车头进入标志
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_GetHeadEnterFlag(UINT16 acIndex,UINT16 trainID)
{
UINT8 ret = CI_ERROR;
UINT8 cycle = 0u;
if ((0u != acIndex) && (AXIS_SECTION_SUM_MAX > acIndex) && (0u != gs_AxisAssert[acIndex].headEnterTrainCnt))
{
for (cycle = 0u;cycle < gs_AxisAssert[acIndex].headEnterTrainCnt; cycle++)
{
if (trainID == gs_AxisAssert[acIndex].headEnterTrainId[cycle])
{
ret = CI_SUCCESS;
break;
}
else
{
;
}
}
}
return ret;
}
/**
* @brief 获取列车车尾进入标志
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_GetTailEnterFlag(UINT16 acIndex,UINT16 trainID)
{
UINT8 ret = CI_ERROR;
UINT8 cycle = 0u;
if ((0u != acIndex) && (AXIS_SECTION_SUM_MAX > acIndex) && (0u != gs_AxisAssert[acIndex].tailEnterTrainCnt))
{
for (cycle = 0u;cycle < gs_AxisAssert[acIndex].tailEnterTrainCnt; cycle++)
{
if (trainID == gs_AxisAssert[acIndex].tailEnterTrainId[cycle])
{
ret = CI_SUCCESS;
break;
}
else
{
;
}
}
}
else
{
; /*参数取值非法*/
}
return ret;
}
/*
* 功能描述: 获取指定ID计轴区段冗余结束可否ARB标志
* 参数说明: const UINT16 acIndex, 计轴索引
* 返回值 0x55 可ARB 0xaa 不可ARB
* Create: fan 2024/10/14
*/
UINT8 aam_GetAxisRedunCanArbFlag(const UINT16 acIndex)
{
UINT8 ret = REDUN_OVER_ARB_NO;
if ((0U != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX))
{
ret = gs_AxisAssert[acIndex].redunOverCanArb;
}
else
{
; /*返回REDUN_OVER_ARB_NO*/
}
return ret;
}
/*
* 功能描述: 设置指定ID计轴区段冗余结束可否ARB标志
* 参数说明: const UINT16 acIndex, 计轴索引
* const UINT8 redunOverArbFlag, 冗余结束可否ARB标志
* 返回值
* Create: fan 2024/10/14
*/
void aam_SetAxisRedunCanArbFlag(const UINT16 acIndex, const UINT8 redunOverArbFlag)
{
if ((0u != acIndex) && (AXIS_SECTION_SUM_MAX > acIndex))
{
if ((REDUN_OVER_ARB_YES == redunOverArbFlag) || (REDUN_OVER_ARB_NO == redunOverArbFlag))
{
gs_AxisAssert[acIndex].redunOverCanArb = redunOverArbFlag; /*计轴区段冗余结束可否ARB标志*/
}
else
{
; /*不做处理*/
}
}
else
{
; /*不做处理*/
}
}
/*
* 功能描述:设置指定ID计轴区段计轴通信中断可判ARB标志
* 参数说明:const UINT16 acIndex 计轴索引
* const UINT8 cCommBadArbFlag 计轴通信中断可判ARB标志
* 返 回 值:无
* Created By LQ 2025.02.24
*/
void aam_SetAxisCommBadArbFlag(const UINT16 acIndex, const UINT8 cCommBadArbFlag)
{
if ((0U != acIndex) && (AXIS_SECTION_SUM_MAX > acIndex))
{
if ((AAM_COMM_BAD_ARB_YES == cCommBadArbFlag) || (AAM_COMM_BAD_ARB_NO == cCommBadArbFlag))
{
gs_AxisAssert[acIndex].AxisCommBadArbFlag = cCommBadArbFlag;
}
else
{
; /*不做处理*/
}
}
else
{
; /*不做处理*/
}
}
/*
* 功能描述:获取指定ID计轴区段计轴通信中断可判ARB标志
* 参数说明:const UINT16 acIndex 计轴索引
* 返 回 值:0x55 有效
* 0xAA 无效
* Created By LQ 2025.02.24
*/
UINT8 aam_GetAxisCommBadArbFlag(const UINT16 acIndex)
{
UINT8 ret = AAM_COMM_BAD_ARB_NO;
if ((0U != acIndex) && (acIndex < AXIS_SECTION_SUM_MAX))
{
ret = gs_AxisAssert[acIndex].AxisCommBadArbFlag;
}
else
{
;
}
return ret;
}
@@ -0,0 +1,248 @@
/******************************************************************************
** 文件名: AxisAssertManage.h
** 描 述: 计轴故障诊断模块,计轴故障诊断模块简称aam
*******************************************************************************/
#ifndef AXIS_ASSERT_MANAGE_H_
#define AXIS_ASSERT_MANAGE_H_
#include "AxisAssertDefine.h"
#include "ELMDataPrepare.h"
/**
* @brief 初始化计轴诊断信息
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_InitAxisAssert(void);
/**
* @brief 通过数组索引获取计轴诊断信息
* @param[in]
* @param[out]
* @return
* @note
*/
const AxisAsserStruct* aam_GetAxisAssertInfo(UINT16 acIndex);
/**
* @brief 设置列车进入的计轴区段类型
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_SetEnvelopeEnterType(UINT16 acIndex,UINT8 type,UINT16 trainID);
/**
* @brief 设置好车通过标志位
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_SetPassTrainFlag(UINT16 acIndex,UINT16 trainID);
/**
* @brief 冗余计时位增加
* @param[in] UINT16 acIndex 计轴索引
* @param[in] UINT8 maxTimes 占用到空闲的冗余时间
* @param[out] 无
* @return 无
* @note
*/
void aam_AddRedunTime(UINT16 acIndex,UINT8 maxTimes);
/**
* @brief 设置计轴状态
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_SetAxisStatus(UINT16 acIndex,UINT8 status);
/**
* @brief 设置指定诊断信息
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_SetAxisAssert(UINT16 acIndex,const AxisAsserStruct* pBuff);
/**
* @brief 重置指定计轴诊断信息存储空间
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_ResetAxisAssertByACIndex(UINT16 acIndex);
/**
* @brief 清除好车通过标志位
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_ClearPassTrainFlag(UINT16 acIndex);
/**
* @brief 清除冗余计时位
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_ClearRedunTime(UINT16 acIndex);
/**
* @brief 清除计轴上车头进入的信息
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_ClearHeadEnterTrainId(UINT16 acIndex);
/**
* @brief 清除计轴上车头进入的信息的指定列车信息
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_ClearHeadEnterIdForTrain(UINT16 acIndex,UINT16 trainId);
/**
* @brief 清除计轴上车尾进入的信息
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_ClearTailEnterTrainId(UINT16 acIndex);
/**
* @brief 清除计轴上车尾进入的信息的指定列车信息
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_ClearTailEnterIdForTrain(UINT16 acIndex,UINT16 trainId);
/**
* @brief 设置尽头线ARB特殊处理标志
* @param[in] UINT8 flag 处理标志
* @param[out]
* @return
* @note
*/
void aam_SetInitEndlineFlag(UINT8 flag);
/**
* @brief 获取尽头线ARB特殊处理标志
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_GetInitEndlineFlag(void);
/**
* @brief 获取好车通过标志位
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_GetPassTrainFlag(UINT16 acIndex);
/**
* @brief 获取计轴状态
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_GetAxisStatus(UINT16 acIndex);
/**
* @brief 获取计轴冗余时间
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_GetRedunTime(UINT16 acIndex);
/**
* @brief 获取列车车头进入标志
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_GetHeadEnterFlag(UINT16 acIndex,UINT16 trainID);
/**
* @brief 获取列车车尾进入标志
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_GetTailEnterFlag(UINT16 acIndex,UINT16 trainID);
/*
* 功能描述: 获取指定ID计轴区段冗余结束可否ARB标志
* 参数说明: const UINT16 acIndex, 计轴索引
* 返回值 0x55 可ARB 0xaa 不可ARB
* Create: fan 2024/10/14
*/
UINT8 aam_GetAxisRedunCanArbFlag(const UINT16 acIndex);
/*
* 功能描述: 设置指定ID计轴区段冗余结束可否ARB标志
* 参数说明: const UINT16 acIndex, 计轴索引
* const UINT8 redunOverArbFlag, 冗余结束可否ARB标志
* 返回值
* Create: fan 2024/10/14
*/
void aam_SetAxisRedunCanArbFlag(const UINT16 acIndex, const UINT8 redunOverArbFlag);
/*
* 功能描述:设置指定ID计轴区段计轴通信中断可判ARB标志
* 参数说明:const UINT16 acIndex 计轴索引
* const UINT8 cCommBadArbFlag 计轴通信中断可判ARB标志
* 返 回 值:无
* Created By LQ 2025.02.24
*/
void aam_SetAxisCommBadArbFlag(const UINT16 acIndex, const UINT8 cCommBadArbFlag);
/*
* 功能描述:获取指定ID计轴区段计轴通信中断可判ARB标志
* 参数说明:const UINT16 acIndex 计轴索引
* 返 回 值:0x55 有效
* 0xAA 无效
* Created By LQ 2025.02.24
*/
UINT8 aam_GetAxisCommBadArbFlag(const UINT16 acIndex);
#endif
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,216 @@
/******************************************************************************
** 文件名: AxisAssertManageAPI.h
** 描 述: 计轴故障诊断模块,计轴故障诊断模块简称aam
*******************************************************************************/
#ifndef AXIS_ASSERT_MANAGE_API_H_
#define AXIS_ASSERT_MANAGE_API_H_
#include "AxisAssertDefine.h"
#include "EnvelopeDefine.h"
/**
* @brief 计轴故障诊断模块初始化
* @return CI_ERROR 初始化成功
CI_SUCCESS 初始化失败
* @note
*/
UINT8 aam_Init(void);
/**
* @brief 计轴故障诊断模块处理主函数
* @param[in]
* @param[out]
* @return
* @note
*/
void aam_MainProcess(void);
/**
* @brief 对外接口:设置计轴区段列车进入类型
* @param[in] UINT8 flag 列车进入类型
* @param[in] UINT16 supicTrainid 可疑车id
* @param[in] UINT16 acID 计轴id
* @param[in] UINT16 trainid 列车ID
* @return 无
* @note 无
*/
void aam_SetEnvelopeEnterFlag(UINT8 flag,UINT16 supicTrainid, UINT16 acID,UINT16 trainId);
/**
* @brief 对外接口:获取计轴故障诊断状态
* @param[in] UINT16 ACID
* @param[out]
* @return
* @note
*/
UINT8 aam_GetACAssertStatus(UINT16 ACID);
/**
* @brief 对外接口:获取计轴关联的物理区段的故障诊断状态
* @param[in] UINT16 phyID 物理区段ID
* @param[out]
* @return AAM_API_AC_ARB 物理区段ARB
UINT8_MAX 物理区段非ARB
* @note 物理区段关联的计轴区段占用且都为ARB时,则返回ARB,否则返回UT
*/
UINT8 aam_GetPhyIsARB(UINT16 phyID);
/**
* @brief 对外接口:获取计轴好车通过标志
* @param[in]
* @param[out]
* @return
* @note
*/
UINT8 aam_GetACPassTrainFlag(UINT16 ACID);
/**
* @brief 对外接口:获取计轴对应的诊断信息地址
* @param[in]
* @param[out]
* @return
* @note
*/
const AxisAsserStruct* aam_GetAxisAssertInfoPtr(UINT16 ACID);
/**
* @brief 对外接口:跟随计轴诊断模块数据
* @param[out] UINT8 *pDataBuff 跟随数据的存储地址指针
* @param[in] UINT32 curIndex 跟随数据的索引地址
* @return 跟随数据的长度
* @note 无
*/
UINT32 aam_GetTransferData(OUT UINT8 *pDataBuff,UINT32 curIndex);
/**
* @brief 对外接口:拷贝计轴诊断模块数据
* @param[in] const UINT8 *pDatabuff 跟随数据的存储地址指针
* @param[in] UINT32 curIndex 跟随数据的索引地址
* @param[in] UINT32 len 跟随数据的长度
* @return 截取数据索引
* @note
*/
UINT32 aam_SetTransferData(IN const UINT8 *pDatabuff,UINT32 curIndex,UINT32 len);
/**
* @brief 对外接口:清除计轴好车通过标志
* @param[in] UINT16 ACID 计轴ID
* @param[out]
* @return
* @note
*/
UINT8 aam_ClearACPassTrainFlag(UINT16 ACID);
/**
* @brief 对外接口:清除计轴好车通过信息
* @param[in] UINT16 ACID 计轴ID
* @param[in] UINT16 trainID 列车ID
* @param[out] 无
* @return 无
* @note 无
*/
void aam_ClearACEnvelopeEnterInfo(UINT16 ACID,UINT16 trainID);
/**
* @brief 对外接口:获取计轴关联的物理区段是否存在好车通过计轴区段
* @param[in] UINT16 acID
* @param[out] 无
* @return AAM_CT_PASS 物理区段好车通过
AAM_UT_PASS 物理区段坏车通过
* @note 物理区段关联的计轴区段有好车通过标志则认为该物理区段好车通过
*所有区段均无好车通过标志,则物理区段坏车通过
*/
UINT8 aam_GetACRelPhyPassTrainFlag(UINT16 acID);
/**
* @brief 对外接口:查询计轴接近车类型
* @param[in] UINT16 baseACID 基准计轴
* @param[in] UINT8 Dir 查询方向
* @param[in] UINT8 acCnt 相邻计轴区段数量
* @param[in] UINT16 acID[AC_MAXCNT_IN_SWITCH] 相邻计轴区段ID
* @param[out]
* @return
* @note
*/
UINT8 aam_SearchNearbyTrainType(UINT16 baseACID, UINT8 Dir, UINT8 acCnt, UINT16 acID[AC_MAXCNT_IN_SWITCH]);
/**
* @brief 对外接口:设置计轴进入冗余状态
* @param[in] UINT16 ACID 计轴ID
* @param[out] 无
* @return 无
* @note 无
*/
void aam_SetACEnterRedun(UINT16 ACID);
/**
* @brief 对外接口:检查计轴是否进入冗余状态
* @param[in] UINT16 ACID 计轴ID
* @param[out] 无
* @return
* @note
*/
UINT8 aam_CheckACEnterRedun(UINT16 ACID);
/**
* 功能:查询物理区段邻近范围内无坏车占用
* 输入参数:UINT16 ACID 计轴区段
* 返回值:CI_ERROR 判断时间和距离范围内有坏车 CI_SUCCESS 检查通过
* Create: fan 2024/08/22
*/
UINT8 aam_CheckNearbyTrainType(UINT16 ACID);
/**
* 函数功能:计轴子系统通信中断ARB处理
* 输入参数:无
* 返回值:无
* Create By LQ 2025.02.23
*/
void aam_AxisCommBadArbPro(void);
/**
* 函数功能:计轴子系统通信中断ARB处理——列车条件检查
* 输入参数:无
* 返回值:CI_SUCCESS 1 成功
* CI_ERROR 0 失败
* Create By LQ 2025.02.23
*/
UINT8 aam_AxisCommBadArbTrainCheck(void);
/**
* 函数功能:计轴子系统通信中断ARB处理——区段条件检查
* 输入参数:无
* 返回值:CI_SUCCESS 1 成功
* CI_ERROR 0 失败
* Create By LQ 2025.02.23
*/
UINT8 aam_AxisCommBadArbSecCheck(void);
/*
* 功能描述:设置集中区内计轴区段ARB
* 参数说明:无
* 返 回 值:无
*/
void SetRcAxleArb(void);
/**
* @brief 对外接口:获取计轴诊断状态接口
* @param[in] UINT16 计轴ID
* @param[out]
* @return UINT8 计轴诊断状态
* Creat fan 20250310
*/
UINT8 aam_GetAxisStatusAPI(UINT16 ACID);
#endif /*AXIS_ASSERT_MANAGE_API_H_*/
File diff suppressed because it is too large Load Diff
+52
View File
@@ -0,0 +1,52 @@
/******************************************************************************
** 文件名: as.h ( 计轴排序处理 )
** 描 述: 计轴排序处理模块
*******************************************************************************/
#ifndef INC_AXIS_SORT_INC
#define INC_AXIS_SORT_INC
#include "AxisSort_define.h"
#include "dquVobcCommonStru.h"
#include "TrainDefine.h"
#include "TrainDataManage.h"
#include "dsuemapdefine.h"
#define AXIS_SORT_LOG_BUF_SIZE ((UINT16)6000) /*打印排序数据的最大字节数*/
typedef struct TrainSequance
{
UINT16 u16TrainID; /*列车ID(不带类型14)*/
UINT8 u8TrainType; /*列车类型*/
UINT16 u16ELID; /*包络ID*/ /*排序模块内部用*/
}TRAIN_SEQUANCE_s;
/*车序列信息 */
typedef struct
{
UINT8 u8NodeValidTag; /* 节点有效标志 FLAG_SET-节点正在被使用 DEFAULT_ZERO-节点未被使用 */
UINT16 u16SortTrainID; /* 列车ID */
UINT8 u8SortTrainDir; /* 列车方向 */
LOD_STRU SafeHead; /* 安全包络前端 */
LOD_STRU SafeTail; /* 安全包络后端 */
}CT_SORT_INFO_s;
/*********区段序列信息**************/
typedef struct
{
UINT16 u16ID; /* 区段ID */
UINT8 u8SortFail; /* 排序异常标志 */
UINT8 u8TrainNum; /* 列车序列数量 */
TRAIN_SEQUANCE_s TrainList[SIZE_MAX_TRAINOFAC];/* 列车序列 TrainList[0]是电子地图方向起点端列车 */
}AS_SORT_INFO_s; /*计轴区段动态数据结构申明*/
/*列车包络信息****/
typedef struct
{
UINT16 ELNum; /*包络个数*/
UINT16 TrainEnveLopeID[ENVELOPE_SUM_MAX]; /*所有包络ID信息*/
}s_TRAIN_ENVELOPE_ID;
#endif /* INC_AXIS_SORT_INC */
+223
View File
@@ -0,0 +1,223 @@
/******************************************************************************
** 文件名: as_api.h ( link排序处理,外部调用函数 )
** 描 述: link排序处理模块
*******************************************************************************/
#ifndef INC_AS_API_INC
#define INC_AS_API_INC
#include "AxisSort_define.h"
#include "AxisSort.h"
#include "TrainOnAcManage.h"
/* 模块主逻辑 */
/*
* @brief AS模块初始化
*/
void as_Init(void);
/*************************************************************
* @name as_CycleInit
* @brief 周期初始化
* @param[in] void
* @return void
* @note
*************************************************************/
void as_CycleInit(void);
/*****************************************************************************
* @name as_MainProcess
* @brief AS模块主函数
* @param[in] 无
* @return 无
* @note 无
*****************************************************************************/
void as_MainProcess(void);
/*
* @brief 通信车排序
* 正常通信列车: 根据列车包络刷新通信车序列;
* 本周期丢失位置的通信列车: 在序列中转为故障车,从通信车序列中移除;
* 本周期新出现的位置报告列车: 添加到通信车序列和link序列中。
*/
void as_SortCT(void);
/*
* @brief 非通信车排序
* 故障车,序列中添加故障车;
* 无车的UT计轴,添加故障车到序列;
*/
void as_SortUT(void);
/*****************************************************************************
* @name as_SortBaseEnveLope
* @brief 根据所有的包络排序,落到AC和link上(未处理筛选无效车)
* @param[in] 无
* @return 无
* @note 无
*****************************************************************************/
void as_SortBaseEnveLope(void);
/*-
* @brief 获取Link上第一列车的信息
* @param[in] u16LinkID LinkID
* @return 第一列车的列车序列信息
* @note "第一列车"指电子地图方向起点端列车
* Link不在本ZC控区/Link排序异常/Link无车时,调用本函数将返回一个故障车
* 和as_GetLinkTrainNum()结合使用
*/
TRAIN_SEQUANCE_s as_GetLinkFirstTrain(IN UINT16 u16LinkID);
/*-
* @brief 获取Link上最后一列车的信息
* @param[in] u16LinkID LinkID
* @return 最后一列车的列车序列信息
* @note "最后一列车"指电子地图方向的终点端的列车
* Link不在本ZC控区/Link排序异常/Link无车时,调用本函数将返回一个故障车
* 和as_GetLinkTrainNum()结合使用
*/
TRAIN_SEQUANCE_s as_GetLinkLastTrain(IN UINT16 u16LinkID);
/*-
* @brief 获取Link上的列车数量
* @param[in] u16LinkID LinkID
* @return 列车数量
* @note Link不在本ZC控区/Link排序异常时,函数将返回1,输出一个故障车
*/
UINT8 as_GetLinkTrainNum(IN UINT16 u16LinkID);
/*-
* @brief 获取Link上的列车序列
* @param[in] u16LinkID LinkID
* @param[out] TrainList 列车序列
* @param[in] u32MaxTrainNum 列车序列的数量上限(SIZE_MAX_TRAINOFAC(20U))
* @return 列车数量
* @note TrainList[]沿电子地图方向从起点向终点排列,即TrainList[0]是电子地图起点端列车
* Link不在本ZC控区/Link排序异常/传入的列车序列空间过小时,函数将返回一个故障车
*/
UINT8 as_GetLinkTrainList(IN UINT16 u16LinkID, OUT TRAIN_SEQUANCE_s TrainList[SIZE_MAX_TRAINOFAC], IN UINT32 u32MaxTrainNum);
/* 辅助查询API */
/*-
* @brief 列车序列搜索
* @param[in] u16TrainID 列车ID
* @param[in] u8TrainNum 列车序列数量
* @param[in] TrainList 列车序列列表
* @return 正常 在列车序列中的角标
* 异常 INVALID_80xFFU
*/
UINT8 as_SeqSearch(IN UINT16 u16TrainID, IN UINT8 u8TrainNum, IN const TRAIN_SEQUANCE_s TrainList[SIZE_MAX_TRAINOFAC]);
/*****************************************************************************
* @name as_GetACTrainEnevelopList
* @brief 获取计轴上的包络序列
* @param[in] u16ACID 计轴ID
* @param[out] TrainList 列车序列
* @param[in] u32MaxTrainNum 列车序列的数量上限
* @return 列车数量
* @note TrainList[]沿电子地图方向从起点向终点排列,即TrainList[0]是电子地图起点端列车
* 计轴不在本ZC控区/计轴排序异常(有对向列车)/传入的列车序列空间过小时,函数将返回1个故障车
* 注意:AC上的序列只针对包络排序,不包括ct车头尾筛选无效的隐藏车
*****************************************************************************/
UINT8 as_GetACTrainEnevelopList(UINT16 u16ACID, TRAIN_SEQUANCE_s TrainList[], UINT32 u32MaxTrainNum);
/**
* @brief 比较两个包络的前后关系
* @param[in] const EnvelopeStruct* pEnvelopeA 包络A
* @param[in] const EnvelopeStruct* pEnvelopeB 包络B
* @return 0x01 包络A在包络B前
0x02 包络B在包络A前
0x00 无法比较位置关系
* @note 无
*/
UINT8 as_CalcEnvelopeOrder(IN const EnvelopeStruct* pEnvelopeA, IN const EnvelopeStruct* pEnvelopeB);
/******以下是从其他接口模块获取,as和ssp模块需要***************************/
/*
* @name TrainManage_GetTrainLocValid
* @brief 获取列车位置是否有效
* @param[in] UINT16 TrainID
* @return 列车位置是否有效,通信车则返回FLAG_SET
* @note 从列车管理模块获取
***/
UINT8 TrainManage_GetTrainLocValid(IN UINT16 TrainID);
/**
* @name TrainManage_GetTrainDir
* @brief 获取列车运行方向(最小安全后端指向车头)
* @param[in] UINT16 TrainID
* @return 0: 获取数据失败
* 0x55:与逻辑方向同向
* 0xAA: 与逻辑方向反向
* 0xFF: 无效
* @note 从列车管理模块获取
***/
UINT8 TrainManage_GetTrainDir(IN UINT16 TrainID);
/***
* @name TrainManage_GetTrainSafeLoc
* @brief 获取列车安全位置(即安全包络的前后端)
* @param[in] 要获取的安全位置类型 FINDHEADSAFEFLAG 安全车头 FINDTAILSAFEFLAG 安全车尾
* @param[in] 列车ID
* @param[out] 安全车头/车尾所处link
* @param[out] 安全车头/车尾所处偏移
* @return 查询成功;0 查询失败
* @note 从列车管理模块获取
**/
UINT8 TrainManage_GetTrainSafeLoc(IN UINT8 u8SafelocType, IN UINT16 u16TrainID, OUT UINT16 *pu16Link, OUT UINT32 *pu32Offset, OUT UINT8 *pu8Dir);
/*****************************************************************************
* @name as_GetTrainsferData
* @brief 获取跟随数据
* @param[in] UINT32 curIndex 当前索引
* @param[OUT] UINT8 * pDataBuff 数据存储缓冲区
* @return 计算后的索引 ret>curIndex 获取成功
* @note 无
*****************************************************************************/
UINT32 as_GetTransferData(OUT UINT8 * pDataBuff, IN UINT32 curIndex);
/*****************************************************************************
* @name as_SetTrainsferData
* @brief 设置跟随数据
* @param[in] UINT32 curIndex 当前索引
* @param[IN] UINT8 * pDataBuff 数据存储缓冲区
* @return 计算后的索引 ret>curIndex 获取成功
* @note 无
*****************************************************************************/
UINT32 as_SetTransferData(IN UINT8 * pDataBuff, IN UINT32 curIndex);
/**
* @brief 比较两个列车的前后关系
* @param[in] const EnvelopeStruct* pEnvelopeA 包络A
* @param[in] const EnvelopeStruct* pEnvelopeB 包络B
* @return 0x01 包络A电子地图方向在左
0x02 包络B在电子地图方向左
0x00 无法比较位置关系
* @note 无
*/
UINT8 as_CalcAreaOrder(IN const TrainLocStruct* pTrainA, IN const TrainLocStruct* pTrainB);
/*****************************************************************************
* @name TrainManage_GetTrainSleepState
* @brief 获取列车休眠状态
* @param[in] UINT16 TrainID
* @return 0: 获取数据失败
* 0x55:列车处于休眠状态
* 0xAA:列车未处于休眠状态
* @note 从列车管理模块获取
* by cgh 20240726
*****************************************************************************/
UINT8 TrainManage_GetTrainSleepState(IN UINT16 TrainID);
#endif /* INC_AS_API_INC */
@@ -0,0 +1,52 @@
/******************************************************************************
** 文件名: as_define.h ( 计轴排序处理 )
** 描 述: 计轴排序处理模块
*******************************************************************************/
#ifndef INC_AXIS_SORT_DEFINE_INC
#define INC_AXIS_SORT_DEFINE_INC
#include "CommonTypes.h"
#include <string.h>
#include "CiSystemDefine.h"
#include "../EnvelopeManage/EnvelopeDefine.h"
/*列车序列对应列车类型*/
#define TYPE_CT TYPE_CT_ENVELOPE /*列车状态为通信车 */
#define TYPE_UCT TYPE_UCT_ENVELOPE /*列车状态为丢失通信车 */
#define TYPE_FAILURE TYPE_UKT_ENVELOPE /*列车状态为故障列车*/
#define DEFAULT_ZERO (0U) /*变量初始值为0*/
#define DEFAULT_ONE (1U) /*变量初始值为1*/
#ifndef INVALID_8
#define INVALID_8 ((UINT8)0xFFU) /*- 8位 无效值*/
#endif
#define NAME_FAILUREAREA (SIZE_MAX_LINETRAIN) /*故障区域使用的ID*/
#define SIZE_MAX_LINETRAIN (255U) /*线路最大车辆数量*/
#define SIZE_MAX_LINE_TRAIN_NUM (SIZE_MAX_LINETRAIN+1U) /*线路最大车辆数量*/
#define SIZE_MAX_COM_VOBC_NUM (40U) /*与ZC通信的最大VOBC数量*/
#define AS_LINK_MAX (LINK_SUM_MAX) /* AS模块管理的Link最大数量 */
#define SIZE_MAX_TRAINOFAC (20U) /*计轴区内允许运行的最大列车数量*/
#define SIZE_MAX_TRAINOFTRACK (20U) /*轨道区段内允许运行的最大列车数量*/
#define AS_AC_MAX (AXIS_SECTION_SUM_MAX) /* AS模块管理的计轴最大数量 */
#define MAX_LINK_LIST_NUM (100U) /*包络最大Link数目*/
#define AS_ORDER_DOWNSTREAM (0x55U) /* g_pTrainOrder[T1][T2]=0x55代表T1在T2电子地图方向下游(右方) */
#define AS_ORDER_UPSTREAM (0xAAU) /* g_pTrainOrder[T1][T2]=0x55代表T1在T2电子地图方向上游(左方) */
#define AS_ORDER_1INCLUDE2 (0xCCU) /*1包含2*/
#define AS_ORDER_2INCLUDE1 (0xDDU) /*2包含1*/
#define AS_ORDER_FAIL (0xFFU) /* 计算失败 */
#endif /* INC_AXIS_SORT_DEFINE_INC */
@@ -0,0 +1,503 @@
#include "CutoffPointConfigDataManage.h"
CfpConfigStru g_szCfpConfig[CUTOFF_POINT_SUM_MAX] = { 0u }; /* 分界点配置数据存放数组 */
UINT16 gszCfpId[CUTOFF_POINT_SUM_MAX] = {0U};
UINT16 gCfpConfigSum = 0u; /* 分界点配置个数 */
/**
* @brief 获取本TIOC分界点总数
* @param 无
* @return 本TIOC分界点总数
*/
UINT16 GetCfpSum(void)
{
UINT16 wRetVal = 0u;
if (CUTOFF_POINT_SUM_MAX <= gCfpConfigSum)
{
wRetVal = CUTOFF_POINT_SUM_MAX;
}
else
{
wRetVal = gCfpConfigSum;
}
return wRetVal;
}
/**
* @brief 获取分界点ID
* @param bufIndex ID下标
* @return 分界点ID
*/
UINT16 GetCfpId(const UINT16 bufIndex)
{
UINT16 wRetVal = CI_ERROR;
UINT16 wCfpSum = GetCfpSum();
if (bufIndex < wCfpSum)
{
wRetVal = gszCfpId[bufIndex];
}
else
{
wRetVal = CI_ERROR;
}
return wRetVal;
}
/**
* @brief 获取分界点存储指针
* @param 无
* @return 分界点存储指针
*/
CfpConfigStru * GetCfpConfigData(void)
{
return (CfpConfigStru *)g_szCfpConfig;
}
/**
* @brief 获取分界点存储索引
* @param wCfpId 分界点ID
* @return 分界点存储索引
* @note 内部优化 20220418 wqm 增加入参大于0的检查
*/
UINT16 GetCfpBufIndex(const UINT16 wCfpId)
{
UINT16 wRetVal = CUTOFF_POINT_SUM_MAX;
if ((CUTOFF_POINT_SUM_MAX > wCfpId) && ( 0u < wCfpId))
{
wRetVal = wCfpId;
}
else
{
;
}
return wRetVal;
}
/**
* @brief 获取分界点所处link
* @param wCfpId 分界点ID
* @return 分界点所处link
*/
UINT16 GetCfpLink(const UINT16 wCfpId)
{
UINT16 wRetVal = 0u;
UINT16 wIndex = 0u;
wIndex = GetCfpBufIndex(wCfpId);
if (CUTOFF_POINT_SUM_MAX > wIndex)
{
wRetVal = g_szCfpConfig[wIndex].wLinkId;
}
else
{
;
}
return wRetVal;
}
/**
* @brief 获取分界点所处link偏移量
* @param wCfpId 分界点ID
* @return 分界点存储所处link偏移量
* @note 20220418 wqm 修改默认值为UINT32_MAX
*/
UINT32 GetCfpOffset(const UINT16 wCfpId)
{
UINT32 dwRetVal = UINT32_MAX;
UINT16 wIndex = 0u;
wIndex = GetCfpBufIndex(wCfpId);
if (CUTOFF_POINT_SUM_MAX > wIndex)
{
dwRetVal = g_szCfpConfig[wIndex].dwOffset;
}
else
{
;
}
return dwRetVal;
}
/**
* @brief 获取分界点相邻TIOC编号
* @param wCfpId 分界点ID
* @return 分界点相邻TIOC编号
*/
UINT16 GetCfpOtherTioc(const UINT16 wCfpId)
{
UINT16 wRetVal = 0u;
UINT16 wIndex = 0u;
wIndex = GetCfpBufIndex(wCfpId);
if (CUTOFF_POINT_SUM_MAX > wIndex)
{
wRetVal = g_szCfpConfig[wIndex].wOtherTiocId;
}
else
{
;
}
return wRetVal;
}
/**
* @brief 获取本TIOC处于分界点方向
* @param wCfpId 分界点ID
* @return 本TIOC处于分界点方向
*/
UINT8 GetCfpLocDir(const UINT16 wCfpId)
{
UINT8 chRetVal = 0u;
UINT16 wIndex = 0u;
wIndex = GetCfpBufIndex(wCfpId);
if (CUTOFF_POINT_SUM_MAX > wIndex)
{
chRetVal = g_szCfpConfig[wIndex].chLocDir;
}
else
{
;
}
return chRetVal;
}
/**
* @brief 获取分界点内方第一link
* @param wCfpId 分界点ID
* @return 分界点内方第一link
*/
UINT16 GetCfpInFirstLink(const UINT16 wCfpId)
{
UINT16 wRetVal = 0u;
UINT16 wIndex = 0u;
wIndex = GetCfpBufIndex(wCfpId);
if (CUTOFF_POINT_SUM_MAX > wIndex)
{
wRetVal = g_szCfpConfig[wIndex].wInFirstLink;
}
else
{
;
}
return wRetVal;
}
/**
* @brief 根据link和偏移量获取分界点ID
* @param wLink
* @param dwOffset
* @return 0:查询失败 其他:分界点ID
*/
UINT16 GetCfpIdByPoint(UINT16 wLink, UINT32 dwOffset)
{
UINT16 wIndex = 0u;
UINT16 wCfpSum = GetCfpSum();
UINT16 wCfpId = 0u;
UINT16 wCfpLink = 0u;
UINT32 dwCfpOffset = UINT32_MAX;
UINT16 wRetVal = 0u;
UINT8 chFunRet = CI_ERROR;
UINT16 wSameLink = 0u;
UINT32 dwSameOffset = UINT32_MAX;
chFunRet = CheckLinkValid(wLink, dwOffset);
if (CI_SUCCESS == chFunRet)
{
for (wIndex = 0u; wIndex < wCfpSum; wIndex++)
{/* 遍历分界点 */
wCfpId = GetCfpId(wIndex);
wCfpLink = GetCfpLink(wCfpId);
dwCfpOffset = GetCfpOffset(wCfpId);
(void)dsuCheckSameLoc(wCfpLink, dwCfpOffset, &wSameLink, &dwSameOffset);
if ((wCfpLink == wLink) && (dwCfpOffset == dwOffset))
{
wRetVal = wCfpId;/* 边界点所处位置与输入一致,找到此边界点 */
}
else if(((wSameLink == wLink) && (dwSameOffset == dwOffset)))
{
wRetVal = wCfpId;/* 边界点同位置点与输入一致,找到此边界点 */
}
else
{
; /*无操作*/
}
if (0u != wRetVal)
{
break;/* 找到对应边界点,跳出循环 */
}
else
{
;
}
}
}
else
{
;
}
return wRetVal;
}
/*
* 功能描述: 整理读入的分界点配置数据
* 参数说明: 无
* 返回值 CI_SUCCESS,整理成功
* CI_ERROR,整理失败
*/
UINT8 CutoffPointConfigDataManage(void)
{
UINT16 ii = 0u; /*游标*/
UINT16 jj = 0u; /*游标*/
UINT16 wCutoffDataSum = 0u; /*信号机设备配置数据总数*/
UINT8 ret = CI_ERROR;
UINT8 localCiId = GetSystemParaLocalCiId();
/*保存信号机ID索引数组*/
wCutoffDataSum =GetCfpSum ();
if (wCutoffDataSum < CUTOFF_POINT_SUM_MAX)
{/*配置数据总数错误*/
for (ii = 0u; ii < CUTOFF_POINT_SUM_MAX; ii++)
{
if (jj == wCutoffDataSum)
{/*遍历有效数据完毕*/
break;
}
else
{
;
}
if (localCiId == g_szCfpConfig[ii].wLocalTiocId)
{/*该部分为有效数据*/
gszCfpId[jj] = g_szCfpConfig[ii].wPointId;
jj++;
}
else
{
;
}
}
ret = CI_SUCCESS;
}
else
{
;
}
return ret;
}
/**
* @brief 获取两点之间属于本控区的分界点
* @param struct_PathPoint strPointA
* @param struct_PathPoint strPointB
* @param struct_PathPoint *pPoint
* @return CI_SUCCESS:获取成功 CI_ERROR:获取失败
*/
UINT8 GetCfpLocByTwoPoints(struct_PathPoint strPointA, struct_PathPoint strPointB, struct_PathPoint* pPoint)
{
UINT16 wIndex = 0u;
UINT16 wCfpSum = GetCfpSum();
UINT16 wCfpId = 0u;
UINT16 wCfpLink = 0u;
UINT32 dwCfpOffset = UINT32_MAX;
UINT8 chFunRet = CI_ERROR;
UINT16 wSameLink = 0u;
UINT32 dwSameOffset = UINT32_MAX;
UINT8 chDirA = 0u;
UINT8 chDirB = 0u;
struct_PathPoint strPointCfp = { 0u };
UINT8 chRtn = CI_ERROR;
UINT16 wLinkTioc = 0u;
UINT8 chLocTioc = 0u;
LOD_STRU lodStrPointA = { 0U };
LOD_STRU lodStrPointB = { 0U };
str_Zone strZone = { 0u };
UINT32 dwLen = UINT32_MAX;
UINT16 wLinkNum = 0U;
UINT8 chFunRtn = CI_ERROR;
/* 入参检测,判断是否为合法位置 */
chFunRet = CheckLinkValid(strPointA.wLinkId, strPointA.dwOffset);
chFunRet &= CheckLinkValid(strPointB.wLinkId, strPointB.dwOffset);
if (CI_SUCCESS == chFunRet)
{
chLocTioc = GetSystemParaLocalCiId();
for (wIndex = 0u; wIndex < wCfpSum; wIndex++)
{
wCfpId = GetCfpId(wIndex);
wCfpLink = GetCfpLink(wCfpId);
dwCfpOffset = GetCfpOffset(wCfpId);
strPointCfp.wLinkId = wCfpLink;
strPointCfp.dwOffset = dwCfpOffset;
/* 遍历边界点,获取边界点处于输入两点位置 */
lodStrPointA.Lnk = strPointA.wLinkId;
lodStrPointA.Off = strPointA.dwOffset;
lodStrPointB.Lnk = strPointB.wLinkId;
lodStrPointB.Off = strPointB.dwOffset;
dwLen = dsuLenByPoint(&lodStrPointA, &lodStrPointB, &wLinkNum, strZone.pLinkSeq.szLinkId, &strZone.Dir);
if (UINT32_MAX != dwLen)
{
strZone.pLinkSeq.cLinkCnt = (UINT8)wLinkNum;
strZone.pStart.wLinkId = lodStrPointA.Lnk;
strZone.pStart.dwOffset = lodStrPointA.Off;
strZone.pEnd.wLinkId = lodStrPointB.Lnk;
strZone.pEnd.dwOffset = lodStrPointB.Off;
chFunRtn = IsPointInPath(strPointCfp, strZone); /*判断分界点是否处于两点间*/
if (CI_ERROR == chFunRtn)
{
chRtn = CI_SUCCESS; /*在两点形成的区域之间*/
}
else
{
}
}
else
{
chRtn = CI_ERROR; /*返回失败*/
}
if (CI_SUCCESS == chRtn)
{
wLinkTioc = GetLinkManageTiocById(wCfpLink);
if (wLinkTioc == chLocTioc)
{
pPoint->wLinkId = wCfpLink;
pPoint->dwOffset = dwCfpOffset;
}
else
{
/* 需要返回边界点所在本控区位置,所以边界点所处link不为本TIOC,获取同位置点 */
chFunRet = dsuCheckSameLoc(wCfpLink, dwCfpOffset, &wSameLink, &dwSameOffset);
if (CI_SUCCESS == chFunRet)
{
pPoint->wLinkId = wSameLink;
pPoint->dwOffset = dwSameOffset;
}
else
{
chRtn = CI_ERROR;
}
}
break;
}
}
}
else
{
;
}
return chRtn;
}
/**
* @brief 获取两点之间属于本控区的分界点
* @param struct_PathPoint strPointA
* @param struct_PathPoint strPointB
* @param struct_PathPoint *pPoint
* @return CI_SUCCESS:获取成功 CI_ERROR:获取失败
*/
UINT8 GetCfpLocByTwoPointsEx(LOD_STRU strPointA, LOD_STRU strPointB, LOD_STRU *pPoint)
{
UINT8 chRtn = CI_ERROR;
struct_PathPoint strTmpA = { 0u };
struct_PathPoint strTmpB = { 0u };
struct_PathPoint strTmpC = { 0u };
LOD_STRU strTmpD = { 0u };
UINT8 chDirChangeNum = 0u;
if (NULL == pPoint)
{
;
}
else
{
chRtn = CheckLinkValid(strPointA.Lnk, strPointA.Off);
chRtn &= CheckLinkValid(strPointB.Lnk, strPointB.Off);
}
/* 如参检测通过 */
if (CI_SUCCESS == chRtn)
{
strTmpA.wLinkId = strPointA.Lnk;
strTmpA.dwOffset = strPointA.Off;
strTmpB.wLinkId = strPointB.Lnk;
strTmpB.dwOffset = strPointB.Off;
chRtn = GetCfpLocByTwoPoints(strTmpA, strTmpB, &strTmpC);
}
else
{
;
}
if (CI_SUCCESS == chRtn)
{
strTmpD.Lnk = strTmpC.wLinkId;
strTmpD.Off = strTmpC.dwOffset;
strTmpD.Dir = EMAP_SAME_DIR;/*方向不使用,仅赋值*/
chDirChangeNum = GetDirChangeNumBtwPoints(&(strPointA), &(strTmpD));
pPoint->Lnk = strTmpC.wLinkId;
pPoint->Off = strTmpC.dwOffset;
pPoint->Dir = TransDirByChangeNum(strPointA.Dir, chDirChangeNum);
}
else
{
;
}
return chRtn;
}
/**
* @brief 获取分界点本方TIOC编号
* @param wCfpId 分界点ID
* @return 分界点相邻TIOC编号
* by cgh 20240221
*/
UINT16 GetCfpwLocalTiocId(const UINT16 wCfpId)
{
UINT16 wRetVal = 0U;
UINT16 wIndex = 0u;
wIndex = GetCfpBufIndex(wCfpId);
if (CUTOFF_POINT_SUM_MAX > wIndex)
{
wRetVal = g_szCfpConfig[wIndex].wLocalTiocId;
}
else
{
;
}
return wRetVal;
}
/*
* @brief 获取分界点关联的相邻RC的信号机ID
* @param const UINT16 wCfpId 分界点ID
* @return 分界点关联的相邻RC的信号机ID
* Created By LQ 2024.09.03
*/
UINT16 GetCfpRelAdjacentRcSignalId(const UINT16 wCfpId)
{
UINT16 wRetVal = 0U;
UINT16 wIndex = 0U;
wIndex = GetCfpBufIndex(wCfpId);
if (CUTOFF_POINT_SUM_MAX > wIndex)
{
wRetVal = g_szCfpConfig[wIndex].wRelAdjacentRcSignalId;
}
else
{
/*入参检查失败,返回0*/
}
return wRetVal;
}
@@ -0,0 +1,147 @@
#ifndef _CUTOFPOINT_CONFIG_DATA_MANAGE_H_
#define _CUTOFPOINT_CONFIG_DATA_MANAGE_H_
#include "CutoffPointDefine.h"
#include "LinkConfigDataManage.h"
#include "../System/SystemParameterManage.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct S_CutoffPointConfigDataStruct
{
UINT16 wPointId; /* 分界点ID */
UINT16 wLinkId; /* 分界点所处link */
UINT32 dwOffset; /* 分界点所处link偏移量 */
UINT16 wLocalTiocId; /* 本方TiocID*/
UINT16 wOtherTiocId; /* 相邻TIOC编号 */
UINT8 chLocDir; /* 本TIOC处于分界点的逻辑方向 */
UINT16 wInFirstLink; /* 分界点内方第一link */
UINT16 wRelAdjacentRcSignalId; /* 分界点关联的相邻RC的信号机ID */
}CfpConfigStru;
/*全局变量声明*/
extern CfpConfigStru g_szCfpConfig[CUTOFF_POINT_SUM_MAX]; /* 分界点配置数据存放数组 */
extern UINT16 gszCfpId[CUTOFF_POINT_SUM_MAX];
extern UINT16 gCfpConfigSum; /* 分界点配置个数 */
/**
* @brief 获取本TIOC分界点总数
* @param 无
* @return 本TIOC分界点总数
*/
extern UINT16 GetCfpSum(void);
/**
* @brief 获取分界点ID
* @param bufIndex ID下标
* @return 分界点ID
*/
extern UINT16 GetCfpId(const UINT16 bufIndex);
/**
* @brief 获取分界点存储指针
* @param 无
* @return 分界点存储指针
*/
extern CfpConfigStru * GetCfpConfigData(void);
/**
* @brief 获取分界点存储索引
* @param wCfpId 分界点ID
* @return 分界点存储索引
*/
extern UINT16 GetCfpBufIndex(const UINT16 wCfpId);
/**
* @brief 获取分界点所处link
* @param wCfpId 分界点ID
* @return 分界点所处link
*/
extern UINT16 GetCfpLink(const UINT16 wCfpId);
/**
* @brief 获取分界点所处link偏移量
* @param wCfpId 分界点ID
* @return 分界点存储所处link偏移量
*/
extern UINT32 GetCfpOffset(const UINT16 wCfpId);
/**
* @brief 获取分界点相邻TIOC编号
* @param wCfpId 分界点ID
* @return 分界点相邻TIOC编号
*/
extern UINT16 GetCfpOtherTioc(const UINT16 wCfpId);
/**
* @brief 获取本TIOC处于分界点方向
* @param wCfpId 分界点ID
* @return 本TIOC处于分界点方向
*/
extern UINT8 GetCfpLocDir(const UINT16 wCfpId);
/**
* @brief 获取分界点内方第一link
* @param wCfpId 分界点ID
* @return 分界点内方第一link
*/
extern UINT16 GetCfpInFirstLink(const UINT16 wCfpId);
/**
* @brief 根据link和偏移量获取分界点ID
* @param wLink
* @param dwOffset
* @return 0:查询失败 其他:分界点ID
*/
extern UINT16 GetCfpIdByPoint(UINT16 wLink, UINT32 dwOffset);
/*
* 功能描述: 整理读入的分界点配置数据
* 参数说明: 无
* 返回值 CI_SUCCESS,整理成功
* CI_ERROR,整理失败
*/
extern UINT8 CutoffPointConfigDataManage(void);
/**
* @brief 获取两点之间属于本控区的分界点
* @param struct_PathPoint strPointA
* @param struct_PathPoint strPointB
* @param struct_PathPoint *pPoint
* @return CI_SUCCESS:获取成功 CI_ERROR:获取失败
*/
UINT8 GetCfpLocByTwoPoints(struct_PathPoint strPointA, struct_PathPoint strPointB, struct_PathPoint* pPoint);
/**
* @brief 获取两点之间属于本控区的分界点
* @param struct_PathPoint strPointA
* @param struct_PathPoint strPointB
* @param struct_PathPoint *pPoint
* @return CI_SUCCESS:获取成功 CI_ERROR:获取失败
*/
extern UINT8 GetCfpLocByTwoPointsEx(LOD_STRU strPointA, LOD_STRU strPointB, LOD_STRU *pPoint);
/**
* @brief 获取分界点本方TIOC编号
* @param wCfpId 分界点ID
* @return 分界点相邻TIOC编号
* by cgh 20240221
*/
UINT16 GetCfpwLocalTiocId(const UINT16 wCfpId);
/*
* @brief 获取分界点关联的相邻RC的信号机ID
* @param const UINT16 wCfpId 分界点ID
* @return 分界点关联的相邻RC的信号机ID
* Created By LQ 2024.09.03
*/
UINT16 GetCfpRelAdjacentRcSignalId(const UINT16 wCfpId);
#ifdef __cplusplus
}
#endif
#endif
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,358 @@
#ifndef _CUTOFPOINT_DATA_MANAGE_H_
#define _CUTOFPOINT_DATA_MANAGE_H_
#include "CutoffPointDefine.h"
#include "EnvelopeDefine.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct
{
UINT16 wTrainId; /* 离分界点最近的列车ID */
UINT8 chTrainLevel; /* 离分界点最近的列车的运行级别 */
UINT32 dwDis; /* 离分界点最近的列车与分界点之间距离(cm) */
}CfpTrainInfoStru;
/** 定义与相邻TIOC接口使用的包络 */
typedef struct
{
UINT8 envelopeType; /* 包络类型 */
UINT16 headTrainID; /*包络前端列车ID*/
UINT16 tailTrainID; /*包络后端列车ID*/
LOD_STRU startPos; /*始端位置*/
LOD_STRU endPos; /*终端位置*/
UINT8 trianCnt; /*包络中包含的列车数量*/
UINT16 trainID[TRAIN_IN_ENVELOPE_SUM_MAX]; /*包络中包含的列车ID*/
UINT8 ACTPort[TRAIN_IN_ENVELOPE_SUM_MAX]; /*包络中列车激活端——解决UCT包络跨分界点无法RMM问题 */
UINT8 ACCnt; /*包含的AC数量*/
UINT16 ACID[SECTION_IN_ENVELOPE_SUM_MAX]; /*包含的AC ID*/
}CfpEnvelopeStruct;
/* 分界点通信列车 */
typedef struct
{
UINT16 wTrainId; /* 列车ID */
UINT8 chLevel; /* 列车运行级别 */
UINT32 dwDelay; /* TIOC与列车通信延时 */
UINT16 wSpeed; /* 列车速度 */
UINT8 chSpeedDir; /* 速度方向 */
UINT8 chTrainDir; /* 列车运行方向 */
UINT16 wMaxHeadLink; /* 列车最大安全前端link */
UINT32 dwMaxHeadOff; /* 列车最大安全前端偏移量 */
UINT16 wMinHeadLink; /* 列车最小安全前端link */
UINT32 dwMinHeadOff; /* 列车最小安全前端偏移量 */
UINT16 wMaxTailLink; /* 列车最大安全后端link */
UINT32 dwMaxTailOff; /* 列车最大安全后端偏移量 */
UINT16 wMinTailLink; /* 列车最小安全后端link */
UINT32 dwMinTailOff; /* 列车最小安全后端偏移量 */
}CfpCtTrainStruct;
/* 跨控区远程RM数据 */
typedef struct
{
UINT8 cRrmSrcRcId; /* 源RC ID */
UINT16 wRrmTrainId; /* RRM列车ID */
UINT16 wRrmTrainNextStaId; /* RRM列车申请的下一站台ID */
UINT8 chRrmSrcApplyState; /* 跨控区远程RM时,源TIOC申请状态 */
UINT8 chRrmDstAllowState; /* 跨控区远程RM时,目标TIOC允许状态 */
}CfpRRMDataStruct;
typedef struct
{
UINT16 wId; /* 分界点ID */
CfpTrainInfoStru otherTiocTrainInfo; /* 接收到的其他联锁的列车信息 */
CfpTrainInfoStru localTiocTrainInfo; /* 待发送到其他联锁的列车信息 */
UINT8 chLocalTiocEnvelopeNum; /* 待发送到其他联锁的包络数量 */
CfpEnvelopeStruct szLocalEnvelope[SECTION_REL_ENVELOPE_SUM_MAX]; /* 待发送到其他联锁的包络数量 */
UINT8 chOtherTiocEnvelopeNum; /* 接收到的其他联锁的包络数量 */
CfpEnvelopeStruct szOtherEnvelope[SECTION_REL_ENVELOPE_SUM_MAX]; /* 接收到的其他联锁的包络信息 */
UINT8 chCtNum; /* 分界点通信车数量 */
CfpCtTrainStruct szLocalCtTrain[TRAIN_SUM_MAX]; /* 分界点通信车信息 */
CfpRRMDataStruct szCfpRRMData; /* 分界点远程RM数据*/
UINT8 cSignalLightUpFlag; /*分界点信号机亮灯标志:0x55 亮灯标志无效;0xAA 亮灯标志有效*/
}CfpDataStru;
/*全局变量声明*/
extern CfpDataStru g_CutoffPointDataBuf[CUTOFF_POINT_SUM_MAX];
/*
* 功能描述: 分界点数据初始化
* 参数说明: 无
* 返回值 0: 设置失败
* 1: 设置成功
*/
UINT8 CutoffPointDataManageInit(void);
/**
* @brief 获取分界点相邻OC发来的列车信息
* @param wCfpId 分界点ID
* @return 列车信息
*/
CfpTrainInfoStru GetCfpOtherOcTrainInfo(const UINT16 wCfpId);
/**
* @brief 获取分界点本地OC发送的列车信息
* @param wCfpId 分界点ID
* @return 列车信息
*/
CfpTrainInfoStru GetCfpLocalOcTrainInfo(const UINT16 wCfpId);
/**
* @brief 设置分界点相邻OC发来的列车信息
* @param wCfpId 分界点ID trainInfo 列车信息
* @return 列车信息
*/
void SetCfpOtherOcTrainInfo(const UINT16 wCfpId, CfpTrainInfoStru trainInfo);
/**
* @brief 设置分界点本地OC发送的列车信息
* @param wCfpId 分界点ID trainInfo 列车信息
* @return 列车信息
*/
void SetCfpLocalOcTrainInfo(const UINT16 wCfpId, CfpTrainInfoStru trainInfo);
/*
* 功能描述: 分界点数据输出处理
* 参数说明: 无
* 返回值
*/
void CutoffPointOutput(void);
/**
* @brief 获取分界点相邻OC发来的包络数量
* @param wCfpId 分界点ID
* @return 包络数量
*/
UINT16 GetCfpOtherOcENum(const UINT16 wCfpId);
/**
* @brief 获取分界点相邻OC发来的包络存储地址
* @param wCfpId 分界点ID
* @return 包络存储地址
*/
CfpEnvelopeStruct * GetCfpOtherOcEData(const UINT16 wCfpId);
/**
* @brief 获取分界点发送给相邻OC的包络数量
* @param wCfpId 分界点ID
* @return 包络数量
*/
UINT8 GetCfpLocalOcENum(const UINT16 wCfpId);
/**
* @brief 获取分界点发送给相邻OC的包络存储地址
* @param wCfpId 分界点ID
* @return 包络存储地址
*/
CfpEnvelopeStruct * GetCfpLocalOcEData(const UINT16 wCfpId);
/**
* @brief 设置分界点相邻OC发来的包络数量
* @param wCfpId 分界点ID
* @param UINT16 wNum 包络数量
* @return 无
*/
void SetCfpOtherOcENum(const UINT16 wCfpId, const UINT16 wNum);
/**
* @brief 设置分界点相邻OC发来的包络数据
* @param wCfpId 分界点ID
* @param UINT8 chEnvelopeIndex 包络索引
* @param CfpEnvelopeStruct strEnvelope 包络数据
* @return 无
*/
void SetCfpOtherOcEData(const UINT16 wCfpId, const UINT8 chEnvelopeIndex, const CfpEnvelopeStruct strEnvelope);
/**
* @brief 设置分界点发送给相邻OC的包络数据
* @param wCfpId 分界点ID
* @return 无
*/
void SetCfpLocalOcEData(const UINT16 wCfpId);
/**
* @brief 获取相邻OC发来的包络
* @param UINT16 wOtherOc 相邻OC编号
* @param CfpEnvelopeStruct szEnvelope 包络数据
* @return 包络数量
*/
UINT8 GetOtherOcEnvelope(const UINT16 wOtherOc, CfpEnvelopeStruct szEnvelope[SECTION_REL_ENVELOPE_SUM_MAX * ONE_OTHER_CFP_SUM_MAX]);
/*
* 功能描述: 获取边界点数据存储地址
* 参数说明: 无
* 返回值 边界点数据存储地址
*/
CfpDataStru * GetCfpData(void);
/**
* @brief 设置分界点发送给相邻OC的通信列车数据
* @param wCfpId 分界点ID
* @return 无
* @note
*/
void SetCfpLocalOcCtData(const UINT16 wCfpId);
/**
* @brief 获取分界点发送给相邻OC的通信车地址
* @param wCfpId 分界点ID
* @return 通信车存储地址
*/
CfpCtTrainStruct * GetCfpLocalOcCtData(const UINT16 wCfpId);
/**
* @brief 获取分界点发送给相邻OC的通信车数量
* @param wCfpId 分界点ID
* @return 通信车数量
*/
UINT8 GetCfpLocalOcCtNum(const UINT16 wCfpId);
/**
* @brief 截取分界点相邻OC发来的包络数据
* @param wCfpId 分界点ID
* @param CfpEnvelopeStruct* strEnvelope 包络数据
* @return CI_ ERROR 截取失败
* CI_ SUCCESS 截取成功
* by cgh 20240111
*/
UINT8 CutCfpOtherOcEData(const UINT16 wCfpId,CfpEnvelopeStruct* strEnvelope);
/**
* @brief 获取分界点跨控区RRM源RC ID
* @param const UINT16 wCfpId 分界点ID
* @return 0 获取失败,其它 源RC ID
* Created By LQ 20240229
*/
UINT8 GetCfpRrmSrcRcId(const UINT16 wCfpId);
/**
* @brief 设置分界点跨控区RRM源RC ID
* @param wCfpId 分界点ID
* @param const UINT8 chSrcRcId 源RC ID
* @return 无
* Created By LQ 20240229
*/
void SetCfpRrmSrcRcId(const UINT16 wCfpId, const UINT8 chSrcRcId);
/**
* @brief 获取分界点跨控区RRM源TIOC申请状态
* @param wCfpId 分界点ID
* @return 跨控区RRM源TIOC申请状态
* by cgh 20240220
*/
UINT8 GetCfpRrmSrcApplyState(const UINT16 wCfpId);
/**
* @brief 设置分界点跨控区RRM源TIOC申请状态
* @param wCfpId 分界点ID
* @param const UINT8 chRrmSrcApplyState RRM源TIOC申请状态
* @return 无
* by cgh 20240221
*/
void SetCfpRrmSrcApplyState(const UINT16 wCfpId, const UINT8 chRrmSrcApplyState);
/**
* @brief 获取分界点跨控区RRM目标TIOC允许状态
* @param wCfpId 分界点ID
* @return 跨控区RRM目标TIOC允许状态
* by cgh 20240220
*/
UINT8 GetCfpRrmDstAllowState(const UINT16 wCfpId);
/**
* @brief 设置分界点跨控区RRM目标TIOC允许状态
* @param wCfpId 分界点ID
* @param const UINT8 chRrmSrcApplyState RRM目标TIOC允许状态
* @return 无
* by cgh 20240221
*/
void SetCfpRrmDstAllowState(const UINT16 wCfpId, const UINT8 chRrmDstAllowState);
/**
* @brief 获取分界点跨控区RRM列车ID
* @param wCfpId 分界点ID
* @return 跨控区RRM列车ID
* by cgh 20240221
*/
UINT16 GetCfpRrmTrainId(const UINT16 wCfpId);
/**
* @brief 设置分界点跨控区RRM列车ID
* @param wCfpId 分界点ID
* @param const UINT16 wRrmTrainId 跨控区RRM列车ID
* @return 无
* by cgh 20240221
*/
void SetCfpRrmTrainId(const UINT16 wCfpId, const UINT16 wRrmTrainId);
/**
* @brief 获取分界点跨控区RRM列车申请的下一站台ID
* @param wCfpId 分界点ID
* @return RRM列车申请的下一站台ID
* by cgh 20240221
*/
UINT16 GetCfpRrmTrainNextStaId(const UINT16 wCfpId);
/**
* @brief 设置分界点跨控区RRM列车申请的下一站台ID
* @param wCfpId 分界点ID
* @param const UINT16 wRrmTrainNextStaId RRM列车申请的下一站台ID
* @return 无
* by cgh 20240221
*/
void SetCfpRrmTrainNextStaId(const UINT16 wCfpId, const UINT16 wRrmTrainNextStaId);
/*
* 功能描述: 相邻TIOC通信良好,RRM处理
* 参数说明: UINT8 chTiocId 相邻TIOC编号
* 返回值
* by cgh 20240221
*/
void NeighborGoodRrmProc(UINT8 chTiocId);
/*
* 功能描述:根据分界点ID获取本分界点处的计轴区段ID
* 参数说明:UINT16 wCfpId 分界点ID
* UINT8 cAxisSecNum 计轴区段数量
* UINT16 pAxisSecIdBuf[CUTOFF_POINT_SUM_MAX] 计轴区段ID数组
* 返回值 CI_ERROR 0 获取失败
* 其它 计轴区段ID
* Created by LQ 20240227
*/
UINT16 GetAxisSecIdAccordCfpId(UINT16 wCfpId, UINT8 cAxisSecNum, UINT16 pAxisSecIdBuf[CUTOFF_POINT_SUM_MAX]);
/*
* 功能描述:分界点RRM数据清除处理
* 参数说明:const UINT16 wCutoffPointId 分界点ID
* 返回值 :无
* Created By LQ 2024.02.28
*/
void CutoffPointRRMDataClearPro(const UINT16 wCutoffPointId);
/**
* @brief 获取分界点信号机亮灯标志
* @param const UINT16 wCfpId 分界点ID
* @return 0x55 点亮标志无效
* 0xAA 点亮标志有效
* Created By LQ 2024.09.03
*/
UINT8 GetCfpSignalLightUpFlag(const UINT16 wCfpId);
/**
* @brief 设置分界点信号机亮灯标志
* @param const UINT16 wCfpId 分界点ID
* @param const UINT8 cLightUpFlag 亮灯标志
* @return 无
* Created By LQ 2024.09.03
*/
void SetCfpSignalLightUpFlag(const UINT16 wCfpId, const UINT8 cLightUpFlag);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,20 @@
#ifndef _CUTOFPOINT_DEFINE_H_
#define _CUTOFPOINT_DEFINE_H_
#include "Commontypes.h"
#include "CiSystemDefine.h"
#ifdef __cplusplus
extern "C" {
#endif
#define CUTOFF_POINT_SUM_MAX ((UINT8)50) /*联锁分界点数量*/
#define MAX_CFG_LIGHTUPLINK_NUM ((UINT8)50u) /* 分界点占用查找link数量 */
#define ONE_OTHER_CFP_SUM_MAX ((UINT8)6u) /* 同一个相邻OC与本OC最大分界点数 */
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,317 @@
/********************************************************
*
* 文 件 名: DeviceConfigDataManage.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2016-12-18
* 作 者: 联锁组
* 功能描述:
设备配置数据管理。随着CI的外部逻辑不断增加,需要的配置越来越多。
之前代码文件夹的结构是按设备种类划分的,例如:信号和道岔都有自己的文件夹,并且文件夹下面有静态数据和动态数据的定义已经管理文件。
但如今,很多配置的设备含义并不那么明显,并且为了避免目录结构随意的膨胀,于是对一些配置进行统一管理。
* 函数包括:
* 使用注意:
* 修改记录:
* 2016-12-18 新建
*
********************************************************/
#include "DeviceConfigDataManage.h"
#include "dquCbtcType.h"
#include "dquCIInterFace.h"
EmapCiConfigStru gEmapCiConfigStrus[CI_SUM_MAX] = {0u};/*存储各CI使用的电子地图版本*/
/*
* 功能描述: 读取各指定CI的电子地图校验版本配置
* 参数说明:
const UINT8 ciId:联锁编号
UINT32 *emapVer:存储指定CI的电子地图校验版本号的UINT32变量指针
const UINT8 commDevType:与CI通信的设备类型
* 返回值:
CI_SUCCESS:获取成功
CI_ERROR:获取失败
*/
UINT8 GetCiEmapCheckVer(const UINT8 ciId, UINT32 *emapVer,const UINT8 commDevType)
{
UINT8 retVal = CI_ERROR;
if ((ciId > 0u) && (ciId < CI_SUM_MAX) &&(commDevType > 0u))
{
if (gEmapCiConfigStrus[ciId].devId == ciId)
{
switch (commDevType)
{/*根据通信设备类型获取CI与该通信设备的共用数据校验信息*/
case CI_SYSTEM_TYPE_VOBC:
case CI_SYSTEM_TYPE_ITE:
*emapVer = gEmapCiConfigStrus[ciId].dataVerCheckCIAndVOBC; /*ITE使用与VOBC相同的校验信息*/
break;
case CI_SYSTEM_TYPE_ZC:
*emapVer = gEmapCiConfigStrus[ciId].dataVerCheckCIAndZC;
break;
case CI_SYSTEM_TYPE_XIANDI:
case CI_SYSTEM_TYPE_ATS:
*emapVer = gEmapCiConfigStrus[ciId].dataVerCheckCIAndATS;
break;
case CI_SYSTEM_TYPE_TMC:
*emapVer = gEmapCiConfigStrus[ciId].dataVerCheckCIAndTMC;
break;
default:
/*CI_SYSTEM_TYPE_CI等情况*/
break;
}
retVal = CI_SUCCESS;
}
}
return retVal;
}
/*********************************************
*函数功能:读取联锁类型
*参数说明:const UINT8 ciId联锁ID
*返回值:UINT8 联锁类型
* 0x01 正线联锁
* 0x04 车辆段联锁
* 0x02 试车线
* 0 无效
*********************************************/
UINT8 GetCiType(const UINT8 ciId)
{
UINT8 retVal = 0u;
if ((ciId > 0u) && (ciId < CI_SUM_MAX))
{
if (gEmapCiConfigStrus[ciId].devId == ciId)
{
retVal = gEmapCiConfigStrus[ciId].ciType;
}
}
return retVal;
}
/*
* 功能描述: 判断两个CI是否属于同一条线路
* 参数说明:
const UINT8 ciA, 第一个CI
const UINT8 ciB, 第二个CI
* 返回值:
SAME_LINE_YES,两个CI属于同一条线路
SAME_LINE_NO,两个CI属于不同线路
SAME_LINE_ERR,无法确定两个CI是否属于同一条线路
*/
UINT8 IsSameLineCI(const UINT8 ciA, const UINT8 ciB)
{
UINT32 etcsIdA, etcsIdB;
UINT16 u16CiA, u16CiB;
UINT8 retVal = SAME_LINE_ERR;
UINT8 cbtcSysType = DQU_CBTC_FAO;
UINT8 dquDevNameA = CI_ERROR;
UINT8 dquDevNameB = CI_ERROR;
u16CiA = (UINT16)((CI_SYSTEM_TYPE_CI * 256u) + ciA);
u16CiB = (UINT16)((CI_SYSTEM_TYPE_CI * 256u) + ciB);
cbtcSysType = GetCbtcSysType();
dquDevNameA = dquDevName2HlhtId(u16CiA,0u,&etcsIdA);
dquDevNameB = dquDevName2HlhtId(u16CiB,0u,&etcsIdB);
if(DQU_CBTC_CPK == cbtcSysType)
{
retVal = SAME_LINE_YES;
}
else if(DQU_CBTC_FAO == cbtcSysType)
{
retVal = SAME_LINE_YES;
}
else if(DQU_CBTC_HLT == cbtcSysType)
{
/*需要增加互联互通的判断*/
if ((CI_SUCCESS == dquDevNameA) && (CI_SUCCESS == dquDevNameB))
{
/*根据互联互通ETCS编号的定义,从低到高第三个字节为线路编号*/
if ((etcsIdA&((UINT32)0x00ff0000)) == (etcsIdB & ((UINT32)0x00ff0000)))
{
retVal = SAME_LINE_YES;
}
else
{
retVal = SAME_LINE_NO;
}
}
else
{
retVal = SAME_LINE_ERR;
}
}/* zt 删除单轨相关代码 2022-02-15 */
else if (DQU_CBTC_CC == cbtcSysType)
{
retVal = SAME_LINE_YES;
}
else
{
retVal = SAME_LINE_ERR;
}
return retVal;
}
/*
* 功能描述: 读取各指定CI与通信的该计轴的数据版本号
* 参数说明:
* const UINT8 ciId:联锁编号
* const UINT16 deviceName:与CI通信的计轴系统名称(类型+ID)
* 返回值:
* 计轴系统数据校验版本号
* cgh-合并ECI11.0:
*/
UINT32 GetCiTranAxisDataCheckVer(const UINT8 ciId, const UINT16 deviceName)
{
UINT32 retDataVer = CI_ERROR;
UINT8 ii = 0u;
if ((ciId > 0u) && (ciId < CI_SUM_MAX) && (deviceName > 0u))
{
if (gEmapCiConfigStrus[ciId].devId == ciId)
{
for (ii = 0u; ii < CI_TRAINSMIT_AXIS_MAX_NUM; ii++)
{
if ((deviceName == gEmapCiConfigStrus[ciId].ciTransmitAxisId[ii]) && (gEmapCiConfigStrus[ciId].ciTransmitAxisId[ii] > 0u) && (gEmapCiConfigStrus[ciId].ciTransmitAxisId[ii] < 0xFFFFU))
{
retDataVer = gEmapCiConfigStrus[ciId].ciTransmitAxisCheckData[ii];
break;
}
}
}
}
return retDataVer;
}
/*
* 功能描述: 读取各指定CI与通信的相邻联锁的数据版本号
* 参数说明:
* const UINT8 ciId:联锁编号
* const UINT16 deviceName:与CI通信的CI系统名称(类型+ID)
* 返回值:
* CI系统数据校验版本号
*/
UINT32 GetCiTranCiDataCheckVer(const UINT8 ciId, const UINT16 deviceName)
{
UINT32 retDataVer = CI_ERROR;
UINT8 ii = 0U;
UINT8 chBreakFlag = 0U;
if ((ciId > 0U) && (ciId < CI_SUM_MAX) && (deviceName > 0U))
{
if (gEmapCiConfigStrus[ciId].devId == ciId)
{
for (ii = 0U; ii < gEmapCiConfigStrus[ciId].chAdjoinCICount; ii++)
{
if (ii < CI_TRAINSMIT_CI_MAX_NUM)
{
if ((deviceName == gEmapCiConfigStrus[ciId].wAdjoinCIId[ii]) && (gEmapCiConfigStrus[ciId].wAdjoinCIId[ii] > 0U) && (gEmapCiConfigStrus[ciId].wAdjoinCIId[ii] < 0xFFFFU))
{
retDataVer = gEmapCiConfigStrus[ciId].dwAdjoinCIShareCheckData[ii];
chBreakFlag = 1U;
}
}
else
{
chBreakFlag = 1U;
}
if (1U == chBreakFlag)
{
break;
}
}
}
}
return retDataVer;
}
/*
* 功能描述: 读取各指定OC与通信的相邻联锁的数据版本号
* 参数说明:
* const UINT8 ciId:联锁编号
* const UINT16 deviceName:与CI通信的OC系统名称(类型+ID)
* 返回值:
* OC系统数据校验版本号
*/
UINT32 GetCiTranOcDataCheckVer(const UINT8 ciId, const UINT16 deviceName)
{
UINT32 retDataVer = CI_ERROR;
UINT8 ii = 0U;
UINT8 chBreakFlag = 0U;
if ((ciId > 0U) && (ciId < CI_SUM_MAX) && (deviceName > 0U))
{
if (gEmapCiConfigStrus[ciId].devId == ciId)
{
for (ii = 0U; ii < gEmapCiConfigStrus[ciId].chAdjoinOcCount; ii++)
{
if (ii < CI_TRAINSMIT_OC_MAX_NUM)
{
if ((deviceName == gEmapCiConfigStrus[ciId].wAdjoinOcId[ii]) && (gEmapCiConfigStrus[ciId].wAdjoinOcId[ii] > 0U) && (gEmapCiConfigStrus[ciId].wAdjoinOcId[ii] < 0xFFFFU))
{
retDataVer = gEmapCiConfigStrus[ciId].dwAdjoinOcShareCheckData[ii];
chBreakFlag = 1U;
}
}
else
{
chBreakFlag = 1U;
}
if (1U == chBreakFlag)
{
break;
}
}
}
}
return retDataVer;
}
/**
* @brief 获取指定联锁的相邻联锁数目
* @param[in] const UINT8 chCiId 指定CI ID
* @return 指定联锁的相邻联锁数目
* @note by cgh 20240220
*/
UINT8 GetCiTranCiSum(const UINT8 chCiId)
{
UINT8 chReval = 0U;
if ((0U < chCiId) && (CI_SUM_MAX > chCiId))
{
chReval = gEmapCiConfigStrus[chCiId].chAdjoinCICount;
}
else
{
; /*校验不通过,返回0*/
}
return chReval;
}
/**
* @brief 获取指定联锁的相邻联锁数组
* @param[in] const UINT8 chCiId 指定CI ID
* @return 指定联锁的相邻联锁数组
* @note by cgh 20240220
*/
UINT16* GetCiTranCiData(const UINT8 chCiId)
{
UINT16* chReval = NULL;
if ((0U < chCiId) && (CI_SUM_MAX > chCiId))
{
chReval = gEmapCiConfigStrus[chCiId].wAdjoinCIId;
}
else
{
; /*校验不通过,返回空*/
}
return chReval;
}
@@ -0,0 +1,128 @@
/********************************************************
*
* 文 件 名: DeviceConfigDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2016-12-18
* 作 者: 联锁组
* 功能描述:
设备配置数据管理。随着CI的外部逻辑不断增加,需要的配置越来越多。
之前代码文件夹的结构是按设备种类划分的,例如:信号和道岔都有自己的文件夹,并且文件夹下面有静态数据和动态数据的定义已经管理文件。
但如今,很多配置的设备含义并不那么明显,并且为了避免目录结构随意的膨胀,于是对一些配置进行统一管理。
* 函数包括:
* 使用注意:
* 修改记录:
* 2016-12-18 新建
*
********************************************************/
#ifndef _DEVICE_CONFIG_DATA_MANAGE_H_
#define _DEVICE_CONFIG_DATA_MANAGE_H_
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#define SAME_LINE_YES ((UINT8)0x55) /*两个CI属于同一条线路*/
#define SAME_LINE_NO ((UINT8)0xAA) /*两个CI属于不同线路*/
#define SAME_LINE_ERR ((UINT8)0xff) /*无法确定两个CI是否属于同一条线路*/
/*电子地图校验版本配置结构体*/
typedef struct S_EmapCheckVerConfigStruct
{
UINT8 devId;/*tct的设备ID只占用一个字节*/
UINT8 ciType;/*联锁属性,1正线;2试车线;4车辆段*/
UINT32 dataVerCheckCIAndVOBC;/*CI-VOBC共用数据校验信息*/
UINT32 dataVerCheckCIAndZC;/*CI-ZC共用数据校验信息*/
UINT32 dataVerCheckCIAndATS;/*CI-ATS共用数据校验信息*/
UINT32 dataVerCheckCIAndTMC;/*CI-TMC共用数据校验信息*/
UINT8 chAdjoinCICount; /*相邻CI数量*/
UINT16 wAdjoinCIId[CI_TRAINSMIT_CI_MAX_NUM]; /*相邻CI[1-6]的ID*/
UINT32 dwAdjoinCIShareCheckData[CI_TRAINSMIT_CI_MAX_NUM]; /*与相邻CI[1-6]的共用数据校验信息*/
UINT16 ciTransmitAxisId[CI_TRAINSMIT_AXIS_MAX_NUM];/*与联锁通信的计轴系统ID*/
UINT32 ciTransmitAxisCheckData[CI_TRAINSMIT_AXIS_MAX_NUM];/*与联锁通信的计轴系统校验信息*/
UINT8 chAdjoinOcCount; /*与CI通信的oc数量*/
UINT16 wAdjoinOcId[CI_TRAINSMIT_OC_MAX_NUM]; /*Oc[1-10]的ID*/
UINT32 dwAdjoinOcShareCheckData[CI_TRAINSMIT_OC_MAX_NUM]; /*与OC[1-10]的共用数据校验信息*/
} EmapCiConfigStru;
extern EmapCiConfigStru gEmapCiConfigStrus[CI_SUM_MAX];/*存储各CI使用的电子地图版本*/
/*
* 功能描述: 读取各指定CI的电子地图校验版本配置
* 参数说明:
const UINT8 ciId:联锁编号
UINT32 *emapVer:存储指定CI的电子地图校验版本号的UINT32变量指针
* 返回值:
CI_SUCCESS:获取成功
CI_ERROR:获取失败
*/
UINT8 GetCiEmapCheckVer(const UINT8 ciId, UINT32 *emapVer,const UINT8 commDevType);
/*
* 功能描述: 判断两个CI是否属于同一条线路
* 参数说明:
const UINT8 ciA, 第一个CI
const UINT8 ciB, 第二个CI
* 返回值:
SAME_LINE_YES,两个CI属于同一条线路
SAME_LINE_NO,两个CI属于不同线路
SAME_LINE_ERR,无法确定两个CI是否属于同一条线路
*/
UINT8 IsSameLineCI(const UINT8 ciA, const UINT8 ciB);
/*********************************************
*函数功能:读取联锁类型
*参数说明:const UINT8 ciId联锁ID
*返回值:UINT8 联锁类型
* 0x01 正线联锁
* 0x04 车辆段联锁
* 0x02 试车线
* 0 无效
*********************************************/
UINT8 GetCiType(const UINT8 ciId);
/*
* 功能描述: 读取各指定CI与通信的该计轴的数据版本号
* 参数说明:
* const UINT8 ciId:联锁编号
* const UINT16 deviceName:与CI通信的计轴系统名称(类型+ID)
* 返回值:
* 计轴系统数据校验版本号
* cgh-合并ECI11.0:
*/
UINT32 GetCiTranAxisDataCheckVer(const UINT8 ciId, const UINT16 deviceName);
/*
* 功能描述: 读取各指定CI与通信的相邻联锁的数据版本号
* 参数说明:
* const UINT8 ciId:联锁编号
* const UINT16 deviceName:与CI通信的CI系统名称(类型+ID)
* 返回值:
* CI系统数据校验版本号
*/
UINT32 GetCiTranCiDataCheckVer(const UINT8 ciId, const UINT16 deviceName);
/*
* 功能描述: 读取各指定OC与通信的相邻联锁的数据版本号
* 参数说明:
* const UINT8 ciId:联锁编号
* const UINT16 deviceName:与CI通信的OC系统名称(类型+ID)
* 返回值:
* OC系统数据校验版本号
*/
UINT32 GetCiTranOcDataCheckVer(const UINT8 ciId, const UINT16 deviceName);
/**
* @brief 获取指定联锁的相邻联锁数目
* @param[in] const UINT8 chCiId 指定CI ID
* @return 指定联锁的相邻联锁数目
* @note by cgh 20240220
*/
UINT8 GetCiTranCiSum(const UINT8 chCiId);
/**
* @brief 获取指定联锁的相邻联锁数组
* @param[in] const UINT8 chCiId 指定CI ID
* @return 指定联锁的相邻联锁数组
* @note by cgh 20240220
*/
UINT16* GetCiTranCiData(const UINT8 chCiId);
#endif
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,674 @@
/********************************************************
*
* 文 件 名: PlatDataManage.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2023-12-12
* 作 者: 联锁组
* 功能描述: 从平台接收的平台设备数据处理
* 函数包括:
* 使用注意:
* 修改记录:
* by lc 20231212创建
*
********************************************************/
#include "PlatDataManage.h"
extern PlatHeartDataStruct RecvHeartDataStru ; /*平台心跳帧数据结构*/
extern PlatGPIODataStruct RecvPlatDataStruGPIO;/*平台0x2D帧数据结构 GPIO采集状态*/
/*
* 功能描述: 清空指定通控板卡发送的心跳数据
* 参数说明: 板卡ID
* 返回值
*/
void ClearnCCUHeartData(UINT8 boardId)
{
/*A系通控*/
if (BOARD_TYPE_CCUA == boardId)
{
RecvHeartDataStru.voltageA_CCA = 0U; /*24VA电源_电压*1000*/
RecvHeartDataStru.voltageB_CCA = 0U; /*24VB电源_电压*1000*/
RecvHeartDataStru.currentA_CCA = 0U; /*24VA电源_电流*1000*/
RecvHeartDataStru.currentB_CCA = 0U; /*24VV电源_电流*1000*/
RecvHeartDataStru.voltageCoup_CCA = 0U; /*24V电源_电压*1000*/
RecvHeartDataStru.currentCoup_CCA = 0U; /*24V电源_电流*1000*/
RecvHeartDataStru.temperature_CCA = 0U; /*温度值*1000*/
RecvHeartDataStru.check_EEPROM_CCA = 0U; /*EEPROM存储检验*/
RecvHeartDataStru.commStartCycle_CCA = 0U; /*通信周期*/
}
else if (BOARD_TYPE_CCUB == boardId)
{
RecvHeartDataStru.voltageA_CCB = 0U; /*24VA电源_电压*1000*/
RecvHeartDataStru.voltageB_CCB = 0U; /*24VB电源_电压*1000*/
RecvHeartDataStru.currentA_CCB = 0U; /*24VA电源_电流*1000*/
RecvHeartDataStru.currentB_CCB = 0U; /*24VV电源_电流*1000*/
RecvHeartDataStru.voltageCoup_CCB = 0U; /*24V电源_电压*1000*/
RecvHeartDataStru.currentCoup_CCB = 0U; /*24V电源_电流*1000*/
RecvHeartDataStru.temperature_CCB = 0U; /*温度值*1000*/
RecvHeartDataStru.check_EEPROM_CCB = 0U; /*EEPROM存储检验*/
RecvHeartDataStru.commStartCycle_CCB = 0U; /*通信周期*/
}
else if (BOARD_TYPE_SEBA == boardId)
{
RecvHeartDataStru.commStartCycle_SEBA = 0U; /*通信周期*/
}
else if (BOARD_TYPE_SEBB == boardId)
{
RecvHeartDataStru.commStartCycle_SEBB = 0U; /*通信周期*/
}
else
{
/*不处理*/
}
}
/*
* 功能描述: 仿真模式下,将平台心跳帧数据设为正常值
* 参数说明: 无
* 返回值
*/
void SetCCUHeartDataNormal(void)
{
RecvHeartDataStru.voltageA_CCA = 24000U; /*24VA电源_电压*1000*/
RecvHeartDataStru.voltageB_CCA = 24000U; /*24VB电源_电压*1000*/
RecvHeartDataStru.currentA_CCA = 5000U; /*24VA电源_电流*1000*/
RecvHeartDataStru.currentB_CCA = 5000U; /*24VV电源_电流*1000*/
RecvHeartDataStru.voltageCoup_CCA = 24000U; /*24V电源_电压*1000*/
RecvHeartDataStru.currentCoup_CCA = 5000U; /*24V电源_电流*1000*/
RecvHeartDataStru.temperature_CCA = 0U; /*温度值*1000*/
RecvHeartDataStru.check_EEPROM_CCA = 0U; /*EEPROM存储检验*/
RecvHeartDataStru.voltageA_CCB = 24000U; /*24VA电源_电压*1000*/
RecvHeartDataStru.voltageB_CCB = 24000U; /*24VB电源_电压*1000*/
RecvHeartDataStru.currentA_CCB = 5000U; /*24VA电源_电流*1000*/
RecvHeartDataStru.currentB_CCB = 5000U; /*24VV电源_电流*1000*/
RecvHeartDataStru.voltageCoup_CCB = 24000U; /*24V电源_电压*1000*/
RecvHeartDataStru.currentCoup_CCB = 5000U; /*24V电源_电流*1000*/
RecvHeartDataStru.temperature_CCB = 0U; /*温度值*1000*/
RecvHeartDataStru.check_EEPROM_CCB = 0U; /*EEPROM存储检验*/
RecvHeartDataStru.commState_CCA = CCU_COMMSTATUS_GOOD;
RecvHeartDataStru.commState_CCB = CCU_COMMSTATUS_GOOD;
RecvHeartDataStru.commState_SEBA = CCU_COMMSTATUS_GOOD;
RecvHeartDataStru.commState_SEBB = CCU_COMMSTATUS_GOOD;
}
/*
* 功能描述: 仿真模式下,将平台GPIOP采集数据设为正常值
* 参数说明: 无
* 返回值
*/
void SetCCUPlatGPIODataNormal(void)
{
RecvPlatDataStruGPIO.powerANodeState = NODE_STATUS_CLOSE;
RecvPlatDataStruGPIO.powerBNodeState = NODE_STATUS_CLOSE;
RecvPlatDataStruGPIO.ModepowerAState_PUA = POWER_STATUS_NORMAL;
RecvPlatDataStruGPIO.ModepowerBState_PUA = POWER_STATUS_NORMAL;
RecvPlatDataStruGPIO.ModepowerAState_PUB = POWER_STATUS_NORMAL;
RecvPlatDataStruGPIO.ModepowerBState_PUB = POWER_STATUS_NORMAL;
}
/*
* 功能描述: 获取指定采集点处电压
* 参数说明: UINT8 pointType 采集点类型
* 返回值 采集电压
*/
UINT16 GetCollectPointVoltage(UINT8 pointType)
{
UINT16 retVal = 0U;
switch (pointType)
{
case COLLECT_MODEA_CCUA:
{
retVal = RecvHeartDataStru.voltageA_CCA;
break;
}
case COLLECT_MODEA_CCUB:
{
retVal = RecvHeartDataStru.voltageA_CCB;
break;
}
case COLLECT_MODEB_CCUA:
{
retVal = RecvHeartDataStru.voltageB_CCA;
break;
}
case COLLECT_MODEB_CCUB:
{
retVal = RecvHeartDataStru.voltageB_CCB;
break;
}
case COLLECT_COUPLING_CCUA:
{
retVal = RecvHeartDataStru.voltageCoup_CCA;
break;
}
case COLLECT_COUPLING_CCUB:
{
retVal = RecvHeartDataStru.voltageCoup_CCB;
break;
}
default:
/*不可达分支*/
break;
}
return retVal;
}
/*
* 功能描述: 获取指定采集点处电流
* 参数说明: UINT8 pointType 采集点类型
* 返回值 采集电流
*/
UINT16 GetCollectPointCurrent(UINT8 pointType)
{
UINT16 retVal = 0U;
switch (pointType)
{
case COLLECT_MODEA_CCUA:
{
retVal = RecvHeartDataStru.currentA_CCA;
break;
}
case COLLECT_MODEA_CCUB:
{
retVal = RecvHeartDataStru.currentA_CCB;
break;
}
case COLLECT_MODEB_CCUA:
{
retVal = RecvHeartDataStru.currentB_CCA;
break;
}
case COLLECT_MODEB_CCUB:
{
retVal = RecvHeartDataStru.currentB_CCB;
break;
}
case COLLECT_COUPLING_CCUA:
{
retVal = RecvHeartDataStru.currentCoup_CCA;
break;
}
case COLLECT_COUPLING_CCUB:
{
retVal = RecvHeartDataStru.currentCoup_CCB;
break;
}
default:
/*不可达分支*/
break;
}
return retVal;
}
/*
* 功能描述: 获取电源插箱A的空开辅助触点状态
* 参数说明: 无
* 返回值 0x55 触电闭合
* 0xaa 触电断开
*/
UINT8 GetPowerANodeStatue(void)
{
UINT8 retVal = 0U;
if (NODE_STATUS_CLOSE == RecvPlatDataStruGPIO.powerANodeState)
{
retVal = NODE_STATUS_CLOSE;
}
else
{
retVal = NODE_STATUS_BREAK;
}
return retVal;
}
/*
* 功能描述: 获取电源插箱B的空开辅助触点状态
* 参数说明: 无
* 返回值 0x55 触电闭合
* 0xaa 触电断开
*/
UINT8 GetPowerBNodeStatue(void)
{
UINT8 retVal = 0U;
if (NODE_STATUS_CLOSE == RecvPlatDataStruGPIO.powerBNodeState)
{
retVal = NODE_STATUS_CLOSE;
}
else
{
retVal = NODE_STATUS_BREAK;
}
return retVal;
}
/*
* 功能描述: 获取通控A通信状态
* 参数说明: 无
* 返回值 0x55 通信正常
* 0xaa 通信中断
*/
UINT8 GetCCUACommStatus(void)
{
UINT8 retVal = 0U;
if (CCU_COMMSTATUS_GOOD == RecvHeartDataStru.commState_CCA)
{
retVal = CCU_COMMSTATUS_GOOD;
}
else
{
retVal = CCU_COMMSTATUS_BAD;
}
return retVal;
}
/*
* 功能描述: 获取通控B通信状态
* 参数说明: 无
* 返回值 0x55 通信正常
* 0xaa 通信中断
*/
UINT8 GetCCUBCommStatus(void)
{
UINT8 retVal = 0U;
if (CCU_COMMSTATUS_GOOD == RecvHeartDataStru.commState_CCB)
{
retVal = CCU_COMMSTATUS_GOOD;
}
else
{
retVal = CCU_COMMSTATUS_BAD;
}
return retVal;
}
/*
* 功能描述: 获取扩展板A通信状态
* 参数说明: 无
* 返回值 0x55 通信正常
* 0xaa 通信中断
*/
UINT8 GetSEBACommStatus(void)
{
UINT8 retVal = 0U;
if (CCU_COMMSTATUS_GOOD == RecvHeartDataStru.commState_SEBA)
{
retVal = CCU_COMMSTATUS_GOOD;
}
else
{
retVal = CCU_COMMSTATUS_BAD;
}
return retVal;
}
/*
* 功能描述: 获取扩展板B通信状态
* 参数说明: 无
* 返回值 0x55 通信正常
* 0xaa 通信中断
*/
UINT8 GetSEBBCommStatus(void)
{
UINT8 retVal = 0U;
if (CCU_COMMSTATUS_GOOD == RecvHeartDataStru.commState_SEBB)
{
retVal = CCU_COMMSTATUS_GOOD;
}
else
{
retVal = CCU_COMMSTATUS_BAD;
}
return retVal;
}
/*
* 功能描述: 获取指定采集点处GPIO采集的电源状态 1\2\3\4采集点
* 参数说明: UINT8 pointType 采集点类型
* 返回值 : 0x55 电源状态正常
* 0xaa 电源状态异常
*/
UINT8 GetGPIOCollectPointStatus(UINT8 pointType)
{
UINT8 powerState = 0U;
switch (pointType)
{
case COLLECT_MODEA_CCUA:
{
powerState = RecvPlatDataStruGPIO.ModepowerAState_PUA;
break;
}
case COLLECT_MODEA_CCUB:
{
powerState = RecvPlatDataStruGPIO.ModepowerAState_PUB;
break;
}
case COLLECT_MODEB_CCUA:
{
powerState = RecvPlatDataStruGPIO.ModepowerBState_PUA;
break;
}
case COLLECT_MODEB_CCUB:
{
powerState = RecvPlatDataStruGPIO.ModepowerBState_PUB;
break;
}
default:
/*不可达分支*/
break;
}
return powerState;
}
/*
* 功能描述: 检查某处采集点电压是否在额定范围
* 参数说明: UINT8 pointType 采集点类型
* 返回值 0 电压为0
* 0x55 在额定范围内
* 0xaa 超限
* 0xbb 欠压
*/
UINT8 CheckPointVoltageState(UINT8 pointType)
{
UINT8 retVal = CHECK_VOLTAGE_ZERO;
UINT16 voltage = 0U; /*采集点5处电压*/
/*获取该采集点电压*/
voltage = GetCollectPointVoltage(pointType);
if (VOLTAGE_MAX_TO_0 > voltage)
{
retVal = CHECK_VOLTAGE_ZERO;
}
else if ((RATED_VOLTAGE_MIN <= voltage) && (RATED_VOLTAGE_MAX >= voltage))
{
retVal = CHECK_VOLTAGE_NOMAL;
}
else if (RATED_VOLTAGE_MAX < voltage)
{
retVal = CHECK_VOLTAGE_OVERRUN;
}
else if (RATED_VOLTAGE_MIN > voltage)
{
retVal = CHECK_VOLTAGE_FEWER;
}
else
{
/*不可达分支,导向0电压*/
}
return retVal;
}
/*
* 功能描述: 检查联锁A系电源插箱故障状态
* 参数说明: 无
* 返回值 CI_SUCCESS 未故障
* CI_ERROR 故障
*/
UINT8 CheckRCIAPowerFaultState(void)
{
UINT8 retVal = CI_ERROR;
UINT8 cxABreakFlag = 0U; /*A系电源插箱空开断开检查*/
cxABreakFlag = GetPowerANodeStatue();
/* 1、A系电源插箱空开断开 */
if (NODE_STATUS_BREAK == cxABreakFlag)
{
/*A系电源故障状态*/
retVal = CI_ERROR;
}
else
{
retVal = CI_SUCCESS;
}
return retVal;
}
/*
* 功能描述: 检查联锁B系电源插箱故障状态
* 参数说明: 无
* 返回值 CI_SUCCESS 未故障
* CI_ERROR 故障
*/
UINT8 CheckRCIBPowerFaultState(void)
{
UINT8 retVal = CI_ERROR;
UINT8 cxBBreakFlag = 0U; /*B系电源插箱空开断开检查*/
cxBBreakFlag = GetPowerBNodeStatue();
/* 1、B系电源插箱空开断开 */
if (NODE_STATUS_BREAK == cxBBreakFlag)
{
/*B系电源故障状态*/
retVal = CI_ERROR;
}
else
{
retVal = CI_SUCCESS;
}
return retVal;
}
/*
* 功能描述: 检查联锁A系电源模块故障状态
* 参数说明: 无
* 返回值 CI_SUCCESS 未故障
* CI_ERROR 故障
*/
UINT8 CheckRCIAPowerModeFaultState(void)
{
UINT8 retVal = CI_ERROR;
UINT8 powerAPUBAState = 0U; /*PUB A采集的24VA电源状态 1*/
UINT8 powerBPUBAState = 0U; /*PUB A采集的24VB电源状态 3*/
UINT8 vol1Flag = 0U; /*CPI A采集24VA电源 1*/
UINT8 vol3Flag = 0U; /*CPI A采集24VB电源 3*/
powerAPUBAState = GetGPIOCollectPointStatus(COLLECT_MODEA_CCUA);
powerBPUBAState = GetGPIOCollectPointStatus(COLLECT_MODEB_CCUA);
vol1Flag = CheckPointVoltageState(COLLECT_MODEA_CCUA);
vol3Flag = CheckPointVoltageState(COLLECT_MODEB_CCUA);
/* 1、PUB A采集的24VA电源异常、或24VB电源异常
2、CPI A采集24VA电源、或24VB电源电压为0V */
if (((CHECK_VOLTAGE_ZERO == vol1Flag) || (CHECK_VOLTAGE_ZERO == vol3Flag))
&& ((POWER_STATUS_ABNORMAL == powerAPUBAState) || (POWER_STATUS_ABNORMAL == powerBPUBAState)))
{
retVal = CI_ERROR;
}
else
{
retVal = CI_SUCCESS;
}
return retVal;
}
/*
* 功能描述: 检查联锁B系电源模块故障状态
* 参数说明: 无
* 返回值 CI_SUCCESS 未故障
* CI_ERROR 故障
*/
UINT8 CheckRCIBPowerModeFaultState(void)
{
UINT8 retVal = CI_ERROR;
UINT8 powerAPUBBState = 0U; /*PUB A采集的24VA电源状态 2*/
UINT8 powerBPUBBState = 0U; /*PUB A采集的24VB电源状态 4*/
UINT8 vol2Flag = 0U; /*CPI B采集24VA电源 2*/
UINT8 vol4Flag = 0U; /*CPI B采集24VB电源 4*/
powerAPUBBState = GetGPIOCollectPointStatus(COLLECT_MODEA_CCUB);
powerBPUBBState = GetGPIOCollectPointStatus(COLLECT_MODEB_CCUB);
vol2Flag = CheckPointVoltageState(COLLECT_MODEA_CCUB);
vol4Flag = CheckPointVoltageState(COLLECT_MODEB_CCUB);
/* 1、PUB B采集的24VA电源异常、或24VB电源异常
2、CPI B采集24VA电源、或24VB电源电压为0V */
/*暂未实现PUB采集,只判断电源电压*/
if (((CHECK_VOLTAGE_ZERO == vol2Flag) || (CHECK_VOLTAGE_ZERO == vol4Flag))
&& ((POWER_STATUS_ABNORMAL == powerAPUBBState) || (POWER_STATUS_ABNORMAL == powerBPUBBState)))
{
retVal = CI_ERROR;
}
else
{
retVal = CI_SUCCESS;
}
return retVal;
}
/*
* 功能描述: 检查联锁通信设备(通控)状态
* 参数说明: 无
* 返回值 CI_SUCCESS 通信正常
* CI_ERROR 通信中断
*/
UINT8 CheckRCICommCCUDeviceStatue(void)
{
UINT8 retVal = CI_ERROR;
UINT8 commCCA = 0U; /*通控板A通信状态*/
UINT8 commCCB = 0U; /*通控板B通信状态*/
UINT8 commSEBA = 0U; /*扩展板A通信状态*/
UINT8 commSEBB = 0U; /*扩展板B通信状态*/
commCCA = GetCCUACommStatus();
commCCB = GetCCUBCommStatus();
commSEBA = GetSEBACommStatus();
commSEBB = GetSEBBCommStatus();
if ((CCU_COMMSTATUS_GOOD == commCCA) && (CCU_COMMSTATUS_GOOD == commCCB) && (CCU_COMMSTATUS_GOOD == commSEBA) && (CCU_COMMSTATUS_GOOD == commSEBB))
{
retVal = CI_SUCCESS;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* 功能描述:设置与指定通信板的通信状态
* 参数说明:UINT8 boardId 通信板卡ID
* UINT8 commState 通信状态
* 返回值
* BY LC
*/
void SetRCIandCCBoardCommStatus(UINT8 boardId, UINT8 commState)
{
if ((CCU_COMMSTATUS_BAD == commState) || (CCU_COMMSTATUS_GOOD == commState))
{
if (BOARD_TYPE_CCUA == boardId)
{
RecvHeartDataStru.commState_CCA = commState;
}
else if (BOARD_TYPE_CCUB == boardId)
{
RecvHeartDataStru.commState_CCB = commState;
}
else if (BOARD_TYPE_SEBA == boardId)
{
RecvHeartDataStru.commState_SEBA = commState;
}
else if (BOARD_TYPE_SEBB == boardId)
{
RecvHeartDataStru.commState_SEBB = commState;
}
else
{
/*不执行*/
}
}
}
/*
* 功能描述:获取与指定通信板的通信状态
* 参数说明:UINT8 boardId 通信板卡ID
* 返回值 UINT8 commState 通信状态
* BY LC
*/
UINT8 GetRCIandCCBoardCommStatus(UINT8 boardId)
{
UINT8 retVal = CCU_COMMSTATUS_BAD;
if (BOARD_TYPE_CCUA == boardId)
{
retVal = RecvHeartDataStru.commState_CCA;
}
else if (BOARD_TYPE_CCUB == boardId)
{
retVal = RecvHeartDataStru.commState_CCB;
}
else
{
/*不执行*/
}
return retVal;
}
/*
* 功能描述:获取与指定通信板的通信开始周期数
* 参数说明:UINT8 boardId 通信板卡ID
* 返回值 UINT8 commState 通信状态
* BY LC
*/
UINT32 GetRCIandCCBoardCommCyCNum(UINT8 boardId)
{
UINT32 retVal = 0U;
if (BOARD_TYPE_CCUA == boardId)
{
retVal = RecvHeartDataStru.commStartCycle_CCA;
}
else if (BOARD_TYPE_CCUB == boardId)
{
retVal = RecvHeartDataStru.commStartCycle_CCB;
}
else if (BOARD_TYPE_SEBA == boardId)
{
retVal = RecvHeartDataStru.commStartCycle_SEBA;
}
else if (BOARD_TYPE_SEBB == boardId)
{
retVal = RecvHeartDataStru.commStartCycle_SEBB;
}
else
{
/*不执行*/
}
return retVal;
}
@@ -0,0 +1,280 @@
/********************************************************
*
* 文 件 名: 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"
#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的阈值*/
/*平台心跳帧信息结构*/
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;
/*
* 功能描述: 清空指定通控板卡发送的心跳数据
* 参数说明: 板卡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
@@ -0,0 +1,81 @@
/************************************************************************
*
* 文件名 DebugPrint.c
* 版权说明 : 北京交控科技有限公司
* 版本号 1.0
* 创建时间 2020.02.05
* 作者 : 研发中心软件部
* 功能描述 调试打印接口
* 使用注意
* 修改记录
*
************************************************************************/
#include "DebugPrint.h"
#include "Convert.h"
static UINT8 printImmediatelyFlag = 1u;
/*********************************************
*函数功能:打印应用的调试错误帧信息
*参数说明:
* UINT32 errorCode:错误码
* UINT8 devType:设备类型
* UINT16 devId:设备id
* UINT8 isCycle:是否周期调用
*返回值:无
*********************************************/
void DebugPrintAppError(UINT32 errorCode,UINT32 devType,UINT32 devId,UINT8 isCycleCall)
{
DebugPrintError(CI_APP,errorCode,devType,devId,isCycleCall);
}
/*********************************************
*函数功能:打印调试信息
*参数说明:
* UINT8 errorSrc:错误来源
* UINT32 errorCode:错误码
* UINT8 devType:设备类型
* UINT16 devId:设备id
*返回值:无
*********************************************/
void DebugPrintError(UINT8 errorSrc,UINT32 errorCode,UINT32 devType,UINT32 devId,UINT8 isCycleCall)
{
char tmpInfoError[15]={0};
UINT16 ii = 0u;
UINT32 curCount = Get2oo2CurCycleNum();
tmpInfoError[0] = (char)0xabU;
tmpInfoError[1] = (char)0xcdU; /*帧起始:0xabcd*/
tmpInfoError[2] = (char)errorSrc; /*错误来源*/
LongToChar(errorCode,&tmpInfoError[3]);/*错误码*/
LongToChar(devType,&tmpInfoError[7]); /*设备类型*/
LongToChar(devId,&tmpInfoError[11]); /*设备Id*/
if (PRINT_CYCLE == isCycleCall)
{
if (curCount % 20U == 0u)/*周期调用,则6秒钟打印一次*/
{
(void)debug_out_array(0xAA, tmpInfoError, 15);
}
else
{
if (1u == printImmediatelyFlag)
{
(void)debug_out_array(0xAA, tmpInfoError, 15);/*确保第一次打印时为非打印周期,也要打印一次*/
}
if (1u ==printImmediatelyFlag)
{
printImmediatelyFlag = 0u;
}
}
}
else
{
(void)debug_out_array(0xAA, tmpInfoError, 15);
}
}
@@ -0,0 +1,55 @@
#ifndef DUBUG_PRINT
#define DUBUG_PRINT
#include "commontypes.h"
#include "../2oo2/2oo2InterfaceDataManage.h"
#define CI_APP ((UINT8)1) /*应用*/
#define CI_PU ((UINT8)2) /*平台*/
#define CI_CC ((UINT8)3) /*通控*/
#define PRINT_CYCLE ((UINT8)1)
#define PRINT_ONCE ((UINT8)0)
/*********************************************
*函数功能:打印应用的调试错误帧信息
*参数说明:
* UINT32 errorCode:错误码
* UINT8 devType:设备类型
* UINT16 devId:设备id
* UINT8 isCycleCall:是否周期打印
*返回值:0,失败;1,成功
*********************************************/
void DebugPrintAppError(UINT32 errorCode,UINT32 devType,UINT32 devId,UINT8 isCycleCall);
/*********************************************
*函数功能:打印调试信息
*参数说明:
* UINT8 errorSrc:错误来源
* UINT32 errorCode:错误码
* UINT8 devType:设备类型
* UINT16 devId:设备id
* UINT8 isCycle:是否周期打印
*返回值:0,失败;1,成功
*********************************************/
void DebugPrintError(UINT8 errorSrc,UINT32 errorCode,UINT32 devType,UINT32 devId,UINT8 isCycleCall);
#endif
@@ -0,0 +1,13 @@
#ifndef DEBUG_PRINT_INTERFACE_H
#define DEBUG_PRINT_INTERFACE_H
#include "DebugPrint.h"
#include "ErrorCode.h"
#include "ErrorDeviceType.h"
#endif
+45
View File
@@ -0,0 +1,45 @@
#ifndef DUBUG_ERROR_CODE
#define DUBUG_ERROR_CODE
#define ERROR_fs_columns_len_not_equal_to_ci_software ((UINT32)0x00000001) /*FS列长度与CI软件中定义的不一致*/
#define ERROR_INDEX_EXCEED ((UINT32)0x00000002) /*数组索引超出*/
#define ERROR_RTNROUTE_RTNSIG_NOCONFIG ((UINT32)0x00000003) /*折返进路折返信号机没有配置*/
#define ERROR_RTNROUTE_RTNSIG_INVALID ((UINT32)0x00000004) /*折返进路折返信号机组ID无效*/
#define ERROR_SIGNAL_LXJ_NOT_CONFIG ((UINT32)0x00000005) /*信号机列车信号继电器没有配置*/
#define ERROR_SIGNAL_YDJ_NOT_CONFIG ((UINT32)0x00000006) /*信号机引导信号继电器没有配置*/
#define ERROR_SIGNAL_1DJ_NOT_CONFIG ((UINT32)0x00000007) /*信号机1灯丝继电器没有配置*/
#define ERROR_SIGNAL_2DJ_NOT_CONFIG ((UINT32)0x00000008) /*信号机2灯丝继电器没有配置*/
#define ERROR_SIGNAL_ZXJ_NOT_CONFIG ((UINT32)0x00000009) /*信号机主信号继电器没有配置*/
#define ERROR_SIGNAL_DXJ_NOT_CONFIG ((UINT32)0x0000000a) /*信号机调车信号继电器没有配置*/
#define ERROR_SIGNAL_DDJ_NOT_CONFIG ((UINT32)0x0000000b) /*信号机点灯继电器没有配置*/
#define ERROR_SIGNAL_GREENJ_NOT_CONFIG ((UINT32)0x0000000C) /*信号机绿灯继电器没有配置*/
#define ERROR_SIGNAL_YELLOWJ_NOT_CONFIG ((UINT32)0x0000000D) /*信号机黄灯继电器没有配置*/
#define ERROR_SIGNAL_BLUEJ_NOT_CONFIG ((UINT32)0x0000000E) /*信号机蓝灯继电器没有配置*/
#define ERROR_SIGNAL_YXJ_NOT_DOUBLE_COLL ((UINT32)0x0000000f) /*信号机引导信号继电器不为双节点采集*/
#define ERROR_SIGNAL_DXJ_NOT_DOUBLE_COLL ((UINT32)0x00000010) /*信号机调车信号继电器不为双节点采集*/
#define ERROR_SIGNAL_YELLOWJ_NOT_DOUBLE_COLL ((UINT32)0x00000011) /*信号机黄灯灯丝继电器不为双节点采集*/
#define ERROR_SIGNAL_GREENJ_NOT_DOUBLE_COLL ((UINT32)0x00000012) /*信号机绿灯灯丝继电器不为双节点采集*/
#define ERROR_SWITCH_DBJ_NOT_CONFIG ((UINT32)0x00000013) /*道岔定表继电器没有配置*/
#define ERROR_SWITCH_FBJ_NOT_CONFIG ((UINT32)0x00000014) /*道岔反表继电器没有配置*/
#define ERROR_SWITCH_YCJ_NOT_CONFIG ((UINT32)0x00000015) /*道岔允操继电器没有配置*/
#define ERROR_SWITCH_DCJ_NOT_CONFIG ((UINT32)0x00000016) /*道岔定操继电器没有配置*/
#define ERROR_SWITCH_FCJ_NOT_CONFIG ((UINT32)0x00000017) /*道岔反操继电器没有配置*/
#define ERROR_SPKS_COLLJ_NOT_CONFIG ((UINT32)0x00000018) /*SPKS采集继电器没有配置*/
#define ERROR_SPKS_COLLJ_NOT_DOUBLE_COLL ((UINT32)0x00000019) /*SPKS采集继电器不为双节点采集*/
#define ERROR_PHYSEC_GJ_NOT_CONFIG ((UINT32)0x0000001A) /*物理区段轨道继电器没有配置*/
#define ERROR_PHYSEC_GJ_NOT_DOUBLE_COLL ((UINT32)0x0000001B) /*物理区段轨道继电器不为双节点采集*/
#define ERROR_ROUTE_OVERLAP_CIZCMASK_NOT_CONFIG ((UINT32)0x0000001C) /*进路的保护区段在CI-ZC保护区段码位表中没有配置*/
#define ERROR_ONEROUTE_OVERLAP_CIZCMASK_NOT_SAME ((UINT32)0x0000001D) /*同一条进路的两个保护区段的CI-ZC保护区段码位不一样*/
#endif
@@ -0,0 +1,17 @@
#ifndef ERROR_DEVICE_TYPE
#define ERROR_DEVICE_TYPE
/*
*
* 注意:可复用CiSystemDefine.h中的设备类型
* 这里,从0x0100开始;
*
*/
#define CI_DEVICE_TYPE_FS_TABLE ((UINT32)0x00000100)/*fs表格*/
#endif
+959
View File
@@ -0,0 +1,959 @@
#include "Deployment.h"
#include <stdarg.h>
const static UINT32 gCrcTable[256] =
{
0x00000000U,0x04c11db7U,0x09823b6eU,0x0d4326d9U,0x130476dcU,0x17c56b6bU,
0x1a864db2U,0x1e475005U,0x2608edb8U,0x22c9f00fU,0x2f8ad6d6U,0x2b4bcb61U,
0x350c9b64U,0x31cd86d3U,0x3c8ea00aU,0x384fbdbdU,0x4c11db70U,0x48d0c6c7U,
0x4593e01eU,0x4152fda9U,0x5f15adacU,0x5bd4b01bU,0x569796c2U,0x52568b75U,
0x6a1936c8U,0x6ed82b7fU,0x639b0da6U,0x675a1011U,0x791d4014U,0x7ddc5da3U,
0x709f7b7aU,0x745e66cdU,0x9823b6e0U,0x9ce2ab57U,0x91a18d8eU,0x95609039U,
0x8b27c03cU,0x8fe6dd8bU,0x82a5fb52U,0x8664e6e5U,0xbe2b5b58U,0xbaea46efU,
0xb7a96036U,0xb3687d81U,0xad2f2d84U,0xa9ee3033U,0xa4ad16eaU,0xa06c0b5dU,
0xd4326d90U,0xd0f37027U,0xddb056feU,0xd9714b49U,0xc7361b4cU,0xc3f706fbU,
0xceb42022U,0xca753d95U,0xf23a8028U,0xf6fb9d9fU,0xfbb8bb46U,0xff79a6f1U,
0xe13ef6f4U,0xe5ffeb43U,0xe8bccd9aU,0xec7dd02dU,0x34867077U,0x30476dc0U,
0x3d044b19U,0x39c556aeU,0x278206abU,0x23431b1cU,0x2e003dc5U,0x2ac12072U,
0x128e9dcfU,0x164f8078U,0x1b0ca6a1U,0x1fcdbb16U,0x018aeb13U,0x054bf6a4U,
0x0808d07dU,0x0cc9cdcaU,0x7897ab07U,0x7c56b6b0U,0x71159069U,0x75d48ddeU,
0x6b93dddbU,0x6f52c06cU,0x6211e6b5U,0x66d0fb02U,0x5e9f46bfU,0x5a5e5b08U,
0x571d7dd1U,0x53dc6066U,0x4d9b3063U,0x495a2dd4U,0x44190b0dU,0x40d816baU,
0xaca5c697U,0xa864db20U,0xa527fdf9U,0xa1e6e04eU,0xbfa1b04bU,0xbb60adfcU,
0xb6238b25U,0xb2e29692U,0x8aad2b2fU,0x8e6c3698U,0x832f1041U,0x87ee0df6U,
0x99a95df3U,0x9d684044U,0x902b669dU,0x94ea7b2aU,0xe0b41de7U,0xe4750050U,
0xe9362689U,0xedf73b3eU,0xf3b06b3bU,0xf771768cU,0xfa325055U,0xfef34de2U,
0xc6bcf05fU,0xc27dede8U,0xcf3ecb31U,0xcbffd686U,0xd5b88683U,0xd1799b34U,
0xdc3abdedU,0xd8fba05aU,0x690ce0eeU,0x6dcdfd59U,0x608edb80U,0x644fc637U,
0x7a089632U,0x7ec98b85U,0x738aad5cU,0x774bb0ebU,0x4f040d56U,0x4bc510e1U,
0x46863638U,0x42472b8fU,0x5c007b8aU,0x58c1663dU,0x558240e4U,0x51435d53U,
0x251d3b9eU,0x21dc2629U,0x2c9f00f0U,0x285e1d47U,0x36194d42U,0x32d850f5U,
0x3f9b762cU,0x3b5a6b9bU,0x0315d626U,0x07d4cb91U,0x0a97ed48U,0x0e56f0ffU,
0x1011a0faU,0x14d0bd4dU,0x19939b94U,0x1d528623U,0xf12f560eU,0xf5ee4bb9U,
0xf8ad6d60U,0xfc6c70d7U,0xe22b20d2U,0xe6ea3d65U,0xeba91bbcU,0xef68060bU,
0xd727bbb6U,0xd3e6a601U,0xdea580d8U,0xda649d6fU,0xc423cd6aU,0xc0e2d0ddU,
0xcda1f604U,0xc960ebb3U,0xbd3e8d7eU,0xb9ff90c9U,0xb4bcb610U,0xb07daba7U,
0xae3afba2U,0xaafbe615U,0xa7b8c0ccU,0xa379dd7bU,0x9b3660c6U,0x9ff77d71U,
0x92b45ba8U,0x9675461fU,0x8832161aU,0x8cf30badU,0x81b02d74U,0x857130c3U,
0x5d8a9099U,0x594b8d2eU,0x5408abf7U,0x50c9b640U,0x4e8ee645U,0x4a4ffbf2U,
0x470cdd2bU,0x43cdc09cU,0x7b827d21U,0x7f436096U,0x7200464fU,0x76c15bf8U,
0x68860bfdU,0x6c47164aU,0x61043093U,0x65c52d24U,0x119b4be9U,0x155a565eU,
0x18197087U,0x1cd86d30U,0x029f3d35U,0x065e2082U,0x0b1d065bU,0x0fdc1becU,
0x3793a651U,0x3352bbe6U,0x3e119d3fU,0x3ad08088U,0x2497d08dU,0x2056cd3aU,
0x2d15ebe3U,0x29d4f654U,0xc5a92679U,0xc1683bceU,0xcc2b1d17U,0xc8ea00a0U,
0xd6ad50a5U,0xd26c4d12U,0xdf2f6bcbU,0xdbee767cU,0xe3a1cbc1U,0xe760d676U,
0xea23f0afU,0xeee2ed18U,0xf0a5bd1dU,0xf464a0aaU,0xf9278673U,0xfde69bc4U,
0x89b8fd09U,0x8d79e0beU,0x803ac667U,0x84fbdbd0U,0x9abc8bd5U,0x9e7d9662U,
0x933eb0bbU,0x97ffad0cU,0xafb010b1U,0xab710d06U,0xa6322bdfU,0xa2f33668U,
0xbcb4666dU,0xb8757bdaU,0xb5365d03U,0xb1f740b4U
};
/** 静态全局变量--需跟随 */
static EXIT_OP_STRUCT gExitOpInfo = {0u};
/** 静态全局变量--无需跟随 */
static EXIT_OP_FIRST_REQ_STRUCT gFirstFReqInfo = {0u};
static EXIT_OP_SEC_REQ_STRUCT gSecondReqInfo = {0u};
static void ParseExitOpFirstRequst(const UINT8* dataBuf, UINT32 startIndex); /* 解析首次退出运营请求 */
static void ParseExitOpSecondRequst(const UINT8* dataBuf, UINT32 startIndex); /* 解析再次退出运营请求 */
static UINT16 PackExitOpFirstReply(UINT8* dataBuf,UINT16 maxLen); /** 组包首次退出运营确认 */
static UINT16 PackExitOpSecondReply(UINT8* dataBuf,UINT16 maxLen); /** 组包再次退出运营确认 */
static void ResetInitParam(void); /** 重置参数*/
static UINT32 CRC32_AIM(UINT8 *pData, UINT16 wDataLen); /** AIM 使用的CRC32计算函数 */
static void AIMPrinf(UINT8 Level,const char* lpszFormat, ...); /* 调试打印 */
static UINT8 Deploy_FirstReqHandle(void); /*首次退出运营处理*/
static UINT8 Deploy_SecondReqHandle(void); /*再次退出运营处理*/
static UINT8 Deploy_CheckBoardID(UINT8 boardID_in);/*输入板卡ID与本地板卡ID一致x性检查*/
/**
* @brief AIM 使用的CRC32计算函数
* @param[in] const UINT8* dataBuf,输入报文起始地址
* @param[in] UINT16 wDataLen,长度
* @param[out] 无
* @return UINT32 CRC值
* @note 无
*/
static UINT32 CRC32_AIM(UINT8 *pData, UINT16 wDataLen)
{
UINT32 dwCrc = 0;
UINT16 wCycle = 0;
/*循环计算CRC32*/
for(wCycle = (UINT8)0; wCycle < wDataLen; wCycle++)
{
dwCrc = (dwCrc << 8) ^ gCrcTable[ (dwCrc >> 24) ^ pData[wCycle] ] ;
}
/*返回计算结果*/
return dwCrc;
}
/**
* @brief 调试打印函数
* @param[in] const UINT8* dataBuf,输入报文起始地址
* @param[in] UINT16 wDataLen,长度
* @param[out] 无
* @return UINT32 CRC值
* @note 无
*/
static void AIMPrinf(UINT8 Level, const char* lpszFormat, ...)
{
va_list para;
static CHAR tmpPrintBuf[65535u] = { '\0' };
(void)CommonMemSet(tmpPrintBuf, 65535u, 0u, 65535u);
if ((Level < AIM_LOG_LEVEL) && (NULL != gExitOpInfo.pfun))
{
va_start(para, lpszFormat);
(void)vsnprintf(tmpPrintBuf, 65535u, lpszFormat, para);
va_end(para);
gExitOpInfo.pfun("%s", tmpPrintBuf);
}
}
/**
* @brief 解析首次退出运营请求
* @param[in] const UINT8* dataBuf,输入报文起始地址
* @param[in] UINT32 startIndex,解析起始地址
* @param[out] 无
* @return 无
* @note 无
*/
static void ParseExitOpFirstRequst(const UINT8* dataBuf, UINT32 startIndex)
{
UINT32 errorcode = 0u;
UINT32 msgstartIndex = startIndex;
UINT32 exitOpCmdIndex = 0u;
UINT32 index = startIndex;
UINT32 tempCrc32 = 0u;
UINT8 checkBoardid = 0u;
if (NULL == dataBuf)
{
errorcode += 0x80000000u;
}
else
{
/** 帧类型 */
index += 1u;
exitOpCmdIndex = index; /* 设置命令信息起始地址 */
/** 板卡类型 */
gFirstFReqInfo.boardType = dataBuf[index];
index += 1u;
/** 板卡ID */
gFirstFReqInfo.chanelID = dataBuf[index];
index += 1u;
/** 时间戳 */
gFirstFReqInfo.firstRequstTime = LongFromChar(&dataBuf[index]);
index += 4u;
/** 退出运营命令 */
gFirstFReqInfo.exitOpCmd = dataBuf[index];
index += 1u;
checkBoardid = Deploy_CheckBoardID(gFirstFReqInfo.chanelID);
if ((0x01u != gFirstFReqInfo.boardType) || (0x55U != checkBoardid))
{
errorcode += 0x01000000u;
}
else
{
if (0xaau == gFirstFReqInfo.exitOpCmd)
{
/** 退出运营命令CRC */
gFirstFReqInfo.exitOpCmdCrc = LongFromChar(&dataBuf[index]);
index += 4u;
/** 计算退出运营命令CRC */
tempCrc32 = CRC32_AIM(&dataBuf[exitOpCmdIndex], (UINT16)(index - 4u - exitOpCmdIndex));
if (tempCrc32 == gFirstFReqInfo.exitOpCmdCrc)
{
/** 不处理*/
}
else
{
gExitOpInfo.opReason = FORBID_EXIT_OP_REASON_1;
AIMPrinf(AIM_LOG_FATAL, "opFirstCRC error: recv:%x, calc:%x,\n", gFirstFReqInfo.exitOpCmdCrc, tempCrc32);
}
/** 信息帧CRC */
gFirstFReqInfo.msgCrc = LongFromChar(&dataBuf[index]);
index += 4u;
/** 计算信息帧CRC */
tempCrc32 = CRC32_AIM(&dataBuf[msgstartIndex], (UINT16)(index - 4u - msgstartIndex));
if (tempCrc32 == gFirstFReqInfo.msgCrc)
{
/** 不处理*/
}
else
{
gExitOpInfo.opReason = FORBID_EXIT_OP_REASON_1;
AIMPrinf(AIM_LOG_FATAL, "msgFirstCRC error: recv:%x, calc:%x.\n", gFirstFReqInfo.msgCrc, tempCrc32);
}
gFirstFReqInfo.refreshFlag = MSG_REFRESH;
}
else
{
errorcode += 0x40000000u;
}
}
}
if (0u == errorcode)
{
/** 处理正确,无需处理,此处需要调用打印打印错误*/
}
else
{
(void)CommonMemSet(&gFirstFReqInfo, (UINT32)sizeof(EXIT_OP_FIRST_REQ_STRUCT),0u, (UINT32)sizeof(EXIT_OP_FIRST_REQ_STRUCT));
}
}
/**
* @brief 解析再次退出运营请求
* @param[in] const UINT8* dataBuf,输入报文起始地址
* @param[in] UINT32 startIndex,解析起始地址
* @param[out] 无
* @return 无
* @note 无
*/
static void ParseExitOpSecondRequst(const UINT8* dataBuf, UINT32 startIndex)
{
UINT32 errorcode = 0u;
UINT32 msgstartIndex = startIndex;
UINT32 exitOpCmdIndex = 0u;
UINT32 index = startIndex;
UINT32 tempCrc32 = 0u;
UINT8 checkBoardid = 0u;
if (NULL == dataBuf)
{
errorcode += 0x80000000u;
}
else
{
/** 帧类型 */
index += 1u;
exitOpCmdIndex = index; /* 设置命令信息起始地址 */
/** 板卡类型 */
gSecondReqInfo.boardType = dataBuf[index];
index += 1u;
/** 板卡ID */
gSecondReqInfo.chanelID = dataBuf[index];
index += 1u;
/** 时间戳 */
gSecondReqInfo.secondRequstTime = LongFromChar(&dataBuf[index]);
index += 4u;
/** 首次确认信息中的时间戳 */
gSecondReqInfo.firstReplyTime = LongFromChar(&dataBuf[index]);
index += 4u;
/** 退出运营命令 */
gSecondReqInfo.exitOpCmd = dataBuf[index];
index += 1u;
checkBoardid = Deploy_CheckBoardID(gSecondReqInfo.chanelID);
if ((0x01u != gSecondReqInfo.boardType) || (0x55U != checkBoardid))
{
errorcode += 0x01000000u;
}
else
{
if (0xaau == gSecondReqInfo.exitOpCmd)
{
/** 退出运营命令CRC */
gSecondReqInfo.exitOpCmdCrc = LongFromChar(&dataBuf[index]);
index += 4u;
/** 计算退出运营命令CRC */
tempCrc32 = CRC32_AIM(&dataBuf[exitOpCmdIndex], (UINT16)(index - 4u - exitOpCmdIndex));
if (tempCrc32 == gSecondReqInfo.exitOpCmdCrc)
{
/** 不处理*/
}
else
{
gExitOpInfo.opReason = FORBID_EXIT_OP_REASON_1;
AIMPrinf(AIM_LOG_FATAL, "opSecCRC error: recv:%x, calc:%x,\n", gSecondReqInfo.exitOpCmdCrc, tempCrc32);
}
/** 信息帧CRC */
gSecondReqInfo.msgCrc = LongFromChar(&dataBuf[index]);
index += 4u;
/** 计算信息帧CRC */
tempCrc32 = CRC32_AIM(&dataBuf[msgstartIndex], (UINT16)(index - 4u - msgstartIndex));
if (tempCrc32 == gSecondReqInfo.msgCrc)
{
/** 不处理 */
}
else
{
gExitOpInfo.opReason = FORBID_EXIT_OP_REASON_1;
AIMPrinf(AIM_LOG_FATAL, "msgSecCRC error: recv:%x, calc:%x.\n", gSecondReqInfo.msgCrc, tempCrc32);
}
gSecondReqInfo.refreshFlag = MSG_REFRESH;
}
else
{
errorcode += 0x40000000u;
}
}
}
if (0u == errorcode)
{
/** 处理正确,无需处理,此处需要调用打印打印错误*/
}
else
{
(void)CommonMemSet(&gFirstFReqInfo, (UINT32)sizeof(EXIT_OP_FIRST_REQ_STRUCT),0u, (UINT32)sizeof(EXIT_OP_FIRST_REQ_STRUCT));
(void)CommonMemSet(&gSecondReqInfo, (UINT32)sizeof(EXIT_OP_SEC_REQ_STRUCT), 0u, (UINT32)sizeof(EXIT_OP_SEC_REQ_STRUCT));
}
}
/**
* @brief 组包发送首次退出运营确认
* @param[in] UINT8* dataBuf, 发送报文起始地址
* @param[in] UINT16 maxLen, 发送报文最大长度
* @param[out] 无
* @return 0 处理失败;非0 成功
* @note 无
*/
static UINT16 PackExitOpFirstReply(UINT8* dataBuf,UINT16 maxLen)
{
UINT16 ret = 0u;
UINT8 tmpBuff[500u] = {0u}; /** 事先保证此缓存空间足够*/
UINT16 index = 0u;
UINT32 tempCrc32 = 0u;
if (NULL == dataBuf)
{
/** 入口参数错误 */
}
else
{
/** 预留两字节长度 */
index += 2u;
/** 帧类型 */
tmpBuff[index] = EXIT_OP_FIRST_REPLY;
index += 1u;
/** 板卡类型 */
tmpBuff[index] = gExitOpInfo.boardType;
index += 1u;
/** 板卡id */
tmpBuff[index] = gExitOpInfo.chanelID;
index += 1u;
/** 时间戳 */
(void)LongToChar(gExitOpInfo.ReplytTime,&tmpBuff[index]);
index += 4u;
/** 首次请求信息中的时间戳 */
(void)LongToChar(gExitOpInfo.recvLastRequestTimestamp,&tmpBuff[index]);
index += 4u;
/** 授权状态 */
tmpBuff[index] = gExitOpInfo.opStatus;
index += 1u;
/** 授权失败原因 */
tmpBuff[index] = gExitOpInfo.opReason;
index += 1u;
/** 退出运营命令确认CRC */
tempCrc32 = CRC32_AIM(&tmpBuff[3u], index - 3u);
(void)LongToChar(tempCrc32,&tmpBuff[index]);
index += 4u;
/** 信息帧CRC */
tempCrc32 = CRC32_AIM(&tmpBuff[2u], index - 2u);
(void)LongToChar(tempCrc32,&tmpBuff[index]);
index += 4u;
/** 填写信息长度 */
(void)ShortToChar(index - 2u,&tmpBuff[0u]);
if (index <= maxLen)
{
ret = index;
(void)CommonMemCpy(dataBuf,maxLen,tmpBuff,index);
}
else
{
/** 不处理 */
}
}
return ret;
}
/**
* @brief 组包发送再次退出运营确认
* @param[in] UINT8* dataBuf, 发送报文起始地址
* @param[in] UINT16 maxLen, 发送报文最大长度
* @param[out] 无
* @return 0 处理失败;非0 成功
* @note 无
*/
static UINT16 PackExitOpSecondReply(UINT8* dataBuf,UINT16 maxLen)
{
UINT16 ret = 0u;
UINT8 tmpBuff[500u] = {0u}; /** 事先保证此缓存空间足够*/
UINT16 index = 0u;
UINT32 tempCrc32 = 0u;
if (NULL == dataBuf)
{
/** 入口参数错误 */
}
else
{
/** 预留两字节长度 */
index += 2u;
/** 帧类型 */
tmpBuff[index] = EXIT_OP_SECOND_REPLY;
index += 1u;
/** 板卡类型 */
tmpBuff[index] = gExitOpInfo.boardType;
index += 1u;
/** 板卡id */
tmpBuff[index] = gExitOpInfo.chanelID;
index += 1u;
/** 时间戳 */
(void)LongToChar(gExitOpInfo.ReplytTime,&tmpBuff[index]);
index += 4u;
/** 再次请求信息中的时间戳 */
(void)LongToChar(gExitOpInfo.recvLastRequestTimestamp,&tmpBuff[index]);
index += 4u;
/** 授权状态 */
tmpBuff[index] = gExitOpInfo.opStatus;
index += 1u;
/** 授权失败原因 */
tmpBuff[index] = gExitOpInfo.opReason;
index += 1u;
/** 退出运营命令确认CRC */
tempCrc32 = CRC32_AIM(&tmpBuff[3u], index - 3u);
(void)LongToChar(tempCrc32,&tmpBuff[index]);
index += 4u;
/** 信息帧CRC */
tempCrc32 = CRC32_AIM(&tmpBuff[2u], index - 2u);
(void)LongToChar(tempCrc32,&tmpBuff[index]);
index += 4u;
/** 填写信息长度 */
(void)ShortToChar(index - 2u,&tmpBuff[0u]);
if (index <= maxLen)
{
ret = index;
(void)CommonMemCpy(dataBuf,maxLen,tmpBuff,index);
}
else
{
/** 不处理 */
}
}
return ret;
}
/**
* @brief 重置参数
* @param[in] 无
* @param[out] 无
* @return 无
* @note 无
*/
static void ResetInitParam(void)
{
gExitOpInfo.inputMsgType = EXIT_OP_DEFAULT;
gExitOpInfo.outputMsgType = EXIT_OP_DEFAULT;
gExitOpInfo.boardType = 0u;
gExitOpInfo.chanelID = 0u;
gExitOpInfo.recvLastRequestTimestamp = 0u;
gExitOpInfo.ReplytTime = 0u;
gExitOpInfo.curTimeout = 0u;
gExitOpInfo.opStatus = FORBID_EXIT_OP_STATUS;
gExitOpInfo.opReason = FORBID_EXIT_OP_REASON_0;
}
/** =============================================接口相关处理=============================== */
/**
* @brief 退出运营模块初始化
* @param[in] UINT16 cycleTime 当前子系统运行周期
* @param[in] const p_DPrintf pfun 打印接口
* @param[out]
* @return
* @note
*/
extern void Deploy_Init(UINT16 cycleTime,const p_DPrintf pfun)
{
/*退出运营处理*/
gExitOpInfo.inputMsgType = EXIT_OP_DEFAULT;
gExitOpInfo.outputMsgType = EXIT_OP_DEFAULT;
gExitOpInfo.boardType = 0u;
gExitOpInfo.chanelID = 0u;
gExitOpInfo.recvLastRequestTimestamp = 0u;
gExitOpInfo.ReplytTime = 0u;
if (0u != cycleTime)
{
gExitOpInfo.maxTimeout = (UINT16)(EXIT_OP_TIMEOUT / cycleTime);
}
else
{
gExitOpInfo.maxTimeout = 0u;
}
gExitOpInfo.curTimeout = 0u;
gExitOpInfo.innerTime = 0u;
gExitOpInfo.exitOperateStatus = STAY_OP_STATUS;
gExitOpInfo.opStatus = FORBID_EXIT_OP_STATUS;
gExitOpInfo.opReason = FORBID_EXIT_OP_REASON_0;
/*打印先删除*/
if (NULL == pfun)
{
gExitOpInfo.pfun = NULL;
}
else
{
gExitOpInfo.pfun = pfun;
}
}
/**
* @brief 输入解包处理
* @param[in] const UINT8* dataBuf,输入报文起始地址
* @param[in] UINT16 dataLength,输入报文长度
* @param[in] UINT8 srcType,类型
* @param[in] UINT8 srcId,ID
* @param[out] 无
* @return 0,解析失败
1,解析成功
* @note 报文信息为去除协议和协议适配层头
*/
extern UINT8 Deploy_ParseAIMInputInfo(const UINT8* dataBuf, UINT16 dataLength, UINT8 srcType,UINT8 srcId)
{
UINT8 ret = 0u;
UINT32 msgLen = 0;
UINT16 msgIndex = 0u;
UINT16 srcDev = 0u;
UINT32 checkCrc = 0u;
UINT8 msgType = EXIT_OP_DEFAULT;
srcDev += srcType;
srcDev = (UINT16)(srcDev << 8u) + srcId;
if ((NULL == dataBuf) || (DEVICE_TYPE_AIM != srcDev))
{
/** 入口参数错误*/
}
else
{
/** 获取信息长度*/
msgLen = (UINT32)ShortFromChar(dataBuf);
msgIndex += 2u;
if ((2u < dataLength) && ((msgLen + 2U) == dataLength))
{
msgType = dataBuf[msgIndex];
AIMPrinf(AIM_LOG_FATAL, "msgType:%x,\n", msgType);
switch (msgType)
{
case EXIT_OP_FIRST_REQUEST:
AIMPrinf(AIM_LOG_FATAL, "ParseExitOpFirstRequst,\n");
ParseExitOpFirstRequst(&dataBuf[msgIndex],0u);
ret = 1u;
break;
case EXIT_OP_SECOND_REQUEST:
AIMPrinf(AIM_LOG_FATAL, "ParseExitOpSecondRequst,\n");
ParseExitOpSecondRequst(&dataBuf[msgIndex],0u);
ret = 1u;
break;
default:
; /*类型错误不处理*/
break;
}
}
else
{
/** 长度不对 */
}
}
return ret;
}
/**
* @brief 首次退出运营处理
* @param[in] 无
* @param[out] 无
* @return 无
* @note 无
*/
static UINT8 Deploy_FirstReqHandle(void)
{
UINT8 rtn = 0u;
if (((EXIT_OP_DEFAULT == gExitOpInfo.inputMsgType) || (EXIT_OP_FIRST_REQUEST == gExitOpInfo.inputMsgType))
&& (gExitOpInfo.recvLastRequestTimestamp != gFirstFReqInfo.firstRequstTime))
{
gExitOpInfo.inputMsgType = EXIT_OP_FIRST_REQUEST;
gExitOpInfo.outputMsgType = EXIT_OP_FIRST_REPLY;
gExitOpInfo.boardType = gFirstFReqInfo.boardType;
gExitOpInfo.chanelID = gFirstFReqInfo.chanelID;
gExitOpInfo.ReplytTime = gExitOpInfo.innerTime;
gExitOpInfo.recvLastRequestTimestamp = gFirstFReqInfo.firstRequstTime;
AIMPrinf(AIM_LOG_FATAL, "fisrt_opReason: %d,\n", gExitOpInfo.opReason);
if (FORBID_EXIT_OP_REASON_0 == gExitOpInfo.opReason)
{
gExitOpInfo.opStatus = PERMIT_EXIT_OP_STATUS;
}
else
{
gExitOpInfo.opStatus = FORBID_EXIT_OP_STATUS;
}
if (PERMIT_EXIT_OP_STATUS == gExitOpInfo.opStatus)
{
/** 启动计时 */
gExitOpInfo.curTimeout = 0u;
}
else
{
/** 终止计时,此周期不进行重置参数 */
gExitOpInfo.curTimeout = gExitOpInfo.maxTimeout;
}
}
else
{
/** 再次收到首次请求,走超时重置参数*/
rtn = 0xffu;
}
return rtn;
}
/**
* @brief 再次退出运营处理
* @param[in] 无
* @param[out] 无
* @return 无
* @note 无
*/
static UINT8 Deploy_SecondReqHandle(void)
{
UINT8 rtn = 0u;
if ((EXIT_OP_FIRST_REQUEST == gExitOpInfo.inputMsgType) &&
(MSG_REFRESH == gSecondReqInfo.refreshFlag) &&
(PERMIT_EXIT_OP_STATUS == gExitOpInfo.opStatus))
{
gExitOpInfo.inputMsgType = EXIT_OP_SECOND_REQUEST;
if (FORBID_EXIT_OP_REASON_0 != gExitOpInfo.opReason)
{
gExitOpInfo.opStatus = FORBID_EXIT_OP_STATUS;
}
else
{
if ((gExitOpInfo.boardType == gSecondReqInfo.boardType) &&
(gExitOpInfo.chanelID == gSecondReqInfo.chanelID))
{
if (gExitOpInfo.ReplytTime == gSecondReqInfo.firstReplyTime)
{
gExitOpInfo.opStatus = PERMIT_EXIT_OP_STATUS;
gExitOpInfo.exitOperateStatus = EXIT_OP_STATUS;
}
else
{
gExitOpInfo.opStatus = FORBID_EXIT_OP_STATUS;
gExitOpInfo.opReason = FORBID_EXIT_OP_REASON_3;
}
}
else
{
gExitOpInfo.opStatus = FORBID_EXIT_OP_STATUS;
gExitOpInfo.opReason = FORBID_EXIT_OP_REASON_2;
}
}
/** 更新时间戳 */
gExitOpInfo.ReplytTime = gExitOpInfo.innerTime;
gExitOpInfo.recvLastRequestTimestamp = gSecondReqInfo.secondRequstTime;
gExitOpInfo.outputMsgType = EXIT_OP_SECOND_REPLY;
AIMPrinf(AIM_LOG_FATAL, "Sec_opReason: %d.\n", gExitOpInfo.opReason);
/** 终止计时,此周期不进行重置参数 */
gExitOpInfo.curTimeout = gExitOpInfo.maxTimeout;
}
else
{
/** 先收到再次请求,走超时重置参数**/
gExitOpInfo.curTimeout = gExitOpInfo.maxTimeout;
rtn = 0xffu;
}
return rtn;
}
/**
* @brief 退出运营处理
* @param[in] 无
* @param[out] 无
* @return 无
* @note 无
*/
extern void Deploy_ExitOperationHandle(void)
{
UINT8 needTimeOutProcess = 0u;
gExitOpInfo.innerTime++;
gExitOpInfo.outputMsgType = EXIT_OP_DEFAULT;
AIMPrinf(AIM_LOG_FATAL, "refreshFlag:%x-%x ,\n", gFirstFReqInfo.refreshFlag, gSecondReqInfo.refreshFlag);
if (((MSG_REFRESH == gFirstFReqInfo.refreshFlag) && (MSG_REFRESH == gSecondReqInfo.refreshFlag)) ||
((MSG_NO_REFRESH == gFirstFReqInfo.refreshFlag) && (MSG_NO_REFRESH == gSecondReqInfo.refreshFlag)))
{
needTimeOutProcess = 0xffu;
}
else if (MSG_REFRESH == gFirstFReqInfo.refreshFlag)
{
needTimeOutProcess = Deploy_FirstReqHandle();
}
else if (MSG_REFRESH == gSecondReqInfo.refreshFlag)
{
needTimeOutProcess = Deploy_SecondReqHandle();
}
else
{
needTimeOutProcess = 0xffu;
}
if (0xffU == needTimeOutProcess)
{
if (gExitOpInfo.curTimeout < gExitOpInfo.maxTimeout)
{
gExitOpInfo.curTimeout++;
}
else
{
/** 未启动计时,或者超时 */
ResetInitParam();
}
}
else
{
/** 无需处理 */
}
/* 打印内存存储 */
AIMPrinf(AIM_LOG_FATAL, "AIM:Osta:%x,iType:%x,oType:%x,board:%d-%d,recvLastTime:%08x,rTime:%08x,timeout:%d-%d,innerTime:%d,Opsta:%x,opReason:%x,pfun:%x.\n",
gExitOpInfo.exitOperateStatus, gExitOpInfo.inputMsgType, gExitOpInfo.outputMsgType, gExitOpInfo.boardType, gExitOpInfo.chanelID,
gExitOpInfo.recvLastRequestTimestamp, gExitOpInfo.ReplytTime, gExitOpInfo.curTimeout, gExitOpInfo.maxTimeout, gExitOpInfo.innerTime,
gExitOpInfo.opStatus, gExitOpInfo.opReason, gExitOpInfo.pfun);
/** 输入信息用完则清空 */
(void)CommonMemSet(&gFirstFReqInfo, (UINT32)sizeof(EXIT_OP_FIRST_REQ_STRUCT),0u, (UINT32)sizeof(EXIT_OP_FIRST_REQ_STRUCT));
(void)CommonMemSet(&gSecondReqInfo, (UINT32)sizeof(EXIT_OP_SEC_REQ_STRUCT),0u, (UINT32)sizeof(EXIT_OP_SEC_REQ_STRUCT));
}
/**
* @brief 输出组包处理
* @param[in] UINT16 maxLen,输出报文存储空间
* @param[out] UINT8* dataBuf,输出报文起始地址
* @return 0 处理失败;非0 成功
* @note
*/
extern UINT16 Deploy_PackToAIMInfo(UINT8* dataBuf,UINT16 maxLen)
{
UINT16 ret = 0u;
switch(gExitOpInfo.outputMsgType)
{
case EXIT_OP_FIRST_REPLY:
ret = PackExitOpFirstReply(dataBuf,maxLen);
break;
case EXIT_OP_SECOND_REPLY:
ret = PackExitOpSecondReply(dataBuf,maxLen);
break;
default:
/*不处理*/
break;
}
return ret;
}
/**
* @brief 拷贝跟随数据
* @param[out] UINT8 *pDataBuff 跟随数据的存储地址指针
* @param[in] UINT32 curIndex 跟随数据的索引地址
* @return 跟随数据的长度
* @note 无
*/
extern UINT32 Deploy_GetTransferData(OUT UINT8 *pDataBuff,UINT32 curIndex)
{
/*- 局部变量定义 */
UINT32 ret = curIndex;
UINT32 copyIndex = curIndex;
if (NULL == pDataBuff)
{
/** 入口参数错误 */
}
else
{
/** 模块标识*/
pDataBuff[copyIndex++] = (UINT8)'D';
pDataBuff[copyIndex++] = (UINT8)'e';
pDataBuff[copyIndex++] = (UINT8)'p';
pDataBuff[copyIndex++] = (UINT8)'l';
pDataBuff[copyIndex++] = (UINT8)'o';
pDataBuff[copyIndex++] = (UINT8)'y';
pDataBuff[copyIndex++] = gExitOpInfo.exitOperateStatus;
ret = copyIndex;
}
return ret;
}
/**
* @brief 设置跟随数据
* @param[in] const UINT8 *pDatabuff 跟随数据的存储地址指针
* @param[in] UINT32 curIndex 跟随数据的索引地址
* @param[in] UINT32 len 跟随数据的长度
* @return 截取数据索引
* @note
*/
extern UINT32 Deploy_SetTransferData(IN const UINT8 *pDatabuff,UINT32 curIndex)
{
UINT32 ret = curIndex;
UINT32 setIndex = curIndex;
UINT8 modelFlag[6] = {0u};
if (NULL == pDatabuff)
{
/** 入口参数错误 */
}
else
{
/** 模块标识 */
modelFlag[0] = pDatabuff[setIndex++];
modelFlag[1] = pDatabuff[setIndex++];
modelFlag[2] = pDatabuff[setIndex++];
modelFlag[3] = pDatabuff[setIndex++];
modelFlag[4] = pDatabuff[setIndex++];
modelFlag[5] = pDatabuff[setIndex++];
if (((UINT8)'D' == modelFlag[0]) && ((UINT8)'e' == modelFlag[1]) && ((UINT8)'p' == modelFlag[2]) &&
((UINT8)'l' == modelFlag[3]) && ((UINT8)'o' == modelFlag[4]) && ((UINT8)'y' == modelFlag[5]))
{
gExitOpInfo.exitOperateStatus = pDatabuff[setIndex++];
ret = setIndex;
}
else
{
/** 跟随数据错误 */
}
}
return ret;
}
/**
* @brief 获取退出运营状态
* @param[in] 无
* @param[out] 无
* @return EXIT_OP_STATUS 退出运营;STAY_OP_STATUS 处于运营
* @note
*/
extern UINT8 Deploy_GetExitOperateStatus(void)
{
return gExitOpInfo.exitOperateStatus;
}
/**
* @brief 输入板卡ID与本地板卡ID一致性检查
* @param[in] localboardID 板卡ID
* @param[out] 无
* @return 0x55一致且有效 0xaa输入无效或比较不一致
*/
static UINT8 Deploy_CheckBoardID(UINT8 boardID_in)
{
UINT8 retval = 0xaaU;
UINT8 localBoardId = 0U;
#if (kPLATFORM==kVXWORKS)
localBoardId=MSCP_GetBoardID();
if ((1U == localBoardId) && (0xA0U == boardID_in))
{
/*板卡A系*/
retval = 0x55;
}
else if ((2U == localBoardId) && (0x0BU == boardID_in))
{
/*板卡B系*/
retval = 0x55;
}
else
{
retval = 0xaa;
}
#endif
return retval;
}
+100
View File
@@ -0,0 +1,100 @@
/******************************************************************************
** 文件名: Deployment.h
** 描 述: 部署功能模块代码实现
*******************************************************************************/
#ifndef DEPLOYMENT_H_
#define DEPLOYMENT_H_
#include "DeploymentExtern.h"
#include "CommonCRC.h"
#include "Convert.h"
#include "CommonMemory.h"
#define AIM_LOG_FATAL 0u /** 维护日志--维护级别 */
#define AIM_LOG_ERROR 1u /*维护日志--错误级别*/
#define AIM_LOG_WARING 2u /*维护日志--警告级别*/
#define AIM_LOG_DEBUG 3u /*维护日志--调试级别*/
#define AIM_LOG_LEVEL AIM_LOG_DEBUG /*维护日志--当前日志级别*/
#define EXIT_OP_DEFAULT 0X00u /* 命令消息默认值 */
#define EXIT_OP_FIRST_REQUEST 0XA1u /* 退出运营命令首次请求 */
#define EXIT_OP_SECOND_REQUEST 0XA2u /* 退出运营命令再次请求*/
#define EXIT_OP_FIRST_REPLY 0X51u /* 退出运营命令首次确认 */
#define EXIT_OP_SECOND_REPLY 0X52u /* 退出运营命令再次确认*/
#define EXIT_OP_TIMEOUT 120000u /* 退出运营超时时间,单位:毫秒 */
#define MSG_NO_REFRESH 0x00u /* 信息未更新 */
#define MSG_REFRESH 0xffu /* 信息已更新 */
#define PERMIT_EXIT_OP_STATUS 0x00u /** 允许退出运营 */
#define FORBID_EXIT_OP_STATUS 0x01u /** 禁止退出运营 */
#define FORBID_EXIT_OP_REASON_0 0x00u /** 默认值 */
#define FORBID_EXIT_OP_REASON_1 0x01u /** CRC校验失败 */
#define FORBID_EXIT_OP_REASON_2 0x02u /** 信息非法(板卡类型、通道ID与首次信息不一致) */
#define FORBID_EXIT_OP_REASON_3 0x03u /** 再次请求回复的首次确认时间戳不一致 */
#ifdef WIN32
#define DP_LOG_PRINT(fmt,...) printf(fmt,##__VA_ARGS__)
#else
#define DP_LOG_PRINT(fmt,...) printf(fmt,##__VA_ARGS__)
#endif
/** 退出运营相关结构体 */
typedef struct
{
UINT8 inputMsgType; /* 输入信息类型 */
UINT8 outputMsgType; /* 输出信息类型 */
UINT8 boardType; /* 板卡类型 */
UINT8 chanelID; /* 通道id */
UINT32 recvLastRequestTimestamp; /* 收到的最新时间戳 */
UINT32 ReplytTime; /* 首次请求时间 */
UINT16 maxTimeout; /* 最大超时时间 */
UINT16 curTimeout; /* 当前超时时间 */
UINT32 innerTime; /** 内部计时 */
UINT8 exitOperateStatus; /* 退出运营状态 */
UINT8 opStatus; /** 确认结果 */
UINT8 opReason; /** 原因 */
p_DPrintf pfun; /* 打印函数注册 */
}EXIT_OP_STRUCT;
/* 退出运营首次请求 */
typedef struct
{
UINT8 refreshFlag; /* 本周期更新标志 */
UINT8 boardType; /* 板卡类型 */
UINT8 chanelID; /* 通道id */
UINT32 firstRequstTime; /* 首次请求时间 */
UINT8 exitOpCmd; /* 退出运营命令 */
UINT32 exitOpCmdCrc; /* 退出运营命令CRC */
UINT32 msgCrc; /* 信息帧CRC */
}EXIT_OP_FIRST_REQ_STRUCT;
/* 退出运营再次请求 */
typedef struct
{
UINT8 refreshFlag; /* 本周期更新标志 */
UINT8 boardType; /* 板卡类型 */
UINT8 chanelID; /* 通道id */
UINT32 secondRequstTime; /* 再次请求时间 */
UINT32 firstReplyTime; /** 收到的最近一次首次确认信息中的时间戳 */
UINT8 exitOpCmd; /* 退出运营命令 */
UINT32 exitOpCmdCrc; /* 退出运营命令CRC */
UINT32 msgCrc; /* 信息帧CRC */
}EXIT_OP_SEC_REQ_STRUCT;
#endif
@@ -0,0 +1,101 @@
/******************************************************************************
** 文件名: DeploymentExtern.h
** 描 述: 部署功能处理
1、退出运营命令处理
*******************************************************************************/
#ifndef DEPLOYMENT_EXTERN_H_
#define DEPLOYMENT_EXTERN_H_
#include "CommonTypes.h"
#ifdef __cplusplus
extern "C" {
#endif
#define EXIT_OP_STATUS 0x55u /* 退出运营状态 */
#define STAY_OP_STATUS 0xaau /* 处于运营状态 */
#define DEVICE_TYPE_AIM 0xF800U
#define DEVTYPE_AIM (0xF8u) /*AIM数据恒比码 待确认*/
typedef void (*p_DPrintf)(const char* lpszFormat, ...);
/**
* @brief 退出运营模块初始化
* @param[in] UINT16 cycleTime 当前子系统运行周期
* @param[in] const p_DPrintf pfun 打印接口
* @param[out]
* @return
* @note
*/
extern void Deploy_Init(UINT16 cycleTime, const p_DPrintf pfun);
/**
* @brief 输入解包处理
* @param[in] const UINT8* dataBuf,输入报文起始地址
* @param[in] UINT16 dataLength,输入报文长度
* @param[in] UINT8 srcType,类型
* @param[in] UINT8 srcId,ID
* @param[out] 无
* @return 0,解析失败
1,解析成功
* @note 报文信息为去除协议和协议适配层头
*/
extern UINT8 Deploy_ParseAIMInputInfo(const UINT8* dataBuf, UINT16 dataLength, UINT8 srcType,UINT8 srcId);
/**
* @brief 退出运营处理
* @param[in] 无
* @param[out] 无
* @return 无
* @note 无
*/
extern void Deploy_ExitOperationHandle(void);
/**
* @brief 输出组包处理
* @param[in] UINT16 maxLen,输出报文存储空间
* @param[out] UINT8* dataBuf,输出报文起始地址
* @return 0 处理失败;非0 成功
* @note
*/
extern UINT16 Deploy_PackToAIMInfo(UINT8* dataBuf,UINT16 maxLen);
/**
* @brief 拷贝跟随数据
* @param[out] UINT8 *pDataBuff 跟随数据的存储地址指针
* @param[in] UINT32 curIndex 跟随数据的索引地址
* @return 跟随数据的长度
* @note 无
*/
extern UINT32 Deploy_GetTransferData(OUT UINT8 *pDataBuff,UINT32 curIndex);
/**
* @brief 设置跟随数据
* @param[in] const UINT8 *pDatabuff 跟随数据的存储地址指针
* @param[in] UINT32 curIndex 跟随数据的索引地址
* @return 截取数据索引
* @note
*/
extern UINT32 Deploy_SetTransferData(IN const UINT8 *pDatabuff,UINT32 curIndex);
/**
* @brief 获取退出运营状态
* @param[in] 无
* @param[out] 无
* @return EXIT_OP_STATUS 退出运营;STAY_OP_STATUS 处于运营
* @note
*/
extern UINT8 Deploy_GetExitOperateStatus(void);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,81 @@
/********************************************************
*
* 文 件 名: DiffLineDevDataManage.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2016-11-05
* 作 者: 联锁组
* 功能描述: 其他线路设备数据C文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#include "DiffLineDevConfigDataManage.h"
DiffLineDevStruct DiffLineDevData;/*其他线路设备数据*/
UINT16 DiffLineDevSum = 0u; /*其他线路设备总数*/
/*
功能描述: 检查设备是否不属于其他线路
输入参数: UINT8 devType 设备类型
UINT16 devId 设备ID
输出参数: 无
返回值: CI_TRUE 不属于其他线路
CI_FALSE 属于其他线路
*/
UINT8 CheckTheDevIsNotOfDiffLine(UINT8 devType, UINT16 devId)
{
UINT16 *pDevId = NULL; /*不同类型设备ID数组指针*/
UINT16 devSum = 0u; /*不同类型设备总数*/
UINT16 i = 0u; /*循环变量*/
UINT8 retVal = CI_FALSE; /*返回值*/
switch (devType)
{
case CI_DEVICE_TYPE_SWITCH: /* 道岔 */
pDevId = DiffLineDevData.switchIdBuf;
devSum = DiffLineDevData.switchNum;
break;
case CI_DEVICE_TYPE_SIGNAL: /* 信号机 */
pDevId = DiffLineDevData.signalIdBuf;
devSum = DiffLineDevData.signalNum;
break;
case CI_DEVICE_TYPE_ESB: /* ESB */
pDevId = DiffLineDevData.esbIdBuf;
devSum = DiffLineDevData.esbNum;
break;
case CI_DEVICE_TYPE_PSD: /* PSD */
pDevId = DiffLineDevData.psdIdBuf;
devSum = DiffLineDevData.psdNum;
break;
case CI_DEVICE_TYPE_SPKS: /* SPKS */
pDevId = DiffLineDevData.spksIdBuff;
devSum = DiffLineDevData.spksNum;
break;
case CI_DEVICE_TYPE_AXISSEC: /*计轴区段*/
pDevId = DiffLineDevData.axisSectIdBuff;
devSum = DiffLineDevData.axisSectNum;
break;
case CI_DEVICE_TYPE_PHYSEC: /*物理区段区段*/
pDevId = DiffLineDevData.physSectIdBuff;
devSum = DiffLineDevData.physSectNum;
break;
default:
pDevId = NULL;
devSum = 0u;
break;
}
retVal = CI_TRUE; /*返回值*/
for(i = 0u; i < devSum; i++)
{
if(pDevId[i] == devId)
{/*指定设备ID与其他线路设备ID相同*/
retVal = CI_FALSE;
break;
}
}
return retVal;
}
@@ -0,0 +1,72 @@
/********************************************************
*
* 文 件 名: DiffLineDevConfigDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2016-10-05
* 作 者: 联锁组
* 功能描述: 其他线路设备数据头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _DIFF_LINE_DEV_DATA_MANAGE_H_
#define _DIFF_LINE_DEV_DATA_MANAGE_H_
#include "DiffLineDevDefine.h"
#include "../System/CiSystemDefine.h"
#include "CommonTypes.h"
#include "Convert.h"
#include "../System/SystemParameterManage.h"
#ifdef __cplusplus
extern "C" {
#endif
/*其他线路设备数据结构体*/
typedef struct S_DiffLineDevStruct
{
UINT16 diffLineDevSum;
UINT16 signalNum; /*信号机数量*/
UINT16 signalIdBuf[DIFF_LINE_SIGNAL_MAX]; /*信号机ID*/
UINT16 switchNum; /*道岔数量*/
UINT16 switchIdBuf[DIFF_LINE_SWITCH_SUM_MAX]; /*道岔ID*/
UINT16 psdNum; /*屏蔽门数量*/
UINT16 psdIdBuf[DIFF_LINE_PSD_SUM_MAX]; /*屏蔽门ID*/
UINT16 esbNum; /*紧急停车按钮数量*/
UINT16 esbIdBuf[DIFF_LINE_ESB_SUM_MAX]; /*紧急停车按钮ID*/
UINT16 spksNum; /*SPKS数量 */
UINT16 spksIdBuff[DIFF_LINE_SPKS_SUM_MAX]; /*SPKS ID*/
UINT16 axisSectNum; /*计轴区段数量 */
UINT16 axisSectIdBuff[DIFF_LINE_AXIS_SECT_SUM_MAX]; /*计轴区段 ID*/
UINT16 physSectNum; /*物理区段数量*/
UINT16 physSectIdBuff[DIFF_LINE_PHYS_SECT_SUM_MAX]; /*物理区段 ID*/
} DiffLineDevStruct;
/*******************************全局变量声明*******************************/
extern DiffLineDevStruct DiffLineDevData;/*其他线路设备数据*/
extern UINT16 DiffLineDevSum; /*其他线路设备总数*/
/*
功能描述: 检查设备是否不属于其他线路
输入参数: UINT8 devType 设备类型
UINT16 devId 设备ID
输出参数: 无
返回值: CI_TRUE 不属于其他线路
CI_FALSE 属于其他线路
*/
UINT8 CheckTheDevIsNotOfDiffLine(UINT8 devType, UINT16 devId);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,43 @@
/********************************************************
*
* 文 件 名: DiffLineDevDefine.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2016-11-05
* 作 者: 联锁组
* 功能描述: 其他线路设备定义头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _DIFF_LINE_DEV_DEFINE_H_
#define _DIFF_LINE_DEV_DEFINE_H_
/*包含系统配置头文件*/
#include "../System/SystemConfigDefine.h"
/*其他线路信号机最大数量*/
#define DIFF_LINE_SIGNAL_MAX ((UINT16)16)
/*其他线路道岔最大数量*/
#define DIFF_LINE_SWITCH_SUM_MAX ((UINT16)16)
/*其他线路PSD最大数量*/
#define DIFF_LINE_PSD_SUM_MAX ((UINT16)16)
/*其他线路ESB最大数量*/
#define DIFF_LINE_ESB_SUM_MAX ((UINT16)16)
/*其他线路SPKS最大数量*/
#define DIFF_LINE_SPKS_SUM_MAX ((UINT16)16)
/*其他线路计轴区段最大数量*/
#define DIFF_LINE_AXIS_SECT_SUM_MAX ((UINT16)16)
/*其他线路物理区段最大数量*/
#define DIFF_LINE_PHYS_SECT_SUM_MAX ((UINT16)16)
#endif
+254
View File
@@ -0,0 +1,254 @@
/********************************************************
*
* 文 件 名: ErrorDataManage.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-04-11
* 作 者: 联锁组
* 功能描述: 错误数据管理
* 修改记录:
*
********************************************************/
#include "ErrorDataManage.h"
#include "../LogicManage/InterlockLogicManage.h"
/* 故障数据每周期有效 周期结束时清除 */
ErrorDataStruct ErrorDataStru[ERROR_DATA_SUM_MAX]; /*定义错误数据结构体*/
UINT16 ErrorDataCurSum = 0u; /*错误数据当前总数*/
/*
* 功能描述: 获取错误数据当前总数
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 错误数据当前总数
*/
UINT16 GetErrorDataCurSum(void)
{
UINT16 reVal = 0u;
if (ErrorDataCurSum >= ERROR_DATA_SUM_MAX)
{
reVal = 0u;
}
else
{
reVal = ErrorDataCurSum;
}
return reVal;
}
/*
* 功能描述: 获取错误数据
* 参数说明: const UINT16 bufIndex, 数组索引下标
* 返回值 : NULL: 获取数据失败
* !NULL: 错误数据
*/
ErrorDataStruct* GetErrorData(const UINT16 bufIndex)
{
ErrorDataStruct* reVal = NULL;
ErrorDataStruct *pErrorData = NULL; /* 返回值 */
if (bufIndex >= ERROR_DATA_SUM_MAX)
{
reVal = NULL;
}
else
{
if (ErrorDataStru[bufIndex].FunctionId != 0u)
{
/* 故障数据有效 */
pErrorData = &ErrorDataStru[bufIndex];
reVal = pErrorData;
}
else
{
/* 故障数据无效 */
pErrorData = NULL;
reVal = pErrorData;
}
}
return reVal;
}
/*
* 功能描述: 设置错误数据
* 参数说明: const UINT8 functionId, 函数ID
* const UINT8 DeviceType, 设备类型
* const UINT16 DeviceId, 设备ID
* const UINT8 DeviceStateType, 设备状态类型
* const UINT8 DeviceState, 设备状态
* const UINT8 SendLevel, 发送级别
* 返回值
*
*/
void SetErrorData(const UINT8 FunctionId, const UINT8 DeviceType, const UINT16 DeviceId,
const UINT8 DeviceStateType, const UINT8 DeviceState,
const UINT8 SendLevel)
{
UINT16 tempErrorDataIndex = 0u; /*记录数据寻址*/
tempErrorDataIndex = ErrorDataCurSum;
if (tempErrorDataIndex < ERROR_DATA_SUM_MAX)
{
if (ETYPE_PS_FLOCK_SPKSCMD_STATE == DeviceStateType)
{
SetPhySecSpksCmdFlockErrorData(FunctionId, DeviceType, DeviceId, DeviceStateType, DeviceState, SendLevel);
}
else
{
/* 记录新数据 */
ErrorDataStru[tempErrorDataIndex].FunctionId = FunctionId;
ErrorDataStru[tempErrorDataIndex].DeviceType = DeviceType;
ErrorDataStru[tempErrorDataIndex].DeviceId = DeviceId;
ErrorDataStru[tempErrorDataIndex].DeviceStateType = DeviceStateType;
ErrorDataStru[tempErrorDataIndex].DeviceState = DeviceState;
ErrorDataStru[tempErrorDataIndex].SendLevel = SendLevel;
/* 记录未满寻址指向新数据 */
ErrorDataCurSum = (UINT16)(tempErrorDataIndex + 1u);
}
}
else
{
/* 记录失败 */
}
}
/*
* 功能描述: 清除错误数据,每周期结束调用
* 参数说明: void
* 返回值 void
*/
void ClearErrorData(void)
{
UINT16 i = 0u;
/* 清除故障数据*/
ErrorDataCurSum = 0u;
for (i = 0u; i< ERROR_DATA_SUM_MAX; i++)
{
ErrorDataStru[i].FunctionId = 0u;
ErrorDataStru[i].DeviceStateType = 0u;
ErrorDataStru[i].DeviceId = 0u;
ErrorDataStru[i].DeviceState = 0u;
ErrorDataStru[i].SendLevel = 0u;
ErrorDataStru[i].DeviceType = 0u;
ErrorDataStru[i].VirCIid = 0u;
}
}
/*
* 功能描述: 删除错误信息
* 参数说明: const UINT16 Index 索引编号
* 返回值 void
*/
void DeleteErrorData(const UINT16 Index)
{
ErrorDataStru[Index].FunctionId = 0u;
ErrorDataStru[Index].DeviceStateType = 0u;
ErrorDataStru[Index].DeviceId = 0u;
ErrorDataStru[Index].DeviceState = 0u;
ErrorDataStru[Index].SendLevel = 0u;
ErrorDataStru[Index].DeviceType = 0u;
ErrorDataStru[Index].VirCIid = 0u;
ErrorDataCurSum--;
}
/*
* 功能描述: 设置错误数据的虚拟联锁ID
* 参数说明:
* const UINT16 preErrorNum, 之前Error数目
* const UINT8 virCIid, 虚拟联锁ID
* 返回值 void
* cgh-合并CID-2349-5
*/
void SetErrorDataBelongVirCiId(const UINT16 preErrorNum, const UINT8 virCIid)
{
UINT16 tempErrorDataNum = 0u; /*记录数据寻址*/
UINT16 ii = 0u;
tempErrorDataNum = GetErrorDataCurSum(); /*返回值小于ERROR_DATA_SUM_MAX*/
if ((0u < tempErrorDataNum) && (ERROR_DATA_SUM_MAX > preErrorNum))
{
for (ii = preErrorNum; ii < tempErrorDataNum; ii++)/*批量处理*/
{
ErrorDataStru[ii].VirCIid = virCIid;/*记录最新ErrorData的虚拟联锁ID*/
}
}
else
{
/*不做处理*/
}
}
/*
* 功能描述: 设置物理区段封锁类型为SPKS按下且命令封锁时的错误数据
* 参数说明: const UINT8 functionId, 函数ID
* const UINT8 DeviceType, 设备类型
* const UINT16 DeviceId, 设备ID
* const UINT8 DeviceStateType, 设备状态类型
* const UINT8 DeviceState, 设备状态
* const UINT8 SendLevel, 发送级别
* 返回值
*cgh-合并CID-2539-1
*/
void SetPhySecSpksCmdFlockErrorData(const UINT8 FunctionId, const UINT8 DeviceType, const UINT16 DeviceId,
const UINT8 DeviceStateType, const UINT8 DeviceState,
const UINT8 SendLevel)
{
UINT16 tempErrorDataIndex = 0u; /*记录数据寻址*/
UINT16 spksId = 0u; /*SPKS ID*/
UINT8 spksState = 0u; /*SPKS 状态*/
UINT8 checkResult = 0u; /*检查结果*/
tempErrorDataIndex = ErrorDataCurSum;
if (tempErrorDataIndex < ERROR_DATA_SUM_MAX)
{
/* 记录物理区段命令封锁的错误码数据 */
ErrorDataStru[tempErrorDataIndex].FunctionId = FunctionId;
ErrorDataStru[tempErrorDataIndex].DeviceType = DeviceType;
ErrorDataStru[tempErrorDataIndex].DeviceId = DeviceId;
ErrorDataStru[tempErrorDataIndex].DeviceStateType = ETYPE_PS_FLOCK_STATE;
ErrorDataStru[tempErrorDataIndex].DeviceState = DeviceState;
ErrorDataStru[tempErrorDataIndex].SendLevel = SendLevel;
tempErrorDataIndex++;
checkResult = CheckPhysecFlockReasonSpksId(DeviceId, &spksId, &spksState);/*获取物理区段封锁是由于那个spks落下导致的*/
if (CI_SUCCESS == checkResult)
{
/* 记录物理区段SPKS封锁的错误码数据 */
ErrorDataStru[tempErrorDataIndex].FunctionId = FunctionId;
ErrorDataStru[tempErrorDataIndex].DeviceType = CI_DEVICE_TYPE_SPKS;
ErrorDataStru[tempErrorDataIndex].DeviceId = spksId;
ErrorDataStru[tempErrorDataIndex].DeviceStateType = ETYPE_SPKS_STATE_UP;
ErrorDataStru[tempErrorDataIndex].DeviceState = spksState;
ErrorDataStru[tempErrorDataIndex].SendLevel = SendLevel;
tempErrorDataIndex++;
}
/* 记录未满寻址指向新数据 */
ErrorDataCurSum = (UINT16)(tempErrorDataIndex);
}
else
{
/*不做处理*/
}
}
+120
View File
@@ -0,0 +1,120 @@
/********************************************************
*
* 文 件 名: ErrorDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-04-11
* 作 者: 联锁组
* 功能描述: 错误数据管理头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _ERROR_DATA_MANAGE_H_
#define _ERROR_DATA_MANAGE_H_
#include "ErrorDefine.h"
#include "../System/CiSystemDefine.h"
#include "CommonTypes.h"
#ifdef __cplusplus
extern "C" {
#endif
/*错误数据结构体*/
typedef struct S_ErrorDataStruct
{
UINT8 FunctionId; /*函数ID (动态字段)*/
UINT8 DeviceType; /*设备类型 (动态字段)*/
UINT16 DeviceId; /*设备ID (动态字段)*/
UINT8 DeviceStateType; /*设备状态类型 (动态字段)*/
UINT8 DeviceState; /*设备状态 (动态字段)*/
UINT8 SendLevel; /*向外发送级别 (动态字段)*/
UINT8 VirCIid; /*触发该报警的虚拟联锁ID*/
} ErrorDataStruct;
/*******************************全局变量声明*******************************/
extern ErrorDataStruct ErrorDataStru[ERROR_DATA_SUM_MAX]; /*定义错误数据结构体*/
extern UINT16 ErrorDataCurSum; /*错误数据当前总数*/
/*
* 功能描述: 获取错误数据当前总数
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 错误数据当前总数
*/
UINT16 GetErrorDataCurSum(void);
/*
* 功能描述: 获取错误数据
* 参数说明: const UINT16 bufIndex, 数组索引下标
* 返回值 : NULL: 获取数据失败
* !NULL: 错误数据
*/
ErrorDataStruct* GetErrorData(const UINT16 bufIndex);
/*
* 功能描述: 设置错误数据
* 参数说明: const UINT8 functionId, 函数ID
* const UINT8 DeviceType, 设备类型
* const UINT16 DeviceId, 设备ID
* const UINT8 DeviceStateType, 设备状态类型
* const UINT8 DeviceState, 设备状态
* const UINT8 SendLevel, 发送级别
* 返回值
*
*/
void SetErrorData(const UINT8 FunctionId, const UINT8 DeviceType, const UINT16 DeviceId,
const UINT8 DeviceStateType, const UINT8 DeviceState,
const UINT8 SendLevel);
/*
* 功能描述: 清除错误数据
* 参数说明: void
* 返回值 void
*/
void ClearErrorData(void);
/*
* 功能描述: 删除错误信息
* 参数说明: const UINT16 Index 索引编号
* 返回值 void
*/
void DeleteErrorData(const UINT16 Index);
/*
* 功能描述: 设置错误数据的虚拟联锁ID
* 参数说明:
* const UINT16 preErrorNum, 之前Error数目
* const UINT8 virCIid, 虚拟联锁ID
* 返回值 void
* cgh-合并CID-2349-5
*/
void SetErrorDataBelongVirCiId(const UINT16 preErrorNum, const UINT8 virCIid);
/*
* 功能描述: 设置物理区段封锁类型为SPKS按下且命令封锁时的错误数据
* 参数说明: const UINT8 functionId, 函数ID
* const UINT8 DeviceType, 设备类型
* const UINT16 DeviceId, 设备ID
* const UINT8 DeviceStateType, 设备状态类型
* const UINT8 DeviceState, 设备状态
* const UINT8 SendLevel, 发送级别
* 返回值
*cgh-合并CID-2539-1
*/
void SetPhySecSpksCmdFlockErrorData(const UINT8 FunctionId, const UINT8 DeviceType, const UINT16 DeviceId,
const UINT8 DeviceStateType, const UINT8 DeviceState,
const UINT8 SendLevel);
#ifdef __cplusplus
}
#endif
#endif
File diff suppressed because one or more lines are too long
@@ -0,0 +1,665 @@
/********************************************************
*
* 文 件 名: ESBConfigDataManage.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-20
* 作 者: 联锁组
* 功能描述: 紧急停车按钮配置数据管理
* 修改记录:
*
********************************************************/
#include "ESBConfigDataManage.h"
EsbConfigDataStruct EsbConfigDataStru[ESB_SUM_MAX]; /*定义ESB数据配置结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
UINT16 LocalCiEsbIdBuf[ESB_SUM_MAX] = {0u}; /*定义本地联锁紧急停车按钮ID映射数组*/
INT16 EsbCurSum = 0; /*ESB当前总数*/
UINT16 totalEsbNum = 0u;/*本联锁和相邻联锁发送给本联锁ESB总数*/
/*
* 功能描述: 获取紧急停车当前总数
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 紧急停车当前总数
*/
UINT16 GetEsbSum(void)
{
UINT16 reVal = 0u;
if (EsbCurSum >= (INT16)ESB_SUM_MAX)
{
reVal = ESB_SUM_MAX;
}
else if (EsbCurSum < 0)
{
reVal = 0u;
}
else
{
reVal = (UINT16)EsbCurSum;
}
return reVal;
}
/*
* 功能描述: 获取指定数组下标对应的紧急停车ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 紧急停车ID
*/
UINT16 GetEsbId(const UINT16 bufIndex)
{
UINT16 reVal = CI_ERROR;
if (bufIndex < GetTotalEsbCurNum())
{
reVal = LocalCiEsbIdBuf[bufIndex];
}
return reVal;
}
/*
* 功能描述: 获取指定ID紧急停车按钮索引号
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 ESB_SUM_MAX: 获取数据失败
* <ESB_SUM_MAX: 查找成功
*/
UINT16 GetEsbConfigBufIndex(const UINT16 esbId)
{
UINT16 reVal = ESB_SUM_MAX;
if ((esbId >= 1u) && (esbId < ESB_SUM_MAX))
{
reVal = esbId;
}
return reVal;
}
/*
* 功能描述: 获取指定ID站台紧急停车按钮所属联锁ID
* 参数说明: const UINT16 esbId, 站台紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
*/
UINT8 GetEsbBelongCiId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].BelongCiId;
}
return reVal;
}
/*
* 功能描述: 获取指定ID站台紧急停车按钮所属站台ID
* 参数说明: const UINT16 esbId, 站台紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
*/
UINT16 GetEsbBelongPlatFormId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].BelongPlatFormId;
}
return reVal;
}
/*
* 功能描述: 获取指定ID紧急停车按钮继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮继电器ID
*/
UINT16 GetEsbRelayId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].EsbRelayId;
}
return reVal;
}
/*
* 功能描述: 获取指定ID紧急停车按钮旁路继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮继电器ID
*/
UINT16 GetEsbCutRelayId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].EsbCutRelayId;
}
return reVal;
}
/*
* 功能描述: 整理读入的ESB配置数据
* 参数说明: 无
* 返回值 CI_SUCCESS,整理成功
* CI_ERROR,整理失败
*/
UINT8 EsbConfigDataManage(void)
{
UINT16 ii = 0u; /*游标*/
UINT16 jj = 0u; /*游标*/
UINT16 esbConfigDataSum = 0u; /*ESB设备配置数据总数*/
UINT8 reVal = CI_SUCCESS;
/*保存ESBID索引数组*/
esbConfigDataSum = GetEsbSum();
totalEsbNum = esbConfigDataSum;
if (esbConfigDataSum >= ESB_SUM_MAX)
{/*配置数据总数错误*/
reVal = CI_ERROR;
}
else
{
for (ii = 0u; ii < ESB_SUM_MAX; ii++)
{
if (jj == esbConfigDataSum)
{/*遍历有效数据完毕*/
break;
}
if (EsbConfigDataStru[ii].BelongCiId == GetSystemParaLocalCiId())
{/*该部分为有效数据*/
LocalCiEsbIdBuf[jj] = EsbConfigDataStru[ii].EsbId;
jj++;
}
}
}
return reVal;
}
/*
* 功能描述: 整理读入的相邻联锁ESB配置数据
* 参数说明: esbSum 进路数量
* esbIdBuff 相邻联锁发送给本联锁的ESBID配置数据
* 返回值 1,整理成功
* 0,整理失败
*/
UINT8 AddExtendEsbIdDataManage(UINT16 esbSum,const UINT16 *esbIdBuff)
{
UINT16 index = 0u; /*数组下标*/
UINT16 ii = 0u;
UINT8 retVal = 1u;
if ((totalEsbNum + esbSum) >= ESB_SUM_MAX)
{/*入口防护*/
retVal = 0u;
}
else
{
index = totalEsbNum;
totalEsbNum += esbSum;
for(ii = 0u;ii< esbSum;ii++)
{
LocalCiEsbIdBuf[index+ii] = esbIdBuff[ii];/*追加到LocalCiEsbIdBuf*/
}
}
return retVal;
}
/*
* 功能描述: 获取相邻联锁发送给本联锁以及本联锁ESB当前总数
* 参数说明: void
* 返回值 0: 获取数据失败
* >0且小于 ESB_SUM_MAX : ESB当前总数
*/
UINT16 GetTotalEsbCurNum(void)
{
UINT16 retVal = 0u;
if (totalEsbNum >= ESB_SUM_MAX)
{
retVal = 0u;
}
else
{
retVal = totalEsbNum;
}
return retVal;
}
/*
* 功能描述: 获取指定ID ESB的虚拟属性
* 参数说明: const UINT16 esbId, ESB ID
* 返回值 0: 获取数据失败
* >0: ESB的虚拟属性
*/
UINT8 GetEsbVirtualAttribute(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取ESB数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
retVal = EsbConfigDataStru[bufIndex].VirtualAttribute;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/***********分界线 esb复示继电器********************************************/
/*
* 功能描述: 获取指定ID ESB复示继电器ID
* 参数说明: const UINT16 esbId
* 返回值 : 0: 获取数据失败
* >0: esb复视继电器ID
*/
UINT16 GetEsbRepRelayId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 retVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取ESB数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
retVal = EsbConfigDataStru[bufIndex].EsbRepRelayId;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* 功能描述: 获取指定ID紧急停车按钮指示灯继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮指示灯ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮指示灯继电器ID
*/
UINT16 GetEsbDisRelayId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].EsbDisRelayId;
}
return reVal;
}
/*
* 功能描述: 获取指定ID紧急停车按钮旁路指示灯继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮继电器ID
*/
UINT16 GetEsbCutDisRelayId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].EsbCutDisRelayId;
}
return reVal;
}
/*
* 功能描述: 获取指定ID站台紧急停车按钮所属联锁ID
* 参数说明: const UINT16 esbId, 站台紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
*/
UINT8 GetEsbBelongVirCiId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].BelongVirCiId;
}
return reVal;
}
/*
* 功能描述: 获取指定ID站台紧急停车按钮对应的蜂鸣器继电器ID
* 参数说明: const UINT16 esbId, 站台紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 蜂鸣器继电器ID
*/
UINT16 GetEsbBuzzRelayId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
/*返回蜂鸣器继电器ID*/
reVal = EsbConfigDataStru[bufIndex].EsbBuzzRelayId;
}
else
{
/*不做处理*/
}
return reVal;
}
/*
* 功能描述: 获取指定ID紧急停车按钮继电器ID 2
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮继电器ID
*/
UINT16 GetEsbRelayId2(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].wEsbRelayId2;
}
return reVal;
}
/*
* 功能描述: 获取指定ID紧急停车开关继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车开关继电器ID
* cgh-合并CID-2349-3
*/
UINT16 GetESSRelayId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].ESSRelayId;
}
return reVal;
}
/*
* 功能描述: 获取指定ID紧急停车开关稳灯继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车开关稳灯继电器ID
* cgh-合并CID-2349-3
*/
UINT16 GetESSSteadyIndicatRelayId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].ESSSteadyIndicatRelayId;
}
return reVal;
}
/*
* 功能描述: 获取指定ID紧急停车开关闪光指示灯继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车开关闪灯继电器ID
* cgh-合并CID-2349-3
*/
UINT16 GetESSFlashIndicatRelayId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].ESSFlashIndicatRelayId;
}
return reVal;
}
/*
* 功能描述: 获取指定紧急停车对应的ESS稳灯继电器ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 继电器ID
* cgh-合并CID-2349-3\cgh-合并CID-3037-1::
*/
UINT16 GetEssSteadyIndicatId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].ESSSteadyIndicatRelayId;
}
return reVal;
}
/*
* 功能描述: 获取指定紧急停车对应的ESS闪灯继电器ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 继电器ID
* cgh-合并CID-2349-3\cgh-合并CID-3037-1::
*/
UINT16 GetEssFlashIndicatId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].ESSFlashIndicatRelayId;
}
return reVal;
}
/*
* 功能描述: 获取指定ESB对应ATS-CI的ESS稳灯状态码位是否配置标志
* 参数说明: UINT16 esbId ESBID
* 返回值 ESS_MASK_NO 未配置
* ESS_MASK_YES 配置
* cgh-合并CID-2349-3
*/
UINT8 GetEssSteadyCiToAtsMaskFlag(UINT16 esbId)
{
UINT8 reVal = ESS_MASK_NO;
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
reVal = EsbConfigDataStru[bufIndex].ConfigAtsCiEssSteadyMask;
}
return reVal;
}
/*
* 功能描述: 获取指定ESB对应ATS-CI的ESS闪灯状态码位是否配置标志
* 参数说明: UINT16 esbId ESBID
* 返回值 ESS_MASK_NO 未配置
* ESS_MASK_YES 配置
* cgh-合并CID-2349-3
*/
UINT8 GetEssFlashCiToAtsMaskFlag(UINT16 esbId)
{
UINT8 reVal = ESS_MASK_NO;
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
reVal = EsbConfigDataStru[bufIndex].ConfigAtsCiEssFlashMask;
}
return reVal;
}
/*
* 功能描述: 获取指定ID紧急停车按钮取消紧急停车按钮继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 取消紧急停车按钮继电器ID
*/
UINT16 GetCancelEsbRelayId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].CancelEsbRelayId;
}
return reVal;
}
/*
* 功能描述: 获取指定ID紧急停车按钮站台指示灯继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮站台指示灯继电器ID
*/
UINT16 GetEsbPlatformDisRelayId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].EsbPlatformDisRelayId;
}
return reVal;
}
/*
* 功能描述: 获取指定ID紧急停车按钮切除蜂鸣器报警继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮切除蜂鸣器报警继电器ID
*/
UINT16 GetEsbCutoffBuzzRelayId(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbConfigDataStru[bufIndex].EsbCutoffBuzzRelayId;
}
return reVal;
}
/*
* 功能描述: 检查Esb是否属于传输范围
* 参数说明: const UINT16 wCheckEsbId, 检查EsbID
* 返回值 CI_ERROR 属于
* CI_SUCCESS 不属于
* by cgh 20240621
*/
UINT8 CheckEsbBelSendRange(const UINT16 wCheckEsbId)
{
UINT8 retVal = CI_ERROR;
UINT16 wEsbSum = 0U;/*Esb数目*/
UINT16 ii = 0U;
UINT16 wEsbId = 0U;/*Esb ID*/
if ((0U < wCheckEsbId) && (ESB_SUM_MAX > wCheckEsbId))
{
/*初始不属于*/
retVal = CI_SUCCESS;
wEsbSum = GetTotalEsbCurNum();
for (ii = 0U; ii < wEsbSum; ii++)
{
wEsbId = GetEsbId(ii);/*获取配置文件中该索引下的PSD ID*/
if (wCheckEsbId == wEsbId)
{
retVal = CI_ERROR;
break;
}
else
{
; /*do nothing*/
}
}
}
else
{
; /*不处理*/
}
return retVal;
}
@@ -0,0 +1,300 @@
/********************************************************
*
* 文 件 名: ESBConfigDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-20
* 作 者: 联锁组
* 功能描述: 紧急停车按钮配置数据管理头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _ESB_CONFIG_DATA_MANAGE_H_
#define _ESB_CONFIG_DATA_MANAGE_H_
#include "ESBDefine.h"
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#include "../System/SystemParameterManage.h"
#ifdef __cplusplus
extern "C" {
#endif
/*紧急停车按钮接口数据结构体*/
typedef struct S_EsbConfigDataStruct
{
UINT16 EsbId; /*紧急停车按钮ID (配置字段)*/
UINT8 BelongCiId; /*所属联锁ID*/
UINT8 BelongVirCiId; /*所属虚拟联锁ID*/
UINT16 BelongPlatFormId; /*紧急停车按钮所属站台ID*/
UINT16 EsbRelayId; /*紧急停车按钮相关继电器ID (配置字段)*/
UINT16 wEsbRelayId2; /*迪斯尼紧急停车按钮相关继电器ID 2(配置字段)*/
UINT16 EsbDisRelayId; /*紧急停车按钮表示灯相关继电器ID (配置字段)*/
UINT16 EsbCutRelayId; /*紧急停车按钮旁路继电器ID (配置字段)*/
UINT16 EsbCutDisRelayId; /*紧急停车按钮旁路表示灯继电器ID (配置字段)*/
UINT16 EsbRepRelayId; /*复示相邻紧急停车按钮相关继电器ID (配置字段)*/
UINT16 EsbBuzzRelayId; /*紧急停车蜂鸣器继电器ID*/
UINT8 VirtualAttribute; /*虚拟属性字段*/
UINT16 ESSRelayId; /*紧急停车开关继电器ID*/
UINT16 ESSSteadyIndicatRelayId; /*紧急停车开关稳灯继电器ID*/
UINT16 ESSFlashIndicatRelayId; /*紧急停车开关闪灯继电器ID*/
UINT16 CancelEsbRelayId; /*取消紧急停车按钮采集继电器ID*/
UINT16 EsbPlatformDisRelayId; /*紧急停车按钮站台指示灯继电器ID*/
UINT16 EsbCutoffBuzzRelayId; /*切除蜂鸣器报警继电器ID*/
UINT8 ConfigAtsCiEssSteadyMask; /*是否配置了ATS-CI稳灯状态码位0x55 配置;0xaa未配置*/
UINT8 ConfigAtsCiEssFlashMask; /*是否配置了ATS-CI闪灯状态码位0x55 配置;0xaa未配置*/
} EsbConfigDataStruct;
/*******************************全局变量声明*******************************/
extern EsbConfigDataStruct EsbConfigDataStru[ESB_SUM_MAX]; /*定义ESB数据配置结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
extern UINT16 LocalCiEsbIdBuf[ESB_SUM_MAX]; /*定义本地联锁紧急停车按钮ID映射数组*/
extern INT16 EsbCurSum; /*ESB当前总数*/
extern UINT16 totalEsbNum;/*本联锁和相邻联锁发送给本联锁ESB总数*/
/*
* 功能描述: 获取紧急停车当前总数
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 紧急停车当前总数
*/
UINT16 GetEsbSum(void);
/*
* 功能描述: 获取指定数组下标对应的紧急停车ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 紧急停车ID
*/
UINT16 GetEsbId(const UINT16 bufIndex);
/*
* 功能描述: 获取指定ID紧急停车按钮索引号
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 ESB_SUM_MAX: 获取数据失败
* <ESB_SUM_MAX: 查找成功
*/
UINT16 GetEsbConfigBufIndex(const UINT16 esbId);
/*
* 功能描述: 获取指定ID站台紧急停车按钮所属联锁ID
* 参数说明: const UINT16 esbId, 站台紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
*/
UINT8 GetEsbBelongCiId(const UINT16 esbId);
/*
* 功能描述: 获取指定ID站台紧急停车按钮所属站台ID
* 参数说明: const UINT16 esbId, 站台紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
*/
UINT16 GetEsbBelongPlatFormId(const UINT16 esbId);
/*
* 功能描述: 获取指定ID紧急停车按钮继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮继电器ID
*/
UINT16 GetEsbRelayId(const UINT16 esbId);
/*
* 功能描述: 获取指定ID紧急停车按钮继电器ID 2
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮继电器ID
*/
UINT16 GetEsbRelayId2(const UINT16 esbId);
/*
* 功能描述: 获取指定ID紧急停车按钮旁路继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮继电器ID
*/
UINT16 GetEsbCutRelayId(const UINT16 esbId);
/*
* 功能描述: 整理读入的ESB配置数据
* 参数说明: 无
* 返回值 CI_SUCCESS,整理成功
* CI_ERROR,整理失败
*/
UINT8 EsbConfigDataManage(void);
/*
* 功能描述: 整理读入的相邻联锁ESB配置数据
* 参数说明: esbSum ESB数量
* esbIdBuff 相邻联锁发送给本联锁的ESBID配置数据
* 返回值 1,整理成功
* 0,整理失败
*/
UINT8 AddExtendEsbIdDataManage(UINT16 esbSum,const UINT16 *esbIdBuff);
/*
* 功能描述: 获取相邻联锁发送给本联锁以及本联锁ESB当前总数
* 参数说明: void
* 返回值 0: 获取数据失败
* >0且小于 ESB_SUM_MAX: ESB当前总数
*/
UINT16 GetTotalEsbCurNum(void);
/*
* 功能描述: 获取指定ID ESB的虚拟属性
* 参数说明: const UINT16 esbId, ESB ID
* 返回值 0: 获取数据失败
* >0: ESB的虚拟属性
*/
UINT8 GetEsbVirtualAttribute(const UINT16 esbId);
/*
* 功能描述: 获取指定ID ESB复示继电器ID
* 参数说明: const UINT16 esbId
* 返回值 : 0: 获取数据失败
* >0: esb复视继电器ID
*/
UINT16 GetEsbRepRelayId(const UINT16 esbId);
/*
* 功能描述: 获取指定ID紧急停车按钮指示灯继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮指示灯ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮指示灯继电器ID
*/
UINT16 GetEsbDisRelayId(const UINT16 esbId);
/*
* 功能描述: 获取指定ID紧急停车按钮旁路指示灯继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮继电器ID
*/
UINT16 GetEsbCutDisRelayId(const UINT16 esbId);
/*
* 功能描述: 获取指定ID站台紧急停车按钮所属虚拟联锁ID
* 参数说明: const UINT16 esbId, 站台紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
*/
UINT8 GetEsbBelongVirCiId(const UINT16 esbId);
/*
* 功能描述: 获取指定ID站台紧急停车按钮对应的蜂鸣器继电器ID
* 参数说明: const UINT16 esbId, 站台紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 蜂鸣器继电器ID
*/
UINT16 GetEsbBuzzRelayId(const UINT16 esbId);
/*
* 功能描述: 获取指定ID紧急停车开关继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车开关继电器ID
* cgh-合并CID-2349-3
*/
UINT16 GetESSRelayId(const UINT16 esbId);
/*
* 功能描述: 获取指定ID紧急停车开关稳灯继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车开关稳灯继电器ID
* cgh-合并CID-2349-3
*/
UINT16 GetESSSteadyIndicatRelayId(const UINT16 esbId);
/*
* 功能描述: 获取指定ID紧急停车开关闪光指示灯继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车开关闪灯继电器ID
* cgh-合并CID-2349-3
*/
UINT16 GetESSFlashIndicatRelayId(const UINT16 esbId);
/*
* 功能描述: 获取指定紧急停车对应的ESS稳灯继电器ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 继电器ID
* cgh-合并CID-2349-3
*/
UINT16 GetEssSteadyIndicatId(const UINT16 esbId);
/*
* 功能描述: 获取指定紧急停车对应的ESS闪灯继电器ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 继电器ID
* cgh-合并CID-2349-3
*/
UINT16 GetEssFlashIndicatId(const UINT16 esbId);
/*
* 功能描述: 获取指定ESB对应ATS-CI的ESS稳灯状态码位是否配置标志
* 参数说明: UINT16 esbId ESBID
* 返回值 ESS_MASK_NO 未配置
* ESS_MASK_YES 配置
* cgh-合并CID-2349-3
*/
UINT8 GetEssSteadyCiToAtsMaskFlag(UINT16 esbId);
/*
* 功能描述: 获取指定ESB对应ATS-CI的ESS闪灯状态码位是否配置标志
* 参数说明: UINT16 esbId ESBID
* 返回值 ESS_MASK_NO 未配置
* ESS_MASK_YES 配置
* cgh-合并CID-2349-3
*/
UINT8 GetEssFlashCiToAtsMaskFlag(UINT16 esbId);
/*
* 功能描述: 获取指定ID紧急停车按钮取消紧急停车按钮继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 取消紧急停车按钮继电器ID
*/
UINT16 GetCancelEsbRelayId(const UINT16 esbId);
/*
* 功能描述: 获取指定ID紧急停车按钮站台指示灯继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮站台指示灯继电器ID
*/
UINT16 GetEsbPlatformDisRelayId(const UINT16 esbId);
/*
* 功能描述: 获取指定ID紧急停车按钮切除蜂鸣器报警继电器ID
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮切除蜂鸣器报警继电器ID
*/
UINT16 GetEsbCutoffBuzzRelayId(const UINT16 esbId);
/*
* 功能描述: 检查Esb是否属于传输范围
* 参数说明: const UINT16 wCheckEsbId, 检查EsbID
* 返回值 CI_ERROR 属于
* CI_SUCCESS 不属于
* by cgh 20240621
*/
UINT8 CheckEsbBelSendRange(const UINT16 wCheckEsbId);
#ifdef __cplusplus
}
#endif
#endif
+800
View File
@@ -0,0 +1,800 @@
/********************************************************
*
* 文 件 名: ESBDataManage.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-20
* 作 者: 联锁组
* 功能描述: 紧急停车按钮数据管理
* 修改记录:
*
********************************************************/
#include "ESBDataManage.h"
#include "ESBConfigDataManage.h"
EsbDataStruct EsbDataStru[ESB_SUM_MAX]; /*定义ESB数据结构体*/
/*
* 功能描述: 获取指定ESB数据
* 参数说明:
* 返回值
EsbDataStruct *
*/
EsbDataStruct *GetEsbData(void)
{
return EsbDataStru;
}
/*
* 功能描述: 获取指定ID紧急停车按钮状态
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮状态
*/
UINT8 GetEsbState(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbDataStru[bufIndex].EsbState;
}
return reVal;
}
/*
* 功能描述: 设置指定ID紧急停车按钮状态
* 参数说明: const UINT16 esbId, 紧急按钮ID
* const UINT8 esbState, 紧急按钮状态
* 返回值 0: 设置失败
* 1: 设置成功
*/
UINT8 SetEsbState(const UINT16 esbId, const UINT8 esbState)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
if ((ESB_STATE_VALID_NO == esbState) || (ESB_STATE_VALID_YES == esbState))
{
EsbDataStru[bufIndex].EsbState = esbState; /*紧急停车按钮状态*/
reVal = CI_SUCCESS;
}
}
return reVal;
}
/*
* 功能描述: 获取指定ID 紧急停车按钮旁路状态
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: spks按钮状态
*/
UINT8 GetEsbCutState(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 status = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
status = EsbDataStru[bufIndex].CutStatus;
}
return status;
}
/*
* 功能描述: 设置指定ID 旁路状态
* 参数说明: const UINT16 esbId, 紧急停车按钮
* const UINT8 esbCutState, 旁路状态
* 返回值
*
*/
void SetEsbCutState(const UINT16 esbId, const UINT8 esbCutState)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
if ((ESB_CUT_NO == esbCutState) || (ESB_CUT_YES == esbCutState))
{
EsbDataStru[bufIndex].CutStatus = esbCutState;
}
else
{
/*不做处理*/
}
}
else
{
/*不做处理*/
}
}
/*
* 功能描述: ESB状态初始化
* 参数说明: 无
* 返回值 0: 设置失败
* 1: 设置成功
*/
UINT8 EsbDataManageInit(void)
{
UINT8 rtn = CI_ERROR; /*返回值*/
UINT16 esbNum = 0u; /*ESB数量*/
UINT16 i = 0u; /*用于循环*/
UINT16 esbId = 0u; /*ESB ID*/
UINT8 chEsbVirAttribute = 0u;
esbNum = GetTotalEsbCurNum();
for (i = 0u; i < esbNum; i++)
{
esbId = GetEsbId(i);
chEsbVirAttribute = GetEsbVirtualAttribute(esbId);
if (ESB_VIRTUAL_ATTR_YES == chEsbVirAttribute)
{/*虚拟ESB,初始化为未按下*/
EsbDataStru[esbId].EsbState = ESB_STATE_VALID_NO;
EsbDataStru[esbId].EssState = ESB_STATE_GO_FLAG;
EsbDataStru[esbId].EsbActualState = ESB_STATE_VALID_NO;
}
else
{/*非虚拟ESB,初始化为按下*/
EsbDataStru[esbId].EsbState = ESB_STATE_VALID_YES;
EsbDataStru[esbId].EssState = ESB_STATE_STOP_FLAG;
EsbDataStru[esbId].EsbActualState = ESB_STATE_VALID_YES;
}
EsbDataStru[esbId].EssSteadyState = ESB_STATE_LIGHT_STATE_N;/*ESS稳灯状态未设置*/
EsbDataStru[esbId].EssFlashState = ESB_STATE_LIGHT_STATE_N;/*ESS闪灯状态未设置*/
EsbDataStru[esbId].CutStatus = ESB_CUT_NO; /*ESB旁路未按下*/
EsbDataStru[esbId].EsbRelateRelayDriveState = ESB_PEPUP_ESSUP_INITION_STA; /*PEP和ESS都无效*/
EsbDataStru[esbId].EsbErrorFlag = ESB_ERROR_FLAG_NO; /*自复式ESB未故障*/
EsbDataStru[esbId].CancelEsbErrorFlag = ESB_ERROR_FLAG_NO; /*自复式取消ESB未故障*/
EsbDataStru[esbId].EsbPressCycNum = 0U; /*紧急关闭按钮按下周期*/
EsbDataStru[esbId].CancelEsbPressCycNum = 0U; /*取消紧急关闭按钮按下周期*/
EsbDataStru[esbId].CancelEsbErrTriggerPressCycNum = 0U; /*取消紧急关闭按钮误触发按下周期*/
EsbDataStru[esbId].CancelEsbValidFlag = ESB_CANCEL_VALID_NO; /*取消紧急关闭按钮有效标志*/
EsbDataStru[esbId].CancelEsbRelayDownState = ESB_RELAY_ERROR_DOWN_YES; /*取消紧急关闭按钮采集继电器落下状态初始化为通信异常落下*/
}
rtn = CI_SUCCESS;
return rtn;
}
/*
* 功能描述: 设置指定ESB ID相关继电器驱动处理状态机
* 参数说明: const UINT16 esbId, 紧急停车按钮
* const UINT8 state, 状态机
* 返回值
* cgh-合并CID-2349-1
*/
void SetEsbRelateRelayDriveProState(const UINT16 esbId, const UINT8 state)
{
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
/*设置状态是6个状态机中的一个则设置*/
if ((ESB_PEPUP_ESSUP_INITION_STA == state) || (ESB_PEPDOWN_ESSUP_TWO_STATE == state) || (ESB_PEPDOWN_ESSDOWN_THREE_STATE == state)
|| (ESB_ONEPEPUP_ESSDOWN_FOUR_STATE == state) || (ESB_TWOPEPUP_ESSDOWN_FIVE_STATE == state) || (ESB_FAULT_SIX_STATE == state))
{
EsbDataStru[bufIndex].EsbRelateRelayDriveState = state;
}
else
{
/*不做处理*/
}
}
else
{
/*不做处理*/
}
}
/*
* 功能描述: 获取指定ESB ID相关继电器驱动处理状态机
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: esb相关继电器驱动处理状态机
* cgh-合并CID-2349-1
*/
UINT8 GetEsbRelateRelayDriveProState(const UINT16 esbId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT8 status = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
status = EsbDataStru[bufIndex].EsbRelateRelayDriveState;
}
return status;
}
/*
* 功能描述: 设置指定ESB ID对应的ESS稳灯状态
* 参数说明: const UINT16 esbId, 紧急停车按钮
* const UINT8 state, 状态机
* 返回值
* cgh-合并CID-2349-1\cgh-合并CID-3037-1::
*/
void SetEsbRelateEssSteadyState(const UINT16 esbId, const UINT8 state)
{
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
if ((ESB_STATE_LIGHT_STATE_Y == state) || (ESB_STATE_LIGHT_STATE_N == state))
{
EsbDataStru[bufIndex].EssSteadyState = state;
}
else
{
/*不做处理*/
}
}
else
{
/*不做处理*/
}
}
/*
* 功能描述: 获取指定ESB ID对应的ESS稳灯状态
* 参数说明: const UINT16 esbId, 紧急停车按钮
* 返回值
* 备注:cgh-合并CID-2349-1\cgh-合并CID-3037-1::
*/
UINT8 GetEsbRelateEssSteadyState(const UINT16 esbId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT8 chEssSteadyState = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
chEssSteadyState = EsbDataStru[bufIndex].EssSteadyState;
}
else
{
/*不做处理*/
}
return chEssSteadyState;
}
/*
* 功能描述: 设置指定ESB ID对应的ESS闪灯状态
* 参数说明: const UINT16 esbId, 紧急停车按钮
* const UINT8 state, 状态机
* 返回值
* 备注:cgh-合并CID-2349-1
*/
void SetEsbRelateEssFlashState(const UINT16 esbId, const UINT8 state)
{
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
if ((ESB_STATE_LIGHT_STATE_Y == state) || (ESB_STATE_LIGHT_STATE_N == state))
{
EsbDataStru[bufIndex].EssFlashState = state;
}
else
{
/*不做处理*/
}
}
else
{
/*不做处理*/
}
}
/*
* 功能描述: 获取指定ESB ID对应的ESS闪灯状态
* 参数说明: const UINT16 esbId, 紧急停车按钮
* 返回值
* 备注:cgh-合并CID-2349-1
*/
UINT8 GetEsbRelateEssFlashState(const UINT16 esbId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT8 chEssFlashState = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
chEssFlashState = EsbDataStru[bufIndex].EssFlashState;
}
else
{
/*不做处理*/
}
return chEssFlashState;
}
/*
* 功能描述: 设置指定ID紧急停车按钮实际状态(根据ATS按钮状态设置-虚拟属性具备)
* 参数说明: const UINT16 esbId, 紧急按钮ID
* const UINT8 esbState, 紧急按钮状态
* 返回值 0: 设置失败
* 1: 设置成功
* cgh-合并CID-2349-1\cgh-合并CID-3037-1::
*
*/
void SetEsbAutualState(const UINT16 esbId, const UINT8 EsbState)
{
UINT16 bufIndex = 0U; /*数组下标,m by yt,修改MISRA2004-10_1_h-32022年2月14日*/
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
if ((ESB_STATE_VALID_NO == EsbState) || (ESB_STATE_VALID_YES == EsbState))
{
EsbDataStru[bufIndex].EsbActualState = EsbState; /*紧急停车按钮状态*/
}
else
{
; /*设置状态不合法,不执行状态更新*/
}
}
else
{
; /*数组下标不合法,不执行状态更新*/
}
}
/*
* 功能描述: 获取指定ID紧急停车ESB按钮状态(根据ATS按钮状态设置-虚拟属性具备)
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: ESS按钮状态
*备注:cgh-合并CID-2349-1\GetEsbAutualState
*/
UINT8 GetEsbAutualState(const UINT16 esbId)
{
UINT16 bufIndex = 0U;
UINT8 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbDataStru[bufIndex].EsbActualState;
}
return reVal;
}
/*
* 功能描述: 获取指定ID紧急停车ESS按钮状态
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: ESS按钮状态
*备注:cgh-合并CID-2349-1\cgh-合并CID-3037-1::
*/
UINT8 GetEssState(const UINT16 esbId)
{
UINT16 bufIndex = 0U;
UINT8 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbDataStru[bufIndex].EssState;
}
return reVal;
}
/*
* 功能描述: 设置指定IDESS按钮状态
* 参数说明: const UINT16 esbId, 紧急按钮ID
* const UINT8 EssState, ESS按钮状态
* 返回值 0: 设置失败
* 1: 设置成功
*备注:cgh-合并CID-2349-1\cgh-合并CID-3037-1::
*/
void SetEssState(const UINT16 esbId, const UINT8 EssState)
{
UINT16 bufIndex = 0U; /*数组下标,m by yt,修改MISRA2004-10_1_h-32022年2月14日*/
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
if ((ESB_STATE_GO_FLAG == EssState) || (ESB_STATE_STOP_FLAG == EssState))
{
EsbDataStru[bufIndex].EssState = EssState; /*紧急停车按钮状态*/
}
else
{
; /*设置状态不合法,不进项状态更新*/
}
}
else
{
; /*数组下标不合法,不执行状态更新*/
}
}
/*
* 功能描述: 获取指定ID自复式取消紧急停车按钮故障标志
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 取消紧停按钮故障标志
*/
UINT8 GetCancelEsbErrFlag(const UINT16 esbId)
{
UINT16 bufIndex = 0U;
UINT8 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbDataStru[bufIndex].CancelEsbErrorFlag;
}
else
{
; /*数组下标不合法,不执行状态更新*/
}
return reVal;
}
/*
* 功能描述:设置指定ID自复式取消紧急停车按钮故障标志
* 参数说明:const UINT16 esbId, 紧急停车按钮ID
* const UINT8 cancelEsbErrFlag, 取消紧停按钮故障标志
* 返回值:无
*/
void SetCancelEsbErrFlag(const UINT16 esbId, const UINT8 cancelEsbErrFlag)
{
UINT16 bufIndex = 0U;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
if ((ESB_ERROR_FLAG_NO == cancelEsbErrFlag) || (ESB_ERROR_FLAG_YES == cancelEsbErrFlag))
{
EsbDataStru[bufIndex].CancelEsbErrorFlag = cancelEsbErrFlag; /*紧急停车按钮状态*/
}
else
{
; /*设置状态不合法,不进项状态更新*/
}
}
else
{
; /*数组下标不合法,不执行状态更新*/
}
}
/*
* 功能描述: 设置紧急关闭按钮按下周期
* 输入参数: const UINT16 esbId Esb ID
* const UINT32 startCycNum 周期号
* 输出参数:无
* 返回值 :无
*/
void SetEsbPressCycNum(const UINT16 esbId, const UINT32 startCycNum)
{
UINT16 bufIndex = 0U;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
EsbDataStru[bufIndex].EsbPressCycNum = startCycNum; /*紧急停车按钮状态*/
}
else
{
; /*数组下标不合法,不执行状态更新*/
}
}
/*
* 功能描述: 获取紧急关闭按钮按下周期
* 输入参数: const UINT16 esbId Esb ID
* 输出参数: 无
* 返回值 ESB按下周期
*/
UINT32 GetEsbPressCycNum(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT32 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
reVal = EsbDataStru[bufIndex].EsbPressCycNum;
}
else
{
/*下标非法,返回0*/
}
return reVal;
}
/*
* 功能描述: 设置取消紧急关闭按钮按下周期
* 输入参数: const UINT16 esbId Esb ID
* const UINT32 startCycNum 周期号
* 输出参数:无
* 返回值 :无
*/
void SetCancelEsbPressCycNum(const UINT16 esbId, const UINT32 startCycNum)
{
UINT16 bufIndex = 0U;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
EsbDataStru[bufIndex].CancelEsbPressCycNum = startCycNum; /*紧急停车按钮状态*/
}
else
{
; /*数组下标不合法,不执行状态更新*/
}
}
/*
* 功能描述: 获取取消紧急关闭按钮按下周期
* 输入参数: const UINT16 esbId Esb ID
* 输出参数: 无
* 返回值 : 取消紧急关闭按钮按下周期
*/
UINT32 GetCancelEsbPressCycNum(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT32 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
reVal = EsbDataStru[bufIndex].CancelEsbPressCycNum;
}
else
{
/*下标非法,返回0*/
}
return reVal;
}
/*
* 功能描述: 获取指定ID自复式取消紧急停车按钮有效标志
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取失败
* >0: 取消紧急停车按钮有效标志
*/
UINT8 GetCancelEsbValidFlag(const UINT16 esbId)
{
UINT16 bufIndex = 0U;
UINT8 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbDataStru[bufIndex].CancelEsbValidFlag;
}
else
{
; /*数组下标不合法,不执行状态更新*/
}
return reVal;
}
/*
* 功能描述:设置指定ID自复式取消紧急停车按钮有效标志
* 参数说明:const UINT16 esbId, 紧急停车按钮ID
* const UINT8 cancelEsbValidFlag, 取消紧停按钮有效标志
* 返回值:无
*/
void SetCancelEsbValidFlag(const UINT16 esbId, const UINT8 cancelEsbValidFlag)
{
UINT16 bufIndex = 0U;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
if ((ESB_CANCEL_VALID_NO == cancelEsbValidFlag) || (ESB_CANCEL_VALID_YES == cancelEsbValidFlag))
{
EsbDataStru[bufIndex].CancelEsbValidFlag = cancelEsbValidFlag; /*紧急停车按钮有效标志*/
}
else
{
; /*设置状态不合法,不进项状态更新*/
}
}
else
{
; /*数组下标不合法,不执行状态更新*/
}
}
/*
* 功能描述: 获取指定ID自复式紧急停车按钮故障标志
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧停按钮故障标志
*/
UINT8 GetEsbErrFlag(const UINT16 esbId)
{
UINT16 bufIndex = 0U;
UINT8 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (bufIndex < ESB_SUM_MAX)
{
reVal = EsbDataStru[bufIndex].EsbErrorFlag;
}
else
{
; /*数组下标不合法,不执行状态更新*/
}
return reVal;
}
/*
* 功能描述:设置指定ID自复式紧急停车按钮故障标志
* 参数说明:const UINT16 esbId, 紧急停车按钮ID
* const UINT8 cancelEsbErrFlag, 紧停按钮故障标志
* 返回值:无
*/
void SetEsbErrFlag(const UINT16 esbId, const UINT8 esbErrFlag)
{
UINT16 bufIndex = 0U;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
if ((ESB_ERROR_FLAG_NO == esbErrFlag) || (ESB_ERROR_FLAG_YES == esbErrFlag))
{
EsbDataStru[bufIndex].EsbErrorFlag = esbErrFlag; /*紧急停车按钮状态*/
}
else
{
; /*设置状态不合法,不进项状态更新*/
}
}
else
{
; /*数组下标不合法,不执行状态更新*/
}
}
/*
* 功能描述:设置取消紧急关闭按钮误触发按下周期
* 输入参数:const UINT16 esbId Esb ID
* const UINT32 startCycNum 周期号
* 输出参数:无
* 返回值 :无
* Created By LQ 2024.04.10
*/
void SetCancelEsbErrTrigPressCycNum(const UINT16 esbId, const UINT32 startCycNum)
{
UINT16 bufIndex = 0U;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
EsbDataStru[bufIndex].CancelEsbErrTriggerPressCycNum = startCycNum;
}
else
{
; /*数组下标不合法,不执行状态更新*/
}
}
/*
* 功能描述: 获取取消紧急关闭按钮误触发按下周期
* 输入参数: const UINT16 esbId Esb ID
* 输出参数: 无
* 返回值 : 取消紧急关闭按钮误触发按下周期
* Created By LQ 2024.04.10
*/
UINT32 GetCancelEsbErrTrigPressCycNum(const UINT16 esbId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT32 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
reVal = EsbDataStru[bufIndex].CancelEsbErrTriggerPressCycNum;
}
else
{
/*下标非法,返回0*/
}
return reVal;
}
/*
* 功能描述:设置取消紧急停车按钮采集继电器落下状态
* 参数说明:const UINT16 esbId 紧急停车按钮ID
* const UINT8 cRelayDownState 继电器落下状态
* 返回值:无
* Created By LQ 2024.04.10
*/
void SetCancelEsbRelayDownState(const UINT16 esbId, const UINT8 cRelayDownState)
{
UINT16 bufIndex = 0U;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
if ((ESB_RELAY_ERROR_DOWN_NO == cRelayDownState) || (ESB_RELAY_ERROR_DOWN_YES == cRelayDownState))
{
EsbDataStru[bufIndex].CancelEsbRelayDownState = cRelayDownState;
}
else
{
; /*设置状态不合法,不进项状态更新*/
}
}
else
{
; /*数组下标不合法,不执行状态更新*/
}
}
/*
* 功能描述: 获取取消紧急停车按钮采集继电器落下状态
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* 0x55: 正常落下
* 0xaa: 通信异常落下
* Created By LQ 2024.04.10
*/
UINT8 GetCancelEsbRelayDownState(const UINT16 esbId)
{
UINT16 bufIndex = 0U;
UINT8 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
reVal = EsbDataStru[bufIndex].CancelEsbRelayDownState;
}
else
{
; /*数组下标不合法,不执行状态更新*/
}
return reVal;
}
+317
View File
@@ -0,0 +1,317 @@
/********************************************************
*
* 文 件 名: ESBDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-20
* 作 者: 联锁组
* 功能描述: 紧急停车按钮数据管理头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _ESB_DATA_MANAGE_H_
#define _ESB_DATA_MANAGE_H_
#include "ESBDefine.h"
#include "ESBConfigDataManage.h"
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#ifdef __cplusplus
extern "C" {
#endif
/*紧急停车按钮数据结构体*/
typedef struct S_EsbDataStruct
{
UINT16 EsbId; /*紧急停车按钮ID (初始化字段)*/
UINT8 EsbState; /*紧急停车按钮状态 (动态字段)-ESS与PEP的融合状态*/
UINT8 EssState; /*Ess按钮状态 (动态字段)--虚拟属性才具备*/
UINT8 EsbActualState; /*ESB停车按钮状态--ATS抬起/按下状态(虚拟属性才具备)*/
UINT8 CutStatus; /*紧急停车按钮旁路状态*/
UINT8 EsbRelateRelayDriveState; /*紧急停车闪灯、稳灯和蜂鸣器继电器驱动状态机*/
UINT8 EssSteadyState; /*ESS稳灯状态(用于虚拟联锁向ATS反馈)--0x55 需要设置稳灯;0xaa不需要设置稳灯*/
UINT8 EssFlashState; /*ESS闪灯状态(用于虚拟联锁向ATS反馈)--0x55 需要设置闪灯;0xaa不需要设置闪灯*/
UINT8 EsbErrorFlag; /*自复式紧急停车按钮故障标志,0x55未故障,0xaa故障*/
UINT8 CancelEsbErrorFlag; /*自复式取消紧急停车按钮故障标志,0x55未故障,0xaa故障*/
UINT32 EsbPressCycNum; /*紧急关闭按钮按下周期*/
UINT32 CancelEsbPressCycNum; /*取消紧急关闭按钮正常按下周期*/
UINT32 CancelEsbErrTriggerPressCycNum; /*取消紧急关闭按钮误触发按下周期*/
UINT8 CancelEsbValidFlag; /*取消紧急关闭按钮有效标志,0x55无效,0xaa有效*/
UINT8 CancelEsbRelayDownState; /*取消紧急关闭按钮采集继电器落下状态,0x55:正常采集落下,0xaa:通信异常落下*/
} EsbDataStruct;
/*******************************全局变量声明*******************************/
extern EsbDataStruct EsbDataStru[ESB_SUM_MAX]; /*定义ESB数据结构体*/
/*
* 功能描述: 获取指定ESB数据
* 参数说明:
* 返回值
EsbDataStruct *
*/
EsbDataStruct *GetEsbData(void);
/*
* 功能描述: 获取指定ID紧急停车按钮状态
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮状态
*/
UINT8 GetEsbState(const UINT16 esbId);
/*
* 功能描述: 设置指定ID紧急停车按钮状态
* 参数说明: const UINT16 esbId, 紧急按钮ID
* const UINT8 esbState, 紧急按钮状态
* 返回值 0: 设置失败
* 1: 设置成功
*/
UINT8 SetEsbState(const UINT16 esbId, const UINT8 esbState);
/*
* 功能描述: 获取指定ID 紧急停车按钮旁路状态
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: spks按钮状态
*/
UINT8 GetEsbCutState(const UINT16 esbId);
/*
* 功能描述: 设置指定ID 旁路状态
* 参数说明: const UINT16 esbId, 紧急停车按钮
* const UINT8 esbCutState, 旁路状态
* 返回值
*
*/
void SetEsbCutState(const UINT16 esbId, const UINT8 esbCutState);
/*
* 功能描述: ESB状态初始化
* 参数说明: 无
* 返回值 0: 设置失败
* 1: 设置成功
*/
UINT8 EsbDataManageInit(void);
/*
* 功能描述: 设置指定ESB ID相关继电器驱动处理状态机
* 参数说明: const UINT16 esbId, 紧急停车按钮
* const UINT8 state, 状态机
* 返回值
* cgh-合并CID-2349-1
*/
void SetEsbRelateRelayDriveProState(const UINT16 esbId, const UINT8 state);
/*
* 功能描述: 获取指定ESB ID相关继电器驱动处理状态机
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: esb相关继电器驱动处理状态机
* cgh-合并CID-2349-1
*/
UINT8 GetEsbRelateRelayDriveProState(const UINT16 esbId);
/*
* 功能描述: 设置指定ESB ID对应的ESS稳灯状态
* 参数说明: const UINT16 esbId, 紧急停车按钮
* const UINT8 state, 状态机
* 返回值
* cgh-合并CID-2349-1
*/
void SetEsbRelateEssSteadyState(const UINT16 esbId, const UINT8 state);
/*
* 功能描述: 获取指定ESB ID对应的ESS稳灯状态
* 参数说明: const UINT16 esbId, 紧急停车按钮
* 返回值
* 备注:cgh-合并CID-2349-1
*/
UINT8 GetEsbRelateEssSteadyState(const UINT16 esbId);
/*
* 功能描述: 设置指定ESB ID对应的ESS闪灯状态
* 参数说明: const UINT16 esbId, 紧急停车按钮
* const UINT8 state, 状态机
* 返回值
* 备注:cgh-合并CID-2349-1
*/
void SetEsbRelateEssFlashState(const UINT16 esbId, const UINT8 state);
/*
* 功能描述: 获取指定ESB ID对应的ESS闪灯状态
* 参数说明: const UINT16 esbId, 紧急停车按钮
* 返回值
* 备注:cgh-合并CID-2349-1
*/
UINT8 GetEsbRelateEssFlashState(const UINT16 esbId);
/*
* 功能描述: 设置指定ID紧急停车按钮实际状态(根据ATS按钮状态设置-虚拟属性具备)
* 参数说明: const UINT16 esbId, 紧急按钮ID
* const UINT8 esbState, 紧急按钮状态
* 返回值 0: 设置失败
* 1: 设置成功
* cgh-合并CID-2349-1
*
*/
void SetEsbAutualState(const UINT16 esbId, const UINT8 EsbState);
/*
* 功能描述: 获取指定ID紧急停车ESB按钮状态(根据ATS按钮状态设置-虚拟属性具备)
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: ESS按钮状态
*备注:cgh-合并CID-2349-1
*/
UINT8 GetEsbAutualState(const UINT16 esbId);
/*
* 功能描述: 获取指定ID紧急停车ESS按钮状态
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: ESS按钮状态
*备注:cgh-合并CID-2349-1
*/
UINT8 GetEssState(const UINT16 esbId);
/*
* 功能描述: 设置指定IDESS按钮状态
* 参数说明: const UINT16 esbId, 紧急按钮ID
* const UINT8 EssState, ESS按钮状态
* 返回值 0: 设置失败
* 1: 设置成功
*备注:cgh-合并CID-2349-1
*/
void SetEssState(const UINT16 esbId, const UINT8 EssState);
/*
* 功能描述: 获取指定ID自复式取消紧急停车按钮故障标志
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 取消紧停按钮故障标志
*/
UINT8 GetCancelEsbErrFlag(const UINT16 esbId);
/*
* 功能描述:设置指定ID自复式取消紧急停车按钮故障标志
* 参数说明:const UINT16 esbId, 紧急停车按钮ID
* const UINT8 cancelEsbErrFlag, 取消紧停按钮故障标志
* 返回值:无
*/
void SetCancelEsbErrFlag(const UINT16 esbId, const UINT8 cancelEsbErrFlag);
/*
* 功能描述: 设置紧急关闭按钮按下周期
* 输入参数: const UINT16 esbId Esb ID
* const UINT32 startCycNum 周期号
* 输出参数:无
* 返回值 :无
*/
void SetEsbPressCycNum(const UINT16 esbId, const UINT32 startCycNum);
/*
* 功能描述: 获取紧急关闭按钮按下周期
* 输入参数: const UINT16 esbId Esb ID
* 输出参数: 无
* 返回值 ESB按下周期
*/
UINT32 GetEsbPressCycNum(const UINT16 esbId);
/*
* 功能描述: 设置取消紧急关闭按钮按下周期
* 输入参数: const UINT16 esbId Esb ID
* const UINT32 startCycNum 周期号
* 输出参数:无
* 返回值 :无
*/
void SetCancelEsbPressCycNum(const UINT16 esbId, const UINT32 startCycNum);
/*
* 功能描述: 获取取消紧急关闭按钮按下周期
* 输入参数: const UINT16 esbId Esb ID
* 输出参数: 无
* 返回值 : 取消紧急关闭按钮按下周期
*/
UINT32 GetCancelEsbPressCycNum(const UINT16 esbId);
/*
* 功能描述: 获取指定ID自复式取消紧急停车按钮有效标志
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取失败
* >0: 取消紧急停车按钮有效标志
*/
UINT8 GetCancelEsbValidFlag(const UINT16 esbId);
/*
* 功能描述:设置指定ID自复式取消紧急停车按钮有效标志
* 参数说明:const UINT16 esbId, 紧急停车按钮ID
* const UINT8 cancelEsbValidFlag, 取消紧停按钮有效标志
* 返回值:无
*/
void SetCancelEsbValidFlag(const UINT16 esbId, const UINT8 cancelEsbValidFlag);
/*
* 功能描述: 获取指定ID自复式紧急停车按钮故障标志
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧停按钮故障标志
*/
UINT8 GetEsbErrFlag(const UINT16 esbId);
/*
* 功能描述:设置指定ID自复式紧急停车按钮故障标志
* 参数说明:const UINT16 esbId, 紧急停车按钮ID
* const UINT8 cancelEsbErrFlag, 紧停按钮故障标志
* 返回值:无
*/
void SetEsbErrFlag(const UINT16 esbId, const UINT8 esbErrFlag);
/*
* 功能描述:设置取消紧急关闭按钮误触发按下周期
* 输入参数:const UINT16 esbId Esb ID
* const UINT32 startCycNum 周期号
* 输出参数:无
* 返回值 :无
* Created By LQ 2024.04.10
*/
void SetCancelEsbErrTrigPressCycNum(const UINT16 esbId, const UINT32 startCycNum);
/*
* 功能描述: 获取取消紧急关闭按钮误触发按下周期
* 输入参数: const UINT16 esbId Esb ID
* 输出参数: 无
* 返回值 : 取消紧急关闭按钮误触发按下周期
* Created By LQ 2024.04.10
*/
UINT32 GetCancelEsbErrTrigPressCycNum(const UINT16 esbId);
/*
* 功能描述:设置取消紧急停车按钮采集继电器落下状态
* 参数说明:const UINT16 esbId 紧急停车按钮ID
* const UINT8 cRelayDownState 继电器落下状态
* 返回值:无
* Created By LQ 2024.04.10
*/
void SetCancelEsbRelayDownState(const UINT16 esbId, const UINT8 cRelayDownState);
/*
* 功能描述: 获取取消紧急停车按钮采集继电器落下状态
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* 0x55: 正常落下
* 0xaa: 通信异常落下
* Created By LQ 2024.04.10
*/
UINT8 GetCancelEsbRelayDownState(const UINT16 esbId);
#ifdef __cplusplus
}
#endif
#endif
+62
View File
@@ -0,0 +1,62 @@
/********************************************************
*
* 文 件 名: ESBConfigDefine.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-03-20
* 作 者: 联锁组
* 功能描述: 紧急停车按钮配置头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _ESB_CONFIG_DEFINE_H_
#define _ESB_CONFIG_DEFINE_H_
/*紧急停车按钮总数最大值*/
#define ESB_SUM_MAX ((UINT16)200) /*定义ESB数量最大值*/
/*紧急按钮状态*/
#define ESB_STATE_VALID_NO ((UINT8)0x55) /*紧急无效*/
#define ESB_STATE_VALID_YES ((UINT8)0xaa) /*紧急有效*/
/*紧急按钮旁路状态*/
#define ESB_CUT_NO ((UINT8)0x55) /* 未旁路 */
#define ESB_CUT_YES ((UINT8)0xaa) /* 旁路 */
#define ESB_VIRTUAL_ATTR_YES ((UINT8)0x55) /*虚拟ESB*/
#define ESB_VIRTUAL_ATTR_NO ((UINT8)0xaa) /*非虚拟ESB*/
/*自复式紧急按钮故障标志*/
#define ESB_ERROR_FLAG_NO ((UINT8)0x55) /*自复式紧急按钮故障标志无效*/
#define ESB_ERROR_FLAG_YES ((UINT8)0xaa) /*自复式紧急按钮故障标志有效*/
#define ESB_CANCEL_VALID_NO ((UINT8)0x55) /*自复式取消紧急按钮标志无效*/
#define ESB_CANCEL_VALID_YES ((UINT8)0xaa) /*自复式取消紧急按钮标志有效*/
/*自复式取消紧急按钮继电器落下状态*/
#define ESB_RELAY_ERROR_DOWN_NO ((UINT8)0x55) /*正常落下*/
#define ESB_RELAY_ERROR_DOWN_YES ((UINT8)0xaa) /*通信异常落下*/
/*ESSATS-CI码位配置状态*/
#define ESS_MASK_YES ((UINT8)0x55U) /*有配置相关码位*/
#define ESS_MASK_NO ((UINT8)0xaaU) /*未配置相关码位*/
/*ESS去位/停位标志*/
#define ESB_STATE_GO_FLAG ((UINT8)0x55U) /*ESS去位*/
#define ESB_STATE_STOP_FLAG ((UINT8)0xaaU) /*ESS停位*/
/*ESS闪灯/稳灯状态*/
#define ESB_STATE_LIGHT_STATE_Y ((UINT8)0x55U) /*设置*/
#define ESB_STATE_LIGHT_STATE_N ((UINT8)0xaaU) /*未设置*/
/*ESB闪灯、稳灯和蜂鸣器相关继电器驱动状态机*/
#define ESB_PEPUP_ESSUP_INITION_STA ((UINT8)0x01U) /*ESB相关驱动继电器,初始位置状态机1*/
#define ESB_PEPDOWN_ESSUP_TWO_STATE ((UINT8)0x02U) /*ESB相关驱动继电器,PEP落下ESS去位,状态机2*/
#define ESB_PEPDOWN_ESSDOWN_THREE_STATE ((UINT8)0x03U) /*ESB相关驱动继电器,PEP落下ESS停位,状态机3*/
#define ESB_ONEPEPUP_ESSDOWN_FOUR_STATE ((UINT8)0x04U) /*ESB相关驱动继电器,PEP先按下的PEP落下ESS停位,状态机4*/
#define ESB_TWOPEPUP_ESSDOWN_FIVE_STATE ((UINT8)0x05U) /*ESB相关驱动继电器,ESS先按下的PEP落下ESS停位,状态机5*/
#define ESB_FAULT_SIX_STATE ((UINT8)0x06U) /*ESB相关驱动继电器,非正常操作的故障状态,状态机6*/
#endif
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,801 @@
/******************************************************************************
** 文件名: ELMDataPrepare.h
** 描 述: 列车包络管理模块运行时需要的外部数据准备头文件定义,为了实现模块独立而新增
*******************************************************************************/
#ifndef ELM_DATA_PREPARE_H_
#define ELM_DATA_PREPARE_H_
#include "CommonConfig.h"
#if (kPLATFORM==kWINDOWS)
#include <windows.h>
#include <stdio.h>
#endif
#include "EnvelopeDefine.h"
#include "CutoffPointDataManage.h"
#include "AxisAssertManageAPI.h"
#define ELM_AC_OCC (0x55u) /*计轴区段占用*/
#define ELM_AC_FREE (0xaau) /*计轴区段空闲*/
#define LOC_BEFORE (0x01u) /*位置在前方*/
#define LOC_SAME (0x02u) /*位置重合*/
#define LOC_AFTER (0x03u) /*位置在后方*/
#define ADJUST_UCT (0x02U) /*处理UCT包络*/
#define ELM_LOG_FATAL (0u) /** 维护日志--维护级别 */
#define ELM_LOG_ERROR (1u) /*维护日志--错误级别*/
#define ELM_LOG_WARING (2u) /*维护日志--警告级别*/
#define ELM_LOG_DEBUG (3u) /*维护日志--调试级别*/
#define ELM_LOG_LEVEL ELM_LOG_DEBUG /*维护日志--当前日志级别*/
#define ELM_PRINT_LEN (1280u) /* 维护日志打印打印长度 1024+256 */
#define ELM_BELONG_OWNER (0x55u) /* 属于本OC管辖 */
#define ELM_BELONG_OTHER (0xaau) /* 不属于本OC */
#define ELM_COM_STATUS_OK (0x55u) /* 通信状态正确 */
#define ELM_COM_STATUS_ERROR (0xaau) /* 通信状态错误 */
#define ELM_NO_CUT (0x00u) /* 包络未进行截取 */
#define ELM_HEAD_CUT (0x55u) /* 包络头进行截取 */
#define ELM_TAIL_CUT (0xaau) /* 包络尾进行截取 */
#define ELM_TRAIN_IN_WLS_AREA (0x55u) /** 列车位置在免筛区域 */
#define ELM_TRAIN_OUT_WLS_AREA (0xaau) /** 列车位置不在免筛区域 */
/** 日志打印函数 */
#define ELM_LOG_LOC(level,fmt,...) elm_PrintDebugInfo(level,fmt" line:%d fun:%s.\n",##__VA_ARGS__,__LINE__,__FUNCTION__);
#define ELM_LOG(level,fmt,...) elm_PrintDebugInfo(level,fmt,##__VA_ARGS__);
#if (kPLATFORM==kWINDOWS)
#define ELM_LOG_TIME(level,fmt,...) { \
SYSTEMTIME sys; \
GetLocalTime(&sys); \
elm_PrintDebugInfo(level,fmt" time:%02d:%02d:%02d.%03d.\n",##__VA_ARGS__,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds); \
}
#else
#define ELM_LOG_TIME(level,fmt,...) elm_PrintDebugInfo(level,fmt" time:%08d.\n",##__VA_ARGS__,TimeStamp);
#endif
#if (kPLATFORM!=kWINDOWS)
extern unsigned long TimeStamp;
#endif
extern UINT16 OutEnvelopeStrLen; /*需要打印的包络数据长度*/
extern UINT8 OutEnvelopeStr[MAX_ENVELOPE_LOG_NUM]; /*需要打印的包络数据*/
/** elm模块使用的安全位置接口体*/
typedef struct
{
LOD_STRU startPos; /*始端位置*/
LOD_STRU endPos; /*终端位置*/
}ELM_TrainSafeLocStruct;
/** elm模块使用的计轴区段位置接口体*/
typedef struct
{
UINT8 dir; /** 始端指向终端的方向*/
LOD_STRU startPos; /*始端位置*/
LOD_STRU endPos; /*终端位置*/
}ELM_AxisLocStruct;
/**
* @brief 打印包络信息
* @param[in] const EnvelopeStruct* PEnvelpe 包络指针
* @return 无
* @note 调用日志打印库函数进行日志打印
*/
void elm_PrintfEnvelope(const EnvelopeStruct* PEnvelpe);
/**
* @brief 打印Debug信息
* @param[in] UINT8 level 日志级别
* @param[in] const char *fmt 打印信息
* @return 无
* @note 通过调用外部接口,实现本模块的打印
*/
void elm_PrintDebugInfo(UINT8 level, const char *fmt, ...);
/**
* @brief 通过列车ID准备列车的安全包络信息
* @param[in] UINT16 trainID 列车ID
* @param[out] INOUT TrainSafeLocStruct* pTrainSafeLoc 列车安全包络
* @return CI_SUCCESS 需要操作的内存区正确,返回成功
* CI_ERROR 需要操作的内存区错误,返回失败
* @note
*/
UINT8 elm_PrepareTrainSafeLoc(UINT16 trainID,INOUT ELM_TrainSafeLocStruct* pTrainSafeLoc);
/**
* @brief 获取本OC范围有共管区内计轴区段的数组索引
* @param[out] OUT UINT16** pACIdBuff 计轴区段ID数缓存
* @return 0 查询错误
1~AXIS_SECTION_SUM_MAX 查询正确
* @note 由于OC支持计轴区段ID和索引的映射关系,故直接获取即可
*/
UINT16 elm_PrepareACBuffIndexs(OUT const UINT16** pACIdBuff);
/**
* @brief 通过计轴区段的数组索引获取计轴区段ID
* @param[in] UINT16 ACBuffIndex 计轴区段缓存索引
* @return 计轴区段ID
* @note 无
*/
UINT16 elm_PrepareACID(UINT16 ACBuffIndex);
/**
* @brief 通过计轴区段ID获取计轴区段的数组索引
* @param[in] UINT16 ACId 计轴区段ID
* @return 计轴区段缓存索引
* @note 无
*/
UINT16 elm_PrepareACIndex(UINT16 ACId);
/**
* @brief 通过计轴ID获取计轴状态
* @param[in] UINT16 ACID 计轴区段ID
* @return ELM_AC_OCC 计轴占用
ELM_AC_FREE 计轴空闲
* @note
*/
UINT8 elm_PrepareACStatus(UINT16 ACID);
/**
* @brief 通过计轴ID查询当属于岔区不连通时,所处物理区段占用情况
* @param[in] UINT16 ACID 计轴区段ID
* @return SECTION_OCCUPY_YES 物理区段占用
SECTION_OCCUPY_NO 物理区段空闲
*/
UINT8 elm_PrepareACofSwichPhyStatus(UINT16 ACID);
/**
* @brief 通过计轴区段ID查找计轴区段位置
* @param[in] UINT16 ACID 计轴区段ID
* @param[in] UINT8 chDir 起点指向终点的方向
* @param[out] ELM_AxisLocStruct* pACLoc 计轴区段位置
* @return CI_SUCCESS 查询正确,返回成功
* CI_ERROR 查询错误,返回失败
* @note
*/
UINT8 elm_PrepareACLoc(UINT16 ACID, UINT8 chDir, ELM_AxisLocStruct* pACLoc);
/**
* @brief 通过计轴区段ID和查询方向查询计轴包含的link
* @param[in] UINT16 ACID 计轴ID
* @param[out] UINT16 linkID[] 计轴包含的link
* @return 0 非法
非0 包含的link数量
* @note link返回时按照查询方向顺序返回
*/
UINT8 elm_PrepareACrelLink(UINT16 ACID,UINT8 dir, INOUT UINT16 linkID[]);
/**
* @brief 根据两点查询两点之间的link区段
* @param[in] LOD_STRU pointA 位置点A
* @param[in] LOD_STRU pointB 位置点B
* @param[out] UINT16 linkID[] 两点之间包含的link
* @return 两点之间的link数量
* @note pointA位置点的方向为指向pointB的方向
*/
UINT16 elm_PrepareLinkBtwPoints(LOD_STRU pointA,LOD_STRU pointB,INOUT UINT16 linkID[]);
/**
* @brief 根据两点查询两点之间的计轴区段
* @param[in] LOD_STRU pointA 位置点A
* @param[in] LOD_STRU pointB 位置点B
* @param[out] UINT16 ACID[] 两点之间包含的计轴区段
* @return 两点之间的计轴数量
* @note pointA位置点的方向为指向pointB的方向
*/
UINT8 elm_PrepareACBtwPoints(LOD_STRU pointA,LOD_STRU pointB,INOUT UINT16 ACID[SECTION_IN_ENVELOPE_SUM_MAX]);
/**
* @brief 获取当前OC所有的通信车列车ID
* @param[out] UINT16 trainID[TRAIN_SUM_MAX_IN_OC] 列车ID缓存
* @return OC范围内通信列车ID
* @note 无
*/
UINT8 elm_PrepareCommTrainID(INOUT UINT16 trainID[TRAIN_SUM_MAX_IN_OC]);
/**
* @brief 获取列车的通信状态
* @param[in] UINT16 trainid
* @param[out] 无
* @return ELM_COM_STATUS_OK 通信正常
* ELM_COM_STATUS_ERROR 通信异常
* @note 无
*/
UINT8 elm_PrepareTrainCommStatus(IN UINT16 trainID);
/**
* @brief 获取通信正常的列车位置是否有效
* @param[in] UINT16 trainid
* @param[out] 无
* @return CI_SUCCESS 位置有效
* CI_ERROR 位置无效
* @note 无
*/
UINT8 elm_PrepareTrainPosValid(IN UINT16 trainID);
/**
* @brief 获取两点的位置关系
* @param[in] LOD_STRU pointA 位置A
* @param[in] UINT8 dirAtoB 位置A指向位置B
* @param[in] LOD_STRU pointB 位置B
* @return LOC_BEFORE 位置B在位置A前
LOC_SAME 位置A与位置B重合
LOC_AFTER 位置A在位置B后
其他 非法
* @note
*/
UINT8 elm_PrepareRelationBtwPoint(LOD_STRU pointA,UINT8 dirAtoB, LOD_STRU pointB);
/**
* @brief 查询计轴前/后方计轴
* @param[in] UINT16 ACID 基准计轴ID
* @param[in] UINT8 dir 查询方向
* @param[out] UINT16 arACID[AC_MAXCNT_IN_SWITCH] 相邻计轴ID
* param[out] UINT8* DirectionPointFlag 是否有方向变化点 DIRECTIONPOINT_FLAG_VALID
* @return UINT8_MAX 查询失败
0~AC_MAXCNT_IN_SWITCH 查询成功
*/
UINT8 elm_PrepareAdjacentAC(UINT16 ACID, UINT8 dir, INOUT UINT16 arACID[AC_MAXCNT_IN_SWITCH], UINT8* DirectionPointFlag);
/**
* @brief 合并UINT16数组
* @param[in] UINT16 dstBuffSize 目的缓冲区大小
* @param[in] UINT16 startIndex 目的缓冲区拷贝起始地址
* @param[in] const UINT16 srcArray[] 源缓冲区地址
* @param[in] UINT16 srcBuffSize 源缓冲区大小
* @param[in] UINT16 mergeSize 合并大小
* @param[out] UINT16 dstArray[] 目的缓冲区
* @return 目的合并后的索引地址
* @note 如果合并失败,返回目的缓冲区大小
*/
UINT16 elm_PrepareMergeUINT16Array(INOUT UINT16 dstArray[], UINT16 dstBuffSize, UINT16 startIndex, IN const UINT16 srcArray[], UINT16 srcBuffSize,UINT16 mergeSize);
/**
* @brief 比较两个包络的前后关系
* @param[in] const EnvelopeStruct pEnvelopeA 包络A
* @param[in] LOD_STRU* strPointA 基准包络起点
* @param[in] const EnvelopeStruct* pEnvelopeB 包络B
* @return 0x01 包络A在包络B前
0x02 包络B在包络A前
0x03 包络A包含与包络B,包括如下关系:(() )、( ()) 和( ()
0x04 包络B包含与包络A,包括如下关系:(() )、( ()) 和( ()
0x00 无法比较位置关系
* @note 无
*/
UINT8 elm_PrepareRelationBtwEnvelope(IN const EnvelopeStruct* pEnvelopeA, const LOD_STRU strPointBase, IN const EnvelopeStruct* pEnvelopeB);
/**
* @brief 判断数值是否存在UINT16数值中
* @param[in] UINT16 targetValue 待查询的值
* @param[in] const UINT16 arValue[] 冲突范围
* @param[in] UINT16 buffsize冲突范围大小
* @return CI_SUCCESS 指定值在冲突范围内
* CI_ERROR 指定值不在冲突范围内
* @note 无
*/
UINT8 elm_PrepareInUINT16Array(UINT16 targetValue,const UINT16 arValue[],UINT16 buffsize);
/**
* @brief 通过两点获取两点之间的距离
* @param[in] LOD_STRU pointA 位置A
* @param[in] LOD_STRU pointB 位置B
* @return 两点之间的距离(cm
* @note pointA为起点 pointB为终点
*/
UINT32 elm_PrepareDistanceBtwPoints(LOD_STRU pointA, LOD_STRU pointB);
/**
* @brief 通过列车ID获取列车车长
* @param[in]
* @param[out]
* @return 列车车长(cm
* @note 1、如果查询成功,返回列车车长,否则返回线路上最短车长
*/
UINT32 elm_PrepareTrainLength(UINT16 trainid);
/**
* @brief 获取列车运行方向
* @param[in] UINT16 trainid 列车ID
* @param[out] 无
* @return ELM_DIR_SAME 处理成功
* ELM_DIR_CONVERT 处理失败
其他,非法
* @note
*/
UINT8 elm_PrepareTrainDir(UINT16 trainid);
/**
* @brief 查询列车最小安全前前方计轴
* @param[in] UINT16 trainid 列车ID
* @param[out] UINT16 acID[AC_MAXCNT_IN_SWITCH] 计轴数量
* @return 查找成功的计轴数量
* @note
*/
UINT8 elm_PrepareNextAcMinSafeHeadLoc(UINT16 trainid, OUT UINT16 acID[AC_MAXCNT_IN_SWITCH]);
/**
* @brief 获取列车最大安全前位置
* @param[in] UINT16 trainid 列车ID
* @param[out] LOD_STRU *pLoc 列车位置
* @return CI_SUCCESS 查询成功
* CI_ERROR 查询失败
* @note 无
*/
UINT8 elm_PrepareMaxSafeHeadLoc(UINT16 trainid, OUT LOD_STRU *pLoc);
/**
* @brief 获取列车最小安全前位置
* @param[in] UINT16 trainid 列车ID
* @param[out] LOD_STRU *pLoc 列车位置
* @return CI_SUCCESS 查询成功
* CI_ERROR 查询失败
* @note 无
*/
UINT8 elm_PrepareMinSafeHeadLoc(UINT16 trainid, OUT LOD_STRU *pLoc);
/**
* @brief 获取列车最大安全前所属计轴
* @param[in] UINT16 trainid 列车ID
* @return 计轴ID
* @note 无
*/
UINT16 elm_PrepareACOfMaxSafeHeadLoc(UINT16 trainid);
/**
* @brief 获取列车最小安全前所属计轴
* @param[in] UINT16 trainid 列车ID
* @return 计轴ID
* @note 无
*/
UINT16 elm_PrepareACOfMinSafeHeadLoc(UINT16 trainid);
/**
* @brief 查询列车最大安全后后方计轴
* @param[in] UINT16 trainid 列车ID
* @param[out] UINT16 acID[AC_MAXCNT_IN_SWITCH] 计轴数量
* @return 查找成功的计轴数量
* @note
*/
UINT8 elm_PrepareNextAcMaxSafeTailLoc(UINT16 trainid, OUT UINT16 acID[AC_MAXCNT_IN_SWITCH]);
/**
* @brief 获取列车最大安全后位置
* @param[in] UINT16 trainid 列车ID
* @param[out] LOD_STRU *pLoc 列车位置
* @return CI_SUCCESS 查询成功
* CI_ERROR 查询失败
* @note 无
*/
UINT8 elm_PrepareMaxSafeTailLoc(UINT16 trainid, OUT LOD_STRU *pLoc);
/**
* @brief 获取列车最小安全后位置
* @param[in] UINT16 trainid 列车ID
* @param[out] LOD_STRU *pLoc 列车位置
* @return CI_SUCCESS 查询成功
* CI_ERROR 查询失败
* @note 无
*/
UINT8 elm_PrepareMinSafeTailLoc(UINT16 trainid, OUT LOD_STRU *pLoc);
/**
* @brief 获取列车最大安全后所属计轴
* @param[in] UINT16 trainid 列车ID
* @return 计轴ID
* @note 无
*/
UINT16 elm_PrepareACOfMaxSafeTailLoc(UINT16 trainid);
/**
* @brief 获取列车最小安全后所属计轴
* @param[in] UINT16 trainid 列车ID
* @return 计轴ID
* @note 无
*/
UINT16 elm_PrepareACOfMinSafeTailLoc(UINT16 trainid);
/**
* @brief 获取列车的休眠状态
* @param[in] UINT16 trainid 列车ID
* @param[out] 无
* @return TRAIN_SLEEP_YES 处于休眠状态
TRAIN_SLEEP_NO 未处于休眠状态
其他非法
* @note
*/
UINT8 elm_PrepareTrainSleepStatus(UINT16 trainid);
/**
* @brief 获取计轴区段是否属于本OC
* @param[in] UINT16 acID 计轴区段ID
* @param[out] UINT8 *pOCId 所属OCid
* @return ELM_BELONG_OTHER 属于相邻OC
ELM_BELONG_OWNER 属于本OC
其他,非法
* @note 无
*/
UINT8 elm_PrepareACIsSelf(UINT16 acID,UINT8 *pOCId);
/**
* @brief 获取包络是否完全属于本OC
* @param[in] const EnvelopeStruct* Ptemp
* @param[out] 无
* @return ELM_BELONG_OTHER 属于相邻OC
ELM_BELONG_OWNER 属于本OC
其他,非法
* @note 无
*/
UINT8 elm_PrepareEnvelopeIsSelf(IN const EnvelopeStruct* ptemp);
/**
* @brief 获取[A,B]范围内完全属于本OC的范围[A',B']
* @param[in] 无
* @param[out] LOD_STRU *pointA 截取到分界点
* @param[out] LOD_STRU *pointB 截取到分界点
* @param[out] UINT8* cutFlag 截取标志
* @return ELM_BELONG_OTHER 属于相邻OC
ELM_BELONG_OWNER 属于本OC
其他,非法
* @note 无
*/
UINT8 elm_PrepareCutZoneInSelf(INOUT LOD_STRU *pointA,INOUT LOD_STRU *pointB, INOUT UINT8* cutFlag);
/**
* @brief 获取本OC通信的OCid
* @param[in] UINT8 **pOCIDbuff OCid缓存
* @return 本OC通信数量
* @note 无
*/
UINT8 elm_PrepareComOCID(IN const UINT8 **pOCIDbuff);
/**
* @brief 获取OC的通信状态
* @param[in] UINT8 OCID
* @return ELM_COM_STATUS_ERROR 通信状态错误
ELM_COM_STATUS_OK 通信状态正确
* @note
*/
UINT8 elm_PrepareOCCommStatus(UINT8 OCID);
/**
* @brief 获取位置点所属OC
* @param[in] const LOD_STRU *pointA 点A的位置
* @param[out] UINT8 *pOCId 所属OC
* @return ELM_BELONG_OTHER 属于相邻OC
ELM_BELONG_OWNER 属于本OC
其他,非法
* @note
*/
UINT8 elm_PreparePointIsSelf(IN const LOD_STRU *pointA,UINT8 *pOCId);
/**
* @brief 获取相邻OC发送的包络信息
* @param[in] UINT8 OCid OCid
* @param[out] CfpEnvelopeStruct *pInfEnvelope 接口包络信息
* @return
* @note
*/
UINT8 elm_PrepareNextOcInfEnvelope(UINT8 OCid,CfpEnvelopeStruct *pInfEnvelope);
/**
* @brief 获取计轴对应的诊断信息地址
* @param[in]
* @param[out]
* @return
* @note
*/
const AxisAsserStruct* elm_PrepareAxisAssertInfoPtr(UINT16 ACID);
/**
* @brief 获取安全位置的道岔位置是否不符合拓扑关系且占用标志
* @param[in] 列车ID
* @param[out]
* @return CI_SUCCESS 符合拓扑关系或不占用
* CI_ERROR 不符合拓扑关系且占用
* @note
*/
UINT8 elm_PrepareTrainSafeHeadFlag(UINT16 trainId);
/**
* @brief 获取计轴关联的物理区段ID
* @param[in] UINT16 ACID 计轴区段Id
* @param[out] 无
* @return 0 查询失败
>0 查询成功
* @note
*/
UINT16 elm_PrepareACRelPhyId(UINT16 ACID);
/**
* @brief 获取计轴故障诊断状态
* @param[in] 计轴ID
* @param[out] 无
* @return AAM_API_AC_ARB 计轴ARB
AAM_API_AC_REDUNARB 计轴ARB冗余
AAM_API_AC_UT 计轴UT
AAM_API_AC_REDUNUT 计轴UT冗余
* @note
*/
UINT8 elm_PrepareACAssertStatus(UINT16 ACID);
/**
* @brief 获取计轴故障诊断状态
* @param[in] UINT16 ACID 计轴ID
* @param[out] 无
* @return AAM_UT_PASS 坏车通过
AAM_CT_PASS 好车通过
* @note
*/
UINT8 elm_PrepareACPassTrainFlag(UINT16 ACID);
/**
* @brief 判断计轴是否为岔区
* @param[in] UINT16 ACID 计轴ID
* @param[out]
* @return CI_SUCCESS 为岔区
* CI_ERROR 不为岔区
* @note
*/
UINT8 elm_PrepareACIsSwitchZone(UINT16 ACID);
/**
* @brief 判断计轴所属岔区是否符合拓扑关系
* @param[in] UINT16 ACID 计轴ID
* @param[out] 无
* @return CI_SUCCESS 计轴所属岔区符合拓扑关系
* CI_ERROR 计轴所属岔区不符合拓扑关系
* @note 注,如果传入计轴不属于岔区,则返回符合拓扑关系
*/
UINT8 elm_PrepareCheckACofSwichPos(UINT16 ACID);
/**
* @brief 清除岔区的好车通过标志位
* @param[in] UINT16 ACID 计轴ID
* @param[out] 无
* @return 无
* @note 无
*/
void elm_PrepareClearSwPassTrainFlag(UINT16 ACID);
/**
* @brief 获取计轴所属物理区段的占用状态
* @param[in] UINT16 ACID 计轴ID
* @param[out] 无
* @return SECTION_OCCUPY_YES 物理区段占用
SECTION_OCCUPY_NO 物理区段空闲
* @note
*/
UINT8 elm_PrepareACRelPhyStatus(UINT16 ACID);
/**
* @brief 获取飞车宕机冗余宕机时间
* @param[in] 无
* @param[out] 无
* @return 冗余时间
* @note
*/
UINT8 elm_PrepareCTFlyingRedunTime(void);
/**
* @brief 对外接口:获取计轴关联的物理区段是否存在好车通过计轴区段
* @param[in] UINT16 acID
* @param[out] 无
* @return AAM_CT_PASS 物理区段好车通过
AAM_UT_PASS 物理区段坏车通过
*/
UINT8 elm_PreparACRelPhyPasTrainFlag(UINT16 acID);
/**
* @brief 根据两点与道岔状态查询两点之间的计轴区段
* @param[in] LOD_STRU pointA 位置点A
* @param[in] LOD_STRU pointB 位置点B
* @param[out] UINT16 ACID[] 两点之间包含的计轴区段
* @return 两点之间的计轴数量
* @note pointA位置点的方向为指向pointB的方向
* creat by lxc 2022/6/17
*/
UINT8 elm_PrepACBtwPointsBySwitchSta(LOD_STRU pointA, LOD_STRU pointB, INOUT UINT16 ACID[MAX_AC_IN_TRAIN]);
/**
* @brief 判断UINT16数组是否存在UINT16数值中
* @param[in] const UINT16 szSrcArray[] 源数数组
* @param[in] const UINT16 wSrcArrayLen 长度
* @param[in] const UINT16 szDstArray[] 待判断的数组
* @param[in] const UINT16 wDstArrayLen 长度
* @return CI_SUCCESS 指定值在冲突范围内
* CI_ERROR 指定值不在冲突范围内
* @note 无
*/
UINT8 elm_PrepareUINT16ArrayInArray(const UINT16 szSrcArray[], const UINT16 wSrcArrayLen, const UINT16 szDstArray[], const UINT16 wDstArrayLen);
/**
* @brief 获取UCT功能开关
* @param[in] 无
* @param[out] 无
* @return CI_SUCCESS 功能打开
* CI_ERROR 功能关闭
* @note 无
*/
UINT8 elm_PrepareUCTSwitch(void);
/**
* @brief 获取本控区分界点计轴区段
* @param[out] UINT16 szAcId[CUTOFF_POINT_SUM_MAX]
* @return 0~CUTOFF_POINT_SUM_MAX-1 分界点计轴区段数量
CUTOFF_POINT_SUM_MAX 失败
* @note 无
*/
UINT8 elm_PrepareCfpAc(UINT16 szAcId[CUTOFF_POINT_SUM_MAX]);
/**
* @brief 获取计轴区段相邻控区的相邻计轴区段,并返回相邻控区驶向本控区的方向
* @param[in] const UINT16 wBaseAc 基准计轴区段
* @param[out] UINT8 * pDir 进入到本方区域的方向
* @param[out] pFindAc[AC_MAXCNT_IN_SWITCH] 相邻计轴区段
* pDirChangePointFlag 方向变化点标志
* @return UINT8_MAX 查询失败
0~AC_MAXCNT_IN_SWITCH 查询成功
* @note 无
*/
UINT8 elm_PrepareCfpOtherTiocAc(const UINT16 wBaseAc, UINT8* pDir, UINT16 pFindAc[AC_MAXCNT_IN_SWITCH], UINT8* pDirChangePointFlag);
/**
* @brief 获取列车位置位置所在区域是否具备免筛属性
* @param[in] UINT16 trainID 列车ID
* @param[out] 无
* @return ELM_TRAIN_IN_WLS_AREA 列车在免筛区域;ELM_TRAIN_OUT_WLS_AREA 列车不在免筛区域
* @note 无
*/
UINT8 elm_PrePareTrainLOCAreaType(UINT16 trainID);
/**
* @brief 获取列车包络是否可以转为UCT包络
* @param[in] UINT16 trainID 列车ID
* @param[out] 无
* @return 0x55:列车包络不可转为UCT包络;0xaa:列车包络可转为UCT包络
* @note 无
*/
UINT8 elm_PrePareTrainCanUct(UINT16 trainID);
/**
* @brief 获取列车激活端
* @param[in] UINT16 trainID 列车ID
* @param[out] 无
* @return UINT8 激活端
* @note 无
*/
UINT8 elm_PrepareTrainACT(UINT16 trainID);
/**
* @brief 判断两点是否同向
* @param[in] LOD_STRU strPointA
* @param[in] LOD_STRU strPointB
* @return CI_ERROR:比较失败;FLAG_SET:同向;FLAG_UNSET:不同向
* @note 无
*/
UINT8 elm_PrepareTwoPointsSameDir(const LOD_STRU strPointA, const LOD_STRU strPointB);
/**
* @brief 获取列车最小安全前方向
* @param[in] UINT16 wTrainId 列车编号
* @return 最小安全前方向
* @note 无
*/
UINT8 elm_PrepareTrainMinHeadDir(const UINT16 wTrainId);
/**
* @brief 获取列车最大安全后方向
* @param[in] UINT16 wTrainId 列车编号
* @return 最大安全后方向
* @note 无
*/
UINT8 elm_PrepareTrainMaxTailDir(const UINT16 wTrainId);
/**
* @brief 获取两点间方向变化点数量
* @param[in] LOD_STRU* pLODAStru
* @param[in] LOD_STRU* pLODBStru
* @return 方向变化点数量
* @note 无
*/
UINT8 elm_PrepareDirChangNum(const LOD_STRU* pLODAStru, const LOD_STRU* pLODBStru);
/**
* @brief 根据方向变化点数量转换方向
* @param[in] UINT8 Dir 方向
* @param[in] UINT8 wChangeNum 方向变化点数量
* @return 转换后的方向
* @note 无
*/
UINT8 elm_PrepareDirByChangeNum(UINT8 Dir, UINT8 wChangeNum);
/**
* @brief 通过计轴区段ID查找前方对应计轴器:
* @param[in] UINT16 ACID 计轴区段ID
* @param[in] UINT8 chDir 起点指向终点的方向
* @param[out] UINT16* AxisId 前方查询计轴器Id
* @return CI_SUCCESS 查询正确,返回成功
* CI_ERROR 查询错误,返回失败
* Create: fan 2024 3.2
*/
UINT8 elm_PrepareACHeadAxisId(UINT16 ACID, UINT8 chDir, UINT16* AxisId);
/**
* @brief 通过计轴区段ID查找后方对应计轴器:
* @param[in] UINT16 ACID 计轴区段ID
* @param[in] UINT8 chDir 起点指向终点的方向
* @param[out] UINT16* AxisId 后方查询计轴器Id
* @return CI_SUCCESS 查询正确,返回成功
* CI_ERROR 查询错误,返回失败
* Create: fan 2024 3.2
*/
UINT8 elm_PrepareACTailAxisId(UINT16 ACID, UINT8 chDir, UINT16* AxisId);
/**
* @brief 判断是否满足前筛通过条件(降低复杂度)
* @param[in]UINT16 wTrainId 列车ID
* @param[in]const LOD_STRU trainPos 列车安全端位置
* @param[in]const LOD_STRU ACpos 计轴对应端点位置
* @param[out] UINT32* errorCode 故障记录
* @return CI_SUCCESS 满足前筛条件 CI_ERROR不满足
* ADJUST_UCT 不满足筛选但需要处理UCT包络
* Create: fan 2024 4.1
*/
UINT8 elm_PrepareHeadScreenCheck(UINT16 wTrainId, const LOD_STRU trainPos, const LOD_STRU ACpos, UINT32* errorCode);
/**
* @brief 判断是否满足后筛通过条件(降低复杂度)
* @param[in]UINT16 wTrainId 列车ID
* @param[in]const LOD_STRU trainPos 列车安全端位置
* @param[in]const LOD_STRU ACpos 计轴对应端点位置
* @param[out] UINT32* errorCode 故障记录
* @return CI_SUCCESS 满足筛选条件 CI_ERROR不满足
* ADJUST_UCT 不满足筛选但需要处理UCT包络
* Create: fan 2024 4.1
*/
UINT8 elm_PrepareTailScreenCheck(UINT16 wTrainId, const LOD_STRU trainPos, const LOD_STRU ACpos, UINT32* errorCode);
#endif /*ELM_DATA_PREPARE_H_*/
@@ -0,0 +1,155 @@
/******************************************************************************
** 文件名: EnvelopeDefine.h
** 描 述: 列车包络管理模块相关定义头文件,列车包络管理模块简称elm
*******************************************************************************/
#ifndef ENVELOPE_DEFINE_H_
#define ENVELOPE_DEFINE_H_
#include "../Section/SectionDefine.h"
#include "CommonTypes.h"
#include "dquVobcCommonStru.h"
#include "dsuEmapDefine.h"
#include "CiSystemDefine.h"
#include "CommonMemory.h"
#include "TrainDefine.h"
#ifdef WIN32
#define ELM_DEBUG 1
#endif
/** ===========================宏定义================================== */
#define LINE_MAX_TRAIN (255u) /* 线路上最大的列车数量,也为隐藏车ID(开区间) */
#define TRAIN_SUM_MAX_IN_OC (40u) /*OC控区包含的列车数量(开区间)*/
#define RESERVE_SUM_MAX (10u) /*预留的包络个数*/
#define ENVELOPE_SUM_MAX (AXIS_SECTION_SUM_MAX + TRAIN_SUM_MAX_IN_OC + RESERVE_SUM_MAX) /*列车包络最大个数(开区间)*/
#define TRAIN_IN_ENVELOPE_SUM_MAX (15u) /*列车包络中包含的列车最大数量(开区间)*/
#define SECTION_IN_ENVELOPE_SUM_MAX (10u) /*列车包络中包含的区段最大个数(开区间)*/
#define SECTION_REL_ENVELOPE_SUM_MAX (15u) /*区段关联的包络最大个数(开区间)*/
#define TRAIN_REL_ENVELOPE_SUM_MAX (15u) /*列车关联的包络最大个数(开区间)*/
#define MAX_ENVELOPE_LOG_NUM (10000U) /*包络日志打印缓存大小*/
#define ENVELOPE_UNEXIT (0x00u) /*包络地址空间未使用,即包络不存在*/
#define ENVELOPE_EXIT (0xaau) /*包络地址空间已使用,即包络存在*/
#define TYPE_CT_ENVELOPE (1u) /*通信车车包络*/
#define TYPE_UCT_ENVELOPE (2u) /*丢失通信车包络*/
#define TYPE_UKT_ENVELOPE (3u) /*隐藏车包络*/
#define ENVELOPE_UNVAILD_INDEX (0u) /*无效的包络ID*/
#define OP_ADD (0x55u) /*操作方式为增加*/
#define OP_DEL (0xaau) /*操作方式为删除*/
#define ELM_WORK_OK (0x55u) /*包络管理模块可正常处理*/
#define ELM_WORK_ERROR (0xaau) /*包络管理模块不可正常处理*/
#define ELM_NO_SHUTDOWN (0x55u) /*包络管理模块不需要宕机*/
#define ELM_NEED_SHUTDOWN (0xaau) /*包络管理模块需要宕机*/
#define ELM_BODY (0x00u) /*包络体*/
#define ELM_HEAD (0x55u) /*包络头*/
#define ELM_TAIL (0xaau) /*包络尾*/
#define ELM_HEAD_AND_TAIL (0xccu) /** 包络头和尾 */
#define ELM_TRUE (1u == 1u) /*真值*/
#define ELM_FALSE (0u == 1u) /*假值*/
#define ELM_DIR_SAME EMAP_SAME_DIR /* 包络方向相同 */
#define ELM_DIR_CONVERT EMAP_CONVER_DIR /* 包络方向不相同 */
#define AC_MAXCNT_IN_SWITCH (5u)
#define SHUT_DOWN_ALARM_TIME (5u) /*飞车宕机报警五个周期 第五周期超参数 报警完就宕*/
/** ===========================宏函数定义================================== */
/* 函数返回--会导致函数出口不唯一,仅用于入口参数判断 */
#define ASSERT_RET_NO_VALUE(condition,errorCode) if((condition)) { \
ELM_LOG_LOC(0u,"errno:0x%08x info:Input error.",errorCode);\
return; \
} \
else { \
/** 继续处理*/ \
}
/* 函数返回--会导致函数出口不唯一,仅用于入口参数判断 */
#define ASSERT_RET_VALUE(condition,ret,errorCode) if((condition)) { \
ELM_LOG_LOC(0u,"errno:0x%08x info:Input error.",errorCode);\
return (ret);\
}\
else { \
/** 继续处理*/ \
}
/*循环终止,条件为真时跳出循环*/
#define ASSERT_BREAK(condition,err,errNo) if((condition)) { \
(err) = (err) + (errNo); \
break; \
} \
else { \
/** 无问题*/ \
}
/*返回值设置,条件为真时,返回值为CI_SUCCESS,否则为CI_ERROR*/
#define ASSERT_SETRET(condition,ret,retOK,retError) if((condition)) { \
(ret) = (retOK); \
} \
else { \
(ret) = (retError); \
}
/*错误码设置*/
#define ASSER_ERROR(condition,err,errNo) if((condition)) { \
(err) = (err) + (errNo); \
} \
else { \
/** 无问题*/ \
}
/* 错误打印 */
#define ASSER_DEBUG(condition,fun) if((condition)) { \
fun; \
} \
else { \
/** 无问题*/ \
}
/** ===========================结构体定义================================== */
/** 列车包络结构定义 特别需要注意:如果此结果体变化,一定要注意修改跟随函数*/
typedef struct{
UINT8 exitFlag; /*包络存在标识*/
UINT8 envelopeType; /*包络类型*/
UINT16 id; /*包络标识*/
UINT16 headTrainID; /*包络前端列车ID*/
UINT16 tailTrainID; /*包络后端列车ID*/
LOD_STRU startPos; /*始端位置*/
LOD_STRU endPos; /*终端位置*/
UINT8 trianCnt; /*包络中包含的列车数量*/
UINT16 trainID[TRAIN_IN_ENVELOPE_SUM_MAX]; /*包络中包含的列车ID*/
UINT8 ACTPort[TRAIN_IN_ENVELOPE_SUM_MAX]; /*包络中列车激活端 */
UINT8 ACCnt; /*包含的AC数量*/
UINT16 ACID[SECTION_IN_ENVELOPE_SUM_MAX]; /*包含的AC ID*/
UINT32 dwUCTToUKTStartCycNum; /*UCT转UKT起始周期,根据全线通信车确定*/
} EnvelopeStruct;
/** 定义接口使用的包络*/
typedef struct{
UINT8 envelopeType; /*包络类型*/
UINT16 id; /*列车ID*/
UINT8 suspicHead; /*前端可疑*/
UINT8 suspicTail; /*后端可疑*/
LOD_STRU startPos; /*始端位置*/
LOD_STRU endPos; /*终端位置*/
UINT8 trianCnt; /*包络中包含的列车数量*/
UINT16 trainID[TRAIN_IN_ENVELOPE_SUM_MAX]; /*包络中包含的列车ID*/
} InfEnvelopeStruct;
#endif /*ENVELOPE_DEFINE_H_*/
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,489 @@
/******************************************************************************
** 文件名: EnvelopeLogicProcess.h
** 描 述: 实现包络逻辑处理(主要实现包络管理函数的声明)
*******************************************************************************/
#ifndef ENVELOPE_LOGIC_PROCESS_H_
#define ENVELOPE_LOGIC_PROCESS_H_
#include "EnvelopeDefine.h"
#include "ELMDataPrepare.h"
#include "EnvelopeManage.h"
/**
* @brief 获取指定计轴范围范围内的包络信息
* @param[in] const UINT16 acID[] 计轴区段数组
* @param[in] UINT8 acCnt 计轴区段数量
* @param[out] UINT16 envelopeID[TRAIN_SUM_MAX_IN_OC] 包络ID存储区
* @return TRAIN_SUM_MAX_IN_OC 执行错误
0 ~ TRAIN_SUM_MAX_IN_OC 执行成功
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
UINT8 elm_MergeEnvelope(IN const UINT16 acID[], UINT8 acCnt, INOUT UINT16 envelopeID[TRAIN_SUM_MAX_IN_OC]);
/**
* @brief 获取包络相邻的包络
* @param[in] UINT16 envelopeId
* @param[out] UINT16 *preEnvelope 包络前方id
* @param[out] UINT16 *backEnvelope 包络后方id
* @return CI_ERROR 查询失败
CI_SUCCESS 查询成功
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
UINT8 elm_GetNearestEnvelope(UINT16 envelopeId,OUT UINT16 *preEnvelope,OUT UINT16 *backEnvelope);
/**
* @brief 增加UKT包络
* @param[in] UINT16 ACIndex 计轴区段索引
* @param[in] LOD_STRU startPoint 起点位置
* @param[in] LOD_STRU endPoint 终点位置
* @return CI_SUCCESS 需要操作的内存区正确,返回成功
* CI_ERROR 需要操作的内存区错误,返回失败
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
UINT8 elm_AddUKTEnvelope(UINT16 ACIndex, LOD_STRU startPoint, LOD_STRU endPoint);
/**
* @brief 删除指定UKT包络
* @param[in] const EnvelopeStruct* pEnvelope 待删除的包络
* @return CI_SUCCESS 需要操作的内存区正确,返回成功
* CI_ERROR 需要操作的内存区错误,返回失败
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
UINT8 elm_DeleteUKTEnvelope(IN const EnvelopeStruct* pEnvelope);
/**
* @brief 删除计轴上关联的包络
* @param[in] UINT8 acBelongFlag 计轴所属OC标志
* @param[in] UINT16 AcID 计轴ID
* @return CI_ERROR 处理错误
CI_SUCCESS 处理正确
* @note
* 1、此函数只能接受删除非本OC范围的计轴区段,否则返回失败
* 2、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
UINT8 elm_DeleteACRelEnvelope(UINT8 acBelongFlag,UINT16 AcID);
/**
* @brief 计轴上添加故障包络
* @param[in] UINT16 acID
* @param[out]
* @return CI_ERROR 处理失败
CI_SUCCESS 处理成功
* @note
* 1、此函数实现在占用且无包络的计轴上添加故障包络
* 2、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
UINT8 elm_AddUKTEnvelopeInAC(UINT16 acID);
/**
* @brief 清除UCT或者CT包络
* @param[in] UINT8 Flag 是否添加故障 0xff:清除包络时无需添加故障包络;其他,清除包络时需添加故障包络
* @param[in] UINT16 envelopeID 包络ID
* @param[out]
* @return
* @note
* 1、只有在列车不属于本OC控制时才处理,清除时不会对前后端进行操作,只清除相关内存
* 2、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
UINT8 elm_ClearCTOrUCTEnvelope(UINT8 Flag,UINT16 envelopeID);
/**
* @brief 删除UCT或者CT包络
* @param[in] UINT16 envelopeID 包络ID
* @param[out] 无
* @return CI_ERROR 处理失败
CI_SUCCESS 处理成功
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
UINT8 elm_DeleteCTOrUCTEnvelope(UINT16 envelopeID);
/**
* @brief 将相邻OC发送的包络信息加入到内存中
* @param[in] UINT8 OCid 相邻OC id
* @param[out] 无
* @return 无
* @note
* 1、此函数只能接受删除非本OC范围的计轴区段,否则返回失败
*/
void elm_AddNextOCEnvelopetoBuff(UINT8 OCid);
/**
* @brief 刷新相邻OC范围内的包络信息
* @param[in]
* @param[out]
* @return
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
void elm_RefreshNextOCEnvelope(void);
/**
* @brief 隐藏车包络跟踪管理
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
void elm_UKTEnvelopeTrack(void);
/**
* @brief CT车包络跟踪处理
* @note 安全前提:一个CT包络不可能跳过另一个CT包络;一个CT包络不可能越过一个UCT包络;存在UKT包络的计轴不可能存在CT包络或者UCT包络
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
void elm_CTEnvelopeTrack(void);
/**
* @brief 静态函数:UT车包络跟踪处理
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
void elm_UCTEnvelopeTrack(void);
/**
* @brief UCT包络恢复
* @param[in] UINT16 trainid 列车ID
* @param[out] 无
* @return 无
* @note 无
*/
void elm_UCTEnvelopeRecover(UINT16 trainid);
/**
* @brief 列车筛选
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
void elm_TrainScreen(void);
/**
* @brief 全线免筛处理
* @param[in] 无
* @param[out] 无
* @return 无
* @note 无
*/
void elm_WLScreenProcess(void);
/**
* @brief 根据计轴占用空闲状态清UKT包络
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
void elm_ProcessFreeAC(void);
/**
* @brief 维护信息打印
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
void elm_MaintenanceInfo(void);
/**
* @brief 根据已知条件创建包络
* @param[in] UINT8 envelopeType 包络类型
* @param[in] UINT16 TrainID 包络ID
* @param[in] LOD_STRU startPoint 包络起始位置
* @param[in] LOD_STRU endPoint 包络终止位置
* @param[in] UINT16 headTrainID 包络前端列车ID
* @param[in] UINT16 tailTrainID 包络后端列车ID
* @param[out] EnvelopeStruct *pEnvelope 包络
* @return CI_SUCCESS 包络创建正确,返回成功
* CI_ERROR 包络创建失败,返回失败
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
UINT8 elm_CreateEnveLope(UINT8 envelopeType,UINT16 TrainID, LOD_STRU startPoint,LOD_STRU endPoint,UINT16 headTrainID,UINT16 tailTrainID, \
INOUT EnvelopeStruct *pEnvelope);
/**
* @brief 查询基准包络前方最近的包络
* @param[in] const EnvelopeStruct* pEnvelop 基准包络
* @param[in] const UINT16 arEnvelopID[TRAIN_SUM_MAX_IN_OC] 待比较的包络
* @param[in] UINT8 envelopeCnt 待比较的包络数量
* @param[out] UINT16 *preEnvelope 包络前方id
* @param[out] UINT16 *backEnvelope 包络后方id
* @param[out] UINT8 *includeCnt 包含的包络数量
* @param[out] UINT16 includeELMid[TRAIN_SUM_MAX_IN_OC] 包含的包络ID
* @return CI_ERROR 查询失败
CI_SUCCESS 查询成功
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
UINT8 elm_SearchNearestEnvelope(IN const EnvelopeStruct* pEnvelop, IN const UINT16 arEnvelopID[TRAIN_SUM_MAX_IN_OC], UINT8 envelopeCnt, OUT UINT16 *preEnvelope, OUT UINT16 *backEnvelope, OUT UINT8 *includeCnt, OUT UINT16 includeELMid[TRAIN_SUM_MAX_IN_OC]);
/**
* @brief 拷贝计轴区段上的包络信息
* @param[in] UINT16 acID
* @param[out] EnvelopeStruct envelopeInfo[] 计轴区段上的包络信息
* @return 0 计轴区段上不存在包络
非0且小于SECTION_REL_ENVELOPE_SUM_MAX 计轴区段上包络数量
SECTION_REL_ENVELOPE_SUM_MAX,函数执行错误
* @note 新增
*/
UINT8 elm_CopyEnvelopeInAC(UINT16 acID,INOUT EnvelopeStruct envelopeInfo[SECTION_REL_ENVELOPE_SUM_MAX]);
/**
* @brief 获取计轴区段属于包络的位置
* @param[in] UINT16 ACid 待判计轴(待判计轴必须为包络范围内的计轴区段)
* @param[in] const UINT16 newACID[SECTION_IN_ENVELOPE_SUM_MAX] 本周期占用的包络计轴序列(序列从包络尾指向包络头)
* @param[in] UINT8 newACCnt 本周期占用的包络计轴数量
* @param[out] 无
* @return UINT8_MAX 处理错误
ELM_HEAD_AND_TAIL 属于包络头且属于包络尾
ELM_HEAD 属于包络头
ELM_TAIL 属于包络尾
ELM_BODY 属于包络体
* @note
* 1、新建,2022年4月21日
*/
UINT8 elm_GetACOfEnvelopePos(UINT16 ACid, IN const UINT16 newACID[SECTION_IN_ENVELOPE_SUM_MAX],UINT8 newACCnt);
/**
* @brief 删除切换完成的包络信息
* @param[in] const EnvelopeStruct* pEnvelop 包络
* @param[in] UINT16 trainid 列车ID
* @param[out] 无
* @return CI_ERROR 查询失败
* CI_SUCCESS 查询成功
* @note
*/
UINT8 elm_ClearHanderOverEnvelope(IN const EnvelopeStruct* pEnvelop,UINT16 trainid);
/**
* @brief 包络管理安全防护
* @param[in] 无
* @param[out] 无
* @return
* @note
*/
void elm_SafeProtectProcess(void);
/**
* @brief 检查计轴区段是否UT占用(冗余期间不算UT占用)
* @param[in] UINT16 ACID 计轴ID
* @param[out] 无
* @return CI_ERROR UT占用
CI_SUCCESS 非UT占用
* @note
*/
UINT8 elm_CheckACIsUTOcc(UINT16 ACID);
/**
* @brief 处理故障包络的前后包络
* @param[in] UINT16 envelopeID 包络ID
* @param[out] 无
* @return CI_SUCCESS 处理成功
* CI_ERROR 处理失败
* @note 无
*/
UINT8 elm_ProcessFaultElmNear(UINT16 envelopeID);
/**
* @brief 判断包络A的运行方向是否与包络B的运行方向相同
* @param[in] const EnvelopeStruct* pEnvelopA 包络A
* @param[in] const EnvelopeStruct* pEnvelopB 包络B
* @param[out] 无
* @return ELM_DIR_SAME 方向相同
* ELM_DIR_CONVERT 方向相反
其他,非法
* @note 无,目前该函数未考虑方向变化点
*/
UINT8 elm_DirIsSameELMWithELM(const EnvelopeStruct* pEnvelopA, const EnvelopeStruct* pEnvelopB);
/**
* @brief 更新计轴上的CT包络进入信息
* @param[in] IN const EnvelopeStruct* pEnvelop 包络信息
* @param[in] const UINT16 newACID[SECTION_IN_ENVELOPE_SUM_MAX] 本周期占用的包络计轴序列(序列从包络尾指向包络头)
* @param[in] UINT8 newACCnt 本周期占用的包络计轴数量
* @param[in] UINT8 cutFlag 截取标志位
* @return CI_SUCCESS 处理正确,返回成功
* CI_ERROR 处理错误,返回失败
* @note
* 1、新建,2022年4月21日,只能给CT包络使用
*/
UINT8 elm_RefreshACseqInfoForCT(IN const EnvelopeStruct* pEnvelop,IN const UINT16 newACID[SECTION_IN_ENVELOPE_SUM_MAX],UINT8 newACCnt,UINT8 cutFlag);
/**
* @brief 更新计轴上的UCT包络进入信息
* @param[in] IN const EnvelopeStruct* pEnvelop 包络信息
* @return CI_SUCCESS 处理正确,返回成功
* CI_ERROR 处理错误,返回失败
* @note 无
*/
UINT8 elm_RefreshACseqInfoForUCT(IN const EnvelopeStruct* pEnvelop);
/**
* @brief UCT包络出清计轴处理
* @param[in] UINT8 flag 出清方式
* @param[in] const EnvelopeStruct* pEnvelope 包络信息
* @param[in] UINT16 acID 计轴区段Id
* @param[out]
* @return CI_SUCCESS 处理正确,返回成功
* CI_ERROR 处理错误,返回失败
* @note 无na
*/
UINT8 elm_UCTEnvelopeLeaveAC(UINT8 flag,IN const EnvelopeStruct* pEnvelope,UINT16 acID);
/**
* @brief 设置UCT包络端点为计轴的端点
* @param[in] UINT8 headorTail 包络头还是包络尾
* @param[in] UINT16 acId 计轴ID
* @param[out] EnvelopeStruct* ptemp 包络地址指针
* @return CI_ERROR 处理错误
* CI_SUCCESS 处理正确
* @note 无
*/
UINT8 elm_SetUCTEnvelopeDot(UINT8 headorTail,UINT16 acId,IN const EnvelopeStruct* ptemp);
/**
* @brief 查询包络内包含的包络离指定端点最近的包络
* @param[in] UINT8 flag,包络头还是包络尾
* @param[in] const EnvelopeStruct* pBase 基准包络
* @param[in] UINT8 includeCnt 包络内包含的包络数量
* @param[in] UINT16 includeELM[TRAIN_SUM_MAX_IN_OC] 包络内包含的包络id
* @param[out] UINT16 *pEnvelopeid,找到的包络ID
* @return CI_ERROR 查询失败
CI_SUCCESS,查询正确
* @note 无
*/
UINT8 elm_SearchNearstEnvInInclude(UINT8 flag,IN const EnvelopeStruct* pBase,UINT8 includeCnt,UINT16 includeELM[TRAIN_SUM_MAX_IN_OC],OUT UINT16 *pEnvelopeid);
/**
* @brief 刷新所有的列车
* @param[in] 无
* @param[out] 无
* @return 无
* @note 无
*/
void elm_RefreshTrainConstrolStatus(void);
/**
* @brief 判断列车是否为下线车
* @param[in] UINT16 trainID,列车ID
* @param[in] UINT8 headNeedScreen, 需要前筛标志
* @param[in] UINT8 tailNeedScreen, 需要尾筛标志
* @param[out] 无
* @return 无
* @note 当最大安全前和最小安全后所属OC都不属于全线免筛区域,则认为是下线车
*/
void elm_JudgeTrainOffline(UINT16 trainID, UINT8 headNeedScreen,UINT8 tailNeedScreen);
/**
* @brief 删除UCT或者CT包络不额外处理前后车前/后端
* @param[in] UINT16 envelopeID 包络ID
* @param[out] 无
* @return CI_ERROR 处理失败
CI_SUCCESS 处理成功
* @note
*/
UINT8 elm_DeleteCTOrUCTUndoSuspic(UINT16 envelopeID);
/**
* @brief 获取包络相邻的本列车的其它包络
* @param[in] UINT16 envelopeId
* @param[out] UINT16 *preEnvelope 包络前方id
* @param[out] UINT16 *backEnvelope 包络后方id
* @return CI_ERROR 查询失败
CI_SUCCESS 查询成功
* @note
* by cgh 20240514 目前只用于RRM
*/
UINT8 elm_GetNearEnvelopRelSameTra(UINT16 envelopeId, OUT UINT16* preEnvelope, OUT UINT16* backEnvelope);
/**
* @brief 查询基准包络前方最近的本车包络
* @param[in] const EnvelopeStruct* pEnvelop 基准包络
* @param[in] const UINT16 arEnvelopID[TRAIN_SUM_MAX_IN_OC] 待比较的包络
* @param[in] UINT8 envelopeCnt 待比较的包络数量
* @param[out] UINT16 *preEnvelope 包络前方id
* @param[out] UINT16 *backEnvelope 包络后方id
* @param[out] UINT8 *includeCnt 包含的包络数量
* @param[out] UINT16 includeELMid[TRAIN_SUM_MAX_IN_OC] 包含的包络ID
* @return CI_ERROR 查询失败
CI_SUCCESS 查询成功
0xffu 包络存在重合包络
* @note
* by cgh 20240514 目前只用于RRM
*/
UINT8 elm_FindNearSameTrainEnvelop(IN const EnvelopeStruct* pEnvelop, IN const UINT16 arEnvelopID[TRAIN_SUM_MAX_IN_OC], UINT8 envelopeCnt, OUT UINT16* preEnvelope, OUT UINT16* backEnvelope, OUT UINT8* includeCnt, OUT UINT16 includeELMid[TRAIN_SUM_MAX_IN_OC]);
/**
* @brief 处理无C轨可追踪B轨UT
* @param[in] UINT16 envelopeID 列车包络
* @param[in] UINT16 wTrainId 列车ID
* @return 无
* @note by cgh 20240815
*/
void elm_DealNoCGFollowUt(UINT16 wEnvelopeID, UINT16 wTrainId);
/**
* @brief 清除虚拟筛选通过标志
* @param[in] UINT16 wTrainId 列车ID
* @return 无
* @note by cgh 20240815
*/
void elm_ClearVirScreenPassFlag(UINT16 wTrainId);
/**
* @brief 虚拟筛选通过标志监督
* @param[in] UINT16 wTrainId 列车ID
* @return 无
* @note by cgh 20240822
*/
void elm_VirScreenPassMonitor(void);
/**
* @brief 筛选删除UCT在筛选计轴部分后,UCT处理
* @param[in] const EnvelopeStruct* ptemp 包络信息指针
* @param[out] 无
* @return CI_ERROR 0 条件不满足
* CI_SUCCESS 1 条件满足
* @note Created By LQ 2024.07.14
*/
UINT8 elm_ScreenUctCfpFreeProc(const EnvelopeStruct* ptemp);
/**
* 功能描述: CT包络飞车检查
* 参数说明:无
* 返回值 CI_ERROR 存在飞车 CI_SUCCESS 不存在
* BY fan 20241017 (elm_FlyingProtect拆开降复杂度)
*/
UINT8 elm_FlyingProtect_CT(void);
/**
* 功能描述: UCT包络飞车检查
* 参数说明:无
* 返回值 :无
* edit cgh 20241028
*/
void elm_FlyingProtect_UCT(void);
/**
* 功能描述: 删除UCT好车通过标志
* 参数说明:UINT16 envelopeId 包络id
* 返回值
* by cgh 20241028
*/
void elm_DeleteUctPassFlag(UINT16 envelopeId);
#endif
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,447 @@
/******************************************************************************
** 文件名: EnvelopeManage.h
** 描 述: 列车包络管理模块功能处理头文件,该头文件定义的函数仅该模块使用,不对外提供
*******************************************************************************/
#ifndef ENVELOPE_MANAGE_H_
#define ENVELOPE_MANAGE_H_
#include "EnvelopeDefine.h"
#include "ELMDataPrepare.h"
/*区段映射到包络的映射表*/
typedef struct {
UINT8 envelopeCnt; /*包络个数*/
UINT16 envelopeId[SECTION_REL_ENVELOPE_SUM_MAX]; /*包络ID*/
}EnvelopeMapStruct;
/* 列车映射到包络的映射表 */
typedef struct {
UINT8 envelopeCnt; /*包络个数*/
UINT16 envelopeId[TRAIN_REL_ENVELOPE_SUM_MAX]; /*包络ID*/
}TrainMapStruct;
/*内存区,左闭右开区间约定内存操作可用范围*/
typedef struct{
const void * pStartVaild;
const void * pEndVaild;
}MemAreaStruct;
/**
* @brief 检测需要操作的目标内存区是否在可用内存区内
* @param[in] MemAreaStruct targetArea 需要操作的目标内存区
* @param[in] MemAreaStruct valiArea 可用内存区
* @return CI_SUCCESS 需要操作的内存区正确,返回成功
* CI_ERROR 需要操作的内存区错误,返回失败
* @note 需要操作的目标内存区完全包含于可用内存区时,则认为合法;
可用内存区采用是一个左闭右开区间
目标内存区采用的是一个左闭右开区间
*/
UINT8 elm_IsMemAreaOK(MemAreaStruct targetArea, MemAreaStruct valiArea);
/**
* @brief 检测包络内存区操作是否正确
* @param[in] EnvelopeStruct *pEnvelope 需要操作的内存区起始地址
* @param[in] UINT16 size 需要操作的内存区个数
* @return CI_SUCCESS 需要操作的内存区正确,返回成功
* CI_ERROR 需要操作的内存区错误,返回失败
* @note 通过指针地址及大小计算需要操作的包络内存区是否在可用的地址空间
*/
UINT8 elm_IsEnvelopeMemOK(IN EnvelopeStruct *pEnvelope, UINT16 size);
/**
* @brief 检测计轴关联的包络映射表内存区操作是否正确
* @param[in] EnvelopeMapStruct *pRelEnvelope 需要操作的内存区起始地址
* @param[in] UINT16 size 需要操作的内存区个数
* @return CI_SUCCESS 需要操作的内存区正确,返回成功
* CI_ERROR 需要操作的内存区错误,返回失败
* @note 通过指针地址及大小计算需要操作的包络内存区是否在可用的地址空间
*/
UINT8 elm_IsACRelEnvelopeMapMemOK(IN EnvelopeMapStruct *pRelEnvelope, UINT16 size);
/**
* @brief 检测计轴关联的包络映射表内存区操作是否正确
* @param[in] TrainMapStruct *pRelEnvelope 需要操作的内存区起始地址
* @param[in] UINT16 size 需要操作的内存区个数
* @return CI_SUCCESS 需要操作的内存区正确,返回成功
* CI_ERROR 需要操作的内存区错误,返回失败
* @note 通过指针地址及大小计算需要操作的包络内存区是否在可用的地址空间
*/
UINT8 elm_IsTrainRelEnvelopeMapMemOK(IN TrainMapStruct *pRelEnvelope, UINT16 size);
/**
* @brief 判断索引是否正确
* @param[in] UINT16 EnvelopeID 包络索引ID
* @param[in] UINT16 size 需要操作的内存区个数
* @return CI_SUCCESS 包络ID合法,返回成功
* CI_ERROR 包络ID非法,返回失败
* @note 无
*/
UINT8 elm_IsEnvelopeIDOK(UINT16 EnvelopeID);
/**
* @brief 判断包络信息是否正确
* @param[in] const EnvelopeMapStruct *pRelEnvelope 包络信息
* @param[in] UINT16 EnvelopeID 包络ID
* @return CI_SUCCESS 包络ID合法,返回成功
* CI_ERROR 包络ID非法,返回失败
* @note 无
*/
UINT8 elm_IsEnvelopeInfoOk(IN const EnvelopeStruct *pEnvelope, UINT16 EnvelopeID);
/**
* @brief 重置包络存储空间
* @param[in] EnvelopeStruct *pEnvelope 需要操作的内存区起始地址
* @param[in] UINT16 size 需要操作的内存区个数
* @return CI_SUCCESS 需要操作的内存区正确,返回成功
* CI_ERROR 需要操作的内存区错误,返回失败
* @note 将指定的包络空间初始化成0
*/
UINT8 elm_ResetEnvelope(INOUT EnvelopeStruct *pEnvelope, UINT16 size);
/**
* @brief 重置计轴关联的包络映射表
* @param[in] EnvelopeMapStruct *pEnvelope 需要操作的内存区起始地址
* @param[in] UINT16 size 需要操作的内存区个数
* @return CI_SUCCESS 需要操作的内存区正确,返回成功
* CI_ERROR 需要操作的内存区错误,返回失败
* @note 将指定的包络空间初始化成0
*/
UINT8 elm_ResetACRelEnvelopeMap(INOUT EnvelopeMapStruct *pRelEnvelopeMap, UINT16 size);
/**
* @brief 重置列车关联的包络映射表
* @param[in] UINT16 *pEnvelope 需要操作的内存区起始地址
* @param[in] UINT16 size 需要操作的内存区个数
* @return CI_SUCCESS 需要操作的内存区正确,返回成功
* CI_ERROR 需要操作的内存区错误,返回失败
* @note 将指定的包络空间初始化成0
*/
UINT8 elm_ResetTrainRelEnvelopeMap(INOUT TrainMapStruct *pRelEnvelopeMap, UINT16 size);
/**
* @brief 初始化包络存储空间
* @param[in] EnvelopeStruct *pEnvelope 需要操作的内存区起始地址
* @param[in] UINT16 size 需要操作的内存区个数
* @return CI_SUCCESS 需要操作的内存区正确,返回成功
* CI_ERROR 需要操作的内存区错误,返回失败
* @note 将指定的包络空间初始化成0
*/
UINT8 elm_InitEnvelope(void);
/**
* @brief 初始化计轴关联的包络映射表
* @param[in] EnvelopeMapStruct *pEnvelope 需要操作的内存区起始地址
* @param[in] UINT16 size 需要操作的内存区个数
* @return CI_SUCCESS 需要操作的内存区正确,返回成功
* CI_ERROR 需要操作的内存区错误,返回失败
* @note 将指定的包络空间初始化成0
*/
UINT8 elm_InitACRelEnvelopeMap(void);
/**
* @brief 初始化列车关联的包络映射表
* @param[in] EnvelopeMapStruct *pEnvelope 需要操作的内存区起始地址
* @param[in] UINT16 size 需要操作的内存区个数
* @return CI_SUCCESS 需要操作的内存区正确,返回成功
* CI_ERROR 需要操作的内存区错误,返回失败
* @note 将指定的包络空间初始化成0
*/
UINT8 elm_InitTrainRelEnvelopeMap(void);
/**
* @brief 判断包络是否存在
* @param[in] UINT16 EnvelopeID 包络ID
* @return ENVELOPE_UNEXIT 包络不存在
* ENVELOPE_EXIT 包络存在
* @note 通过判断包络存储空间是否被占用,判断包络是否存在
*/
UINT8 elm_IsEnvelopeExit(UINT16 EnvelopeID);
/**
* @brief 在指定空间上存储包络
* @param[in] const EnvelopeStruct *pSrcEnnelope 需要存储的包络地址
* @param[in] UINT16 index 需要存储到目标内存区域索引
* @return CI_SUCCESS 设置成功,返回成功
* CI_ERROR 设置错误,返回失败
* @note 无
*/
UINT8 elm_SetEnvelopeByIndex(IN const EnvelopeStruct *pSrcEnnelope,UINT16 index);
/**
* @brief 更新计轴区段关联的包络
* @param[in] UINT8 flag 操作标识
* @param[in] UINT16 ACIndex 计轴数组索引
* @param[in] UINT16 envelopeID 包络ID
* @return
* @note 包络的ID和存储空间数组索引保持一致
计轴区段映射到存储空间,使用计轴区段的索引
*/
UINT8 elm_SetACRelEnvelopeMap(UINT8 flag,UINT16 ACIndex,UINT16 envelopeID);
/**
* @brief 更新列车关联的包络
* @param[in] UINT8 flag 操作标识
* @param[in] UINT16 trainID 列车ID
* @param[in] UINT16 envelopeID 包络ID
* @return CI_SUCCESS 删除成功,返回成功
* CI_ERROR 删除错误,返回失败
* @note 注:只有本TIOC控区内的包络才有列车到包络之间的映射关系
*/
UINT8 elm_SetTrainRelEnvelopeMap(UINT8 flag,UINT16 trainID,UINT16 envelopeID);
/**
* @brief 设置包络存储空间可用标识
* @param[in] UINT16 index 数组下标
* @param[in] UINT8 value 需要设置的值
* @return CI_SUCCESS 设置成功,返回成功
* CI_ERROR 设置错误,返回失败
* @note 无
*/
UINT8 elm_SetEnvelopeValidFlag(UINT16 index,UINT8 value);
/**
* @brief 设置包络的起点和终点位置
* @param[in] UINT16 envelopid 包络ID
* @param[in] LOD_STRU startPoint 起点位置
* @param[in] LOD_STRU endPoint 终点位置
* @return CI_SUCCESS 设置成功,返回成功
* CI_ERROR 设置错误,返回失败
* @note 无
*/
UINT8 elm_SetEnvelopeLoc(UINT16 envelopid,LOD_STRU startPoint,LOD_STRU endPoint);
/**
* @brief 设置包络的起点方向
* @param[in] UINT16 envelopid 包络ID
* @param[in] UINT8 cStartDir 起点方向
* @return CI_SUCCESS 设置成功,返回成功
* CI_ERROR 设置错误,返回失败
*/
UINT8 elm_SetEnvelopeStartDir(UINT16 envelopid, UINT8 cStartDir);
/**
* @brief 设置包络的终点方向
* @param[in] UINT16 envelopid 包络ID
* @param[in] UINT8 cEndDir 终点方向
* @return CI_SUCCESS 设置成功,返回成功
* CI_ERROR 设置错误,返回失败
*/
UINT8 elm_SetEnvelopeEndDir(UINT16 envelopid, UINT8 cEndDir);
/**
* @brief 设置包络的计轴区段信息
* @param[in] UINT16 envelopid 包络ID
* @param[in] LOD_STRU startPoint 起点位置
* @param[in] LOD_STRU endPoint 终点位置
* @return CI_SUCCESS 设置成功,返回成功
* CI_ERROR 设置错误,返回失败
* @note 无
*/
UINT8 elm_SetEnvelopeACInfo(UINT16 envelopid,UINT8 acCnt,IN const UINT16 acID[SECTION_IN_ENVELOPE_SUM_MAX]);
/**
* @brief 设置包络前方列车
* @param[in] INT16 envelopid 包络id
* @param[in] UINT16 tainid 列车id
* @return CI_SUCCESS 设置成功,返回成功
* CI_ERROR 设置错误,返回失败
* @note 无
*/
UINT8 elm_SetEnvelopeHeadTrainID(UINT16 envelopid,UINT16 tainid);
/**
* @brief 设置包络后方列车
* @param[in] UINT16 envelopid 包络id
* @param[in] UINT16 tainid 列车id
* @return CI_SUCCESS 设置成功,返回成功
* CI_ERROR 设置错误,返回失败
* @note 无
*/
UINT8 elm_SetEnvelopeTailTrainID(UINT16 envelopid,UINT16 tainid);
/**
* @brief 设置包络类型
* @param[in] UINT16 envelopid 包络id
* @param[in] UINT8 envelopType 包络类型
* @param[out] 无
* @return CI_SUCCESS 设置成功,返回成功
* CI_ERROR 设置错误,返回失败
* @note 无
*/
UINT8 elm_SetEnvelopeType(UINT16 envelopeId,UINT8 envelopType);
/**
* @brief 设置包络管理模块是否可正常处理
* @param[in] UINT8 workFlag
* @note 无
*/
void elm_SetELMWorkFlag(UINT8 workFlag);
/**
* @brief 设置包络管理模块是否可正常处理
* @return ELM_WORK_ERROR 不可正常工作
ELM_WORK_OK 可正常工作
* @note 无
*/
UINT8 elm_GetELMWorkFlag(void);
/**
* @brief 获取可用的存储空间索引下标
* @param[in]
* @param[out]
* @return ENVELOPE_UNVAILD_INDEX 无可用的存储空间下标
非ENVELOPE_UNVAILD_INDEX 合法的可用的 存储空间下标
* @note 无
*/
UINT16 elm_GetEnvelopeValidIndex(void);
/**
* @brief 拷贝列车ID关联的包络信息映射表地址
* @param[in] UINT16 trainID 列车ID
* @return 关联的包络地址
* @note 如果处理错误,返回NULL
*/
const TrainMapStruct * elm_GetTrainRelEnvelopeMapPtr(UINT16 trainID);
/**
* @brief 获取列车ID关联的包络信息
* @param[in] UINT16 trainID 列车ID
* @param[out] UINT16 envelopeID[TRAIN_REL_ENVELOPE_SUM_MAX] 关联的包络ID
* @return 关联的包络数量
* @note 如果处理错误,返回TRAIN_REL_ENVELOPE_SUM_MAX
*/
UINT8 elm_GetRelELIdByTrainID(UINT16 trainID, UINT16 envelopeID[TRAIN_REL_ENVELOPE_SUM_MAX]);
/**
* @brief 通过列车ID获取包络存储地址索引
* @param[in] UINT8 envelopeType 包络类型
* @param[in] UINT16 trainID 列车ID
* @param[out] UINT16 envelopeID[TRAIN_REL_ENVELOPE_SUM_MAX] 关联的包络ID
* @return 关联的包络数量
* @note 如果处理错误,返回TRAIN_REL_ENVELOPE_ERROR_CNT
*/
UINT8 elm_GetRelELIdByTrainIDAndType(UINT8 envelopeType, UINT16 trainID, UINT16 envelopeID[TRAIN_REL_ENVELOPE_SUM_MAX]);
/**
* @brief 获取计轴数组索引关联的包络个数和包络ID
* @param[in] UINT16 ACIndex 计轴数组索引
* @param[out] UINT16 envelopeId[SECTION_REL_ENVELOPE_SUM_MAX] 关联的包络ID
* @return 关联的包络数量
* @note 如果处理错误,返回SECTION_REL_ENVELOPE_SUM_MAX
*/
UINT8 elm_GetACRelEnvelopeCnt(UINT16 ACIndex,INOUT UINT16 envelopeId[SECTION_REL_ENVELOPE_SUM_MAX]);
/**
* @brief 通过包络ID获取包络的信息
* @param[in] UINT16 envelopeId 包络ID
* @return 包络信息存储地址
* @note 包络ID和包络索引一回事,包络指针只能使用,不能通过指针修改对应的值
*/
const EnvelopeStruct* elm_GetEnvelopeInfoPtr(UINT16 envelopeId);
/**
* @brief 清空指定包络
* @param[in] UINT16 envelopeId 包络ID
* @return CI_SUCCESS 处理成功
* CI_ERROR 处理错误
* @note 无
*/
UINT8 elm_ClearEnvelope(UINT16 envelopeId);
/**
* @brief 将列车ID加入到包络包含的列车序列中
* @param[in] UINT8 flag 栈头还是栈尾
* @param[in] UINT8 trainId 列车ID
* @param[in] UINT16 envelopeID 包络ID
* @param[out] 无
* @return
* @note
*/
UINT8 elm_PushToTrainSeq(UINT8 flag,UINT16 envelopeID,UINT16 trainId);
/**
* @brief 在列车序列中删除列车ID
* @param[in] UINT16 envelopeID 包络ID
* @param[in] UINT8 trainId 列车ID
* @param[out] 无
* @return
* @note
*/
UINT8 elm_DeleteTrainFromSeq(UINT16 envelopeID,UINT16 trainId);
/**
* @brief 包络包含的计轴栈中进行头部弹出或者尾部弹出
* @param[in] UINT8 flag 栈头或者栈尾进行弹出
* @param[in] UINT16 envelopeID 包络ID
* @param[out] 无
* @return CI_SUCCESS 处理成功
* CI_ERROR 处理错误
* @note 无
*/
UINT8 elm_PopEnvelopACSeq(UINT8 flag, UINT16 envelopeID);
/**
* @brief 包络包含的计轴栈中进行头部压出或者尾部压出
* @param[in] UINT8 flag 栈头或者栈尾进行弹出
* @param[in] UINT16 envelopeID 包络ID
* @param[in] UINT16 ACID 计轴ID
* @param[out] 无
* @return CI_SUCCESS 处理成功
* CI_ERROR 处理错误
* @note 无
*/
UINT8 elm_PushEnvelopeACSeq(UINT8 flag, UINT16 envelopeID,UINT16 ACID);
/**
* @brief 设置包络中列车的激活端
* @param[in] UINT16 envelopeID 包络ID
* @param[in] UINT8 trainId 列车ID
* @param[in] UINT8 ACTPort 列车激活端
* @param[out] 无
* @return 无
* @note 无
*/
void elm_SetTrainACTPortInELM(UINT16 envelopeID,UINT16 trainId,UINT8 ACTPort);
/**
* @brief 获取包络中列车的激活端
* @param[in] UINT16 envelopeID 包络ID
* @param[in] UINT8 trainId 列车ID
* @param[out] 无
* @return UINT8 列车激活端
* @note 无
*/
UINT8 elm_GetTrainACTPortInELM(UINT16 envelopeID,UINT16 trainId);
/**
* @brief 设置UCT包络转UKT包络起始时间
* @param[in] UINT16 wEnvelopid 包络ID
* @param[in] UINT8 dwCycNum 周期号
* @return CI_SUCCESS 1 设置成功
* CI_ERROR 0 设置失败
* note Created By LQ 2024.07.14
*/
UINT8 elm_SetUCTToUKTStartCycNum(UINT16 wEnvelopid, UINT32 dwCycNum);
#endif /*ENVELOPE_MANAGE_H_*/
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,234 @@
/******************************************************************************
** 文件名: EnvelopeManageAPI.h
** 描 述: 列车包络管理模块对外接口头文件
*******************************************************************************/
#ifndef ENVELOPE_MANAGE_API_H_
#define ENVELOPE_MANAGE_API_H_
#include "EnvelopeDefine.h"
/**
* @brief 对外接口:列车包络管理模块上电初始化
* @return CI_SUCCESS 上电初始化成功
* CI_ERROR 上电初始化失败
* @note OC上电时
*/
UINT8 elm_Init(void);
/**
* @brief 对外接口:列车包络管理模块主入口函数
* @param[in]
* @param[out]
* @return
* @note 列车包络管理需要处理CT车包络、UT车包络及隐藏车包络
* 隐藏车包络即计轴区段无通信车包络或者UT车包络,也无法判断为计轴器故障,则该计轴区段为隐藏车包络
* CT车包络即有通信列车安全位置形成的包络
* UT车包络即丢失通信车后的列车包络
*/
void elm_MainProcess(void);
/**
* @brief 对外接口:通过计轴数组ID查找计轴区段上的包络信息
* @param[in] UINT16 acID
* @param[out] EnvelopeStruct envelopeInfo[] 计轴区段上的包络信息
* @return 0 计轴区段上不存在包络
非0且小于SECTION_REL_ENVELOPE_SUM_MAX 计轴区段上包络数量
其他,非法返回,函数执行错误
* @note
*/
UINT8 elm_GetEnvelopeInAC(UINT16 acID,INOUT EnvelopeStruct envelopeInfo[SECTION_REL_ENVELOPE_SUM_MAX]);
/**
* @brief 对外接口:通过计轴数组ID查找计轴区段上的包络ID信息
* @param[in] UINT16 acID
* @param[out] UINT16 envelopeIDs[] 计轴区段上的包络信息
* @return 0 计轴区段上不存在包络
非0且小于SECTION_REL_ENVELOPE_SUM_MAX 计轴区段上包络数量
其他,非法返回,函数执行错误
* @note
*/
UINT8 elm_GetEnvelopeIDsInAC(UINT16 acID,INOUT UINT16 envelopeIDs[SECTION_REL_ENVELOPE_SUM_MAX]);
/**
* @brief 对外接口:获取线路所有的包络信息
* @param[out] UINT16 envelopeID[ENVELOPE_SUM_MAX] 包络ID
* @return 0 不存在包络
0 ~ ENVELOPE_SUM_MAX-1 包络数量
ENVELOPE_SUM_MAX 非法
* @note
*/
UINT16 elm_GetAllEnvelope(OUT UINT16 envelopeID[ENVELOPE_SUM_MAX]);
/**
* 功能:通信车、休眠车、故障车列车包络分类更新存储
* 输入参数: 无
* 全局变量:static s_TRAIN_ENVELOPE_ID CTTrainEnvelope; CT列车包络
* static s_TRAIN_ENVELOPE_ID SleepTrainEnvelope; 休眠车包络信息
* static s_TRAIN_ENVELOPE_ID FaultTrainEnvelope; 休眠车包络信息 *
* fan 2024.06.12
*/
void UpdateTrainEnvelope(void);
/**
* 功能:获取通信车包络
* @param[out] UINT16 envelopeID[ENVELOPE_SUM_MAX] 包络ID
* 全局变量:static s_TRAIN_ENVELOPE_ID CTTrainEnvelope; CT列车包络
* 返回值: 0 ~ ENVELOPE_SUM_MAX-1 包络数量 ENVELOPE_SUM_MAX 非法
* fan 2024.06.12
*/
UINT16 elm_GetCTEnvelope(OUT UINT16 envelopeID[ENVELOPE_SUM_MAX]);
/**
* 功能:获取休眠车包络
* @param[out] UINT16 envelopeID[ENVELOPE_SUM_MAX] 包络ID
* 全局变量:static s_TRAIN_ENVELOPE_ID SleepTrainEnvelope; CT列车包络
* 返回值: 0 ~ ENVELOPE_SUM_MAX-1 包络数量 ENVELOPE_SUM_MAX 非法
* fan 2024.06.12
*/
UINT16 elm_GetSleepEnvelope(OUT UINT16 envelopeID[ENVELOPE_SUM_MAX]);
/**
* 功能:获取故障车包络
* @param[out] UINT16 envelopeID[ENVELOPE_SUM_MAX] 包络ID
* 全局变量:static s_TRAIN_ENVELOPE_ID FaultTrainEnvelope; CT列车包络
* 返回值: 0 ~ ENVELOPE_SUM_MAX-1 包络数量 ENVELOPE_SUM_MAX 非法
* fan 2024.06.12
*/
UINT16 elm_GetFaultEnvelope(OUT UINT16 envelopeID[ENVELOPE_SUM_MAX]);
/**
* @brief 对外接口:通过ID获取包络信息
* @param[in] UINT16 envelopeID 包络ID
* @return 非空 查询正确,包络信息
NULL 查询错误
* @note
*/
const EnvelopeStruct* elm_GetEnvelopeInfoByID(UINT16 envelopeID);
/**
* @brief 对外接口:通过列车ID获取关联的包络ID
* @param[in] UINT16 trainID 列车ID
* @return 非空 查询正确,包络信息
NULL 查询错误
* @note
*/
const EnvelopeStruct* elm_GetEnvelopeInfoByTrainID(UINT16 trainID);
/**
* @brief 对外接口:通过包络ID转换成接口组包需要的包络信息
* @param[in] UINT16 envelopeID 包络ID
* @param[out] InfEnvelopeStruct *pInfEnvelope 转换的接口包络信息
* @return CI_SUCCESS 获取成功
CI_ERROR 获取失败
* @note 无
*/
UINT8 elm_ConvertEnvelopeInfo(UINT16 envelopeID,IN InfEnvelopeStruct *pInfEnvelope);
/**
* @brief 对外接口:跟随包络管理模块数据
* @param[out] UINT8 *pDataBuff 跟随数据的存储地址指针
* @param[in] UINT32 curIndex 跟随数据的索引地址
* @return 跟随数据的长度
* @note 无
*/
UINT32 elm_GetTransferData(OUT UINT8 *pDataBuff,UINT32 curIndex);
/**
* @brief 对外接口:拷贝包络管理模块数据
* @param[in] const UINT8 *pDatabuff 跟随数据的存储地址指针
* @param[in] UINT32 curIndex 跟随数据的索引地址
* @param[in] UINT32 len 跟随数据的长度
* @return 截取数据索引
* @note
*/
UINT32 elm_SetTransferData(IN const UINT8 *pDatabuff,UINT32 curIndex,UINT32 len);
/**
* @brief 对外接口:根据已知条件创建包络
* @param[in] UINT8 envelopeType 包络类型
* @param[in] UINT16 TrainID 包络ID
* @param[in] LOD_STRU startPoint 包络起始位置
* @param[in] LOD_STRU endPoint 包络终止位置
* @param[in] UINT16 headTrainID 包络前端列车ID
* @param[in] UINT16 tailTrainID 包络后端列车ID
* @param[out] EnvelopeStruct *pEnvelope 包络
* @return CI_SUCCESS 包络创建正确,返回成功
* CI_ERROR 包络创建失败,返回失败
* @note
*/
UINT8 elm_BuildEnveLope(UINT8 envelopeType,UINT16 TrainID, LOD_STRU startPoint,LOD_STRU endPoint,UINT16 headTrainID,UINT16 tailTrainID, \
INOUT EnvelopeStruct *pEnvelope);
/**
* @brief 对外接口:查询基准包络前方最近的包络
* @param[in] const EnvelopeStruct* pEnvelop 基准包络
* @param[in] const UINT16 arEnvelopID[TRAIN_SUM_MAX_IN_OC] 待比较的包络
* @param[in] UINT8 envelopeCnt 待比较的包络数量
* @param[out] UINT16 *preEnvelope 包络前方id
* @param[out] UINT16 *backEnvelope 包络后方id
* @return CI_ERROR 查询失败
CI_SUCCESS 查询成功
* @note 无
*/
UINT8 elm_GetNearestBaseOnEnvelope(IN const EnvelopeStruct* pEnvelop,IN const UINT16 arEnvelopID[TRAIN_SUM_MAX_IN_OC],UINT8 envelopeCnt,OUT UINT16 *preEnvelope,OUT UINT16 *backEnvelope);
/**
* @brief 对外接口:列车注销时清除对应包络
* @param[in] wId 列车ID
* @return 无
* @note 无
*/
void elm_LogoutDel(UINT16 wTrainId);
/**
* @brief 对外接口:获取列车关联的包络
* @param[in] UINT16 wTrainId 列车ID
* @param[out] UINT16 envelopeId[TRAIN_REL_ENVELOPE_SUM_MAX] 列车关联的包络
* @return UINT8 列车关联的包络
* @note 无
*/
UINT8 elm_GetTrainRelELM(UINT16 wTrainId,OUT UINT16 envelopeId[TRAIN_REL_ENVELOPE_SUM_MAX]);
/**
* @brief 创建一个临时的UKT包络
* @param[in] UINT16 acID 计轴ID
* UINT8 Dir 包络方向
* @param[out] EnvelopeStruct* pEnvelope 创建的包络
* @return 1 创建成功
* 0 创建失败
*/
UINT8 elm_CreatTempUKTEnvelope(UINT16 acID, UINT8 Dir, EnvelopeStruct* pEnvelope);
/**
* @brief 获取包络相邻的包络
* @param[in] UINT16 envelopeId
* @param[out] UINT16 *preEnvelope 包络前方id
* @param[out] UINT16 *backEnvelope 包络后方id
* @return CI_ERROR 查询失败
CI_SUCCESS 查询成功
* @note
* 1、elm_GetNearestEnvelope 接口函数
*/
UINT8 elm_GetNearestEnvelopeApi(UINT16 envelopeId, OUT UINT16 *preEnvelope, OUT UINT16 *backEnvelope);
/**
* @brief 获取包络是否完全属于本OC
* @param[in] const EnvelopeStruct* Ptemp
* @param[out] 无
* @return ELM_BELONG_OTHER 属于相邻OC
ELM_BELONG_OWNER 属于本OC
CI_ERROR,非法
* @note 无
*/
UINT8 elm_PrepareEnvelopeIsSelfApi(IN const EnvelopeStruct* ptemp);
#endif /*ENVELOPE_MANAGE_API_H_*/
@@ -0,0 +1,688 @@
/******************************************************************************
** 文件名: EnvelopeScreen.c
** 描 述: 包络筛选处理
*******************************************************************************/
#include "EnvelopeLogicProcess.h"
#include "WholeLineScreenAPI.h"
#include "TrainDataManage.h"
/*================================静态函数声明区==============================*/
static UINT8 elm_ProcessUCTAfterScreen(UINT8 flag,IN const EnvelopeStruct* pTemp,IN const EnvelopeStruct* pEnvelop); /** 筛选后UCT包络的处理*/
static void elm_AdjustUCTPointAfterScreen(UINT8 flag, UINT16 ACID, LOD_STRU basePose, IN const EnvelopeStruct* pEnvelop); /** 筛选后UCT包络位置调整*/
static UINT8 elm_TrainScreenByRecover(UINT8 flag,IN const EnvelopeStruct* pEnvelop); /** 前方列车通信恢复时的快速筛选 */
static void elm_TrainHeadScreen(IN const EnvelopeStruct* pEnvelop); /* 列车前端筛选 */
static void elm_TrainTailScreen(IN const EnvelopeStruct* pEnvelop); /* 列车后端筛选 */
/**
* @brief 筛选后UCT包络的处理
* @param[in] UINT8 flag 标志位
* @param[in] IN const EnvelopeStruct* pTemp, UKT包络
* @param[in] IN const EnvelopeStruct* pEnvelop CT包络
* @param[out] 无
* @return CI_ERROR 处理失败
CI_SUCCESS 处理成功
* @note 无
*/
static UINT8 elm_ProcessUCTAfterScreen(UINT8 flag,IN const EnvelopeStruct* pTemp,IN const EnvelopeStruct* pEnvelop)
{
UINT8 ret = CI_ERROR;
UINT32 errorCode = 0u;
UINT8 funRtn = CI_ERROR;
UINT8 cycleTrain = 0u;
UINT8 selfFlag = ELM_BELONG_OTHER;
UINT16 tmpACIndex = 0u;
UINT16 tmpACID = 0u;
/** 入口参数校验 */
ASSERT_RET_VALUE((NULL == pTemp) || (NULL == pEnvelop),ret,0x80000000u);
ASSERT_RET_VALUE((ELM_HEAD != flag) && (ELM_TAIL != flag),ret,0x40000000u);
/** 获取需要删除的计轴ID */
tmpACID = (ELM_TAIL == flag) ? pTemp->ACID[0u] : pTemp->ACID[pTemp->ACCnt - 1u];
/** 删除计轴到包络的映射 */
tmpACIndex = elm_PrepareACIndex(tmpACID);
funRtn = elm_SetACRelEnvelopeMap(OP_DEL,tmpACIndex,pTemp->id);
ASSER_ERROR(CI_ERROR == funRtn,errorCode,0x20000000u);
/** 设置车尾出清*/
funRtn = elm_UCTEnvelopeLeaveAC(flag,pTemp,tmpACID);
ASSER_ERROR(CI_ERROR == funRtn,errorCode,0x10000000u);
/** 计轴空闲,回缩车尾,对包络计轴进行了操作,所以需要放到最后*/
funRtn = elm_PopEnvelopACSeq(flag,pTemp->id);
ASSER_ERROR(CI_ERROR == funRtn,errorCode,0x08000000u);
if (0u == pTemp->ACCnt)
{
/** 判断包络是否属于本OC */
selfFlag = elm_PrepareEnvelopeIsSelf(pTemp);
if (ELM_BELONG_OWNER == selfFlag)
{
/** 清除列车映射关系*/
for (cycleTrain = 0u; cycleTrain < pTemp->trianCnt;cycleTrain++)
{
/** 清除列车关联的包络ID */
funRtn = elm_SetTrainRelEnvelopeMap(OP_DEL,pTemp->trainID[cycleTrain], pTemp->id);
ASSER_ERROR(CI_ERROR == funRtn,errorCode,0x04000000u);
}
}
else
{
/** 非本OC范围内的包络,不建立列与包络的映射关系 */
}
/** 清空包络空间 */
ELM_LOG(ELM_LOG_FATAL,"info:delete UCT%d because of CT%d Screen.\n",pTemp->id,pEnvelop->id);
funRtn = elm_ClearEnvelope(pTemp->id);
ASSER_ERROR(CI_ERROR == funRtn,errorCode,0x02000000u);
}
else
{
/** 更新计轴 */
tmpACID = (ELM_TAIL == flag) ? pTemp->ACID[0u] : pTemp->ACID[pTemp->ACCnt - 1u];
funRtn = elm_SetUCTEnvelopeDot(flag,tmpACID,pTemp);
ASSER_ERROR(CI_ERROR == funRtn,errorCode,0x01000000u);
funRtn = elm_ScreenUctCfpFreeProc(pTemp);
ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00800000u);
}
/** 设置函数返回值 */
ASSERT_SETRET(0u == errorCode,ret,CI_SUCCESS,CI_ERROR);
ASSER_DEBUG(0u != errorCode,ELM_LOG_LOC(ELM_LOG_ERROR,"errorCode:0x%08x info:UCT%d Process error after CT%d Screen.!",errorCode,pTemp->id,pEnvelop->id));
return ret;
}
/**
* @brief 筛选后UCT包络位置调整
* @param[in] UINT8 flag 包络头和包络尾标识
* @param[in] const EnvelopeStruct* pEnvelop 列车包络
* @param[out] 无
* @return 无
* @note 无
*/
static void elm_AdjustUCTPointAfterScreen(UINT8 flag, UINT16 ACID,LOD_STRU basePose,IN const EnvelopeStruct* pEnvelop)
{
UINT32 errorCode = 0u;
UINT8 cycleElm = 0u;
UINT8 funRtn = CI_ERROR;
UINT8 dirCheck = 0u;
UINT32 disHead = 0u;
UINT32 disTail = 0u;
UINT32 minDisBtwHeadAndTail = 0u;
UINT32 minDis = 0xffffffffu;
const EnvelopeStruct* pTemp = NULL;
const EnvelopeStruct* pOut = NULL;
UINT8 envelopeCnt = 0u; /* 包络数量 */
UINT16 arEnvelopID[TRAIN_SUM_MAX_IN_OC] = {0u}; /*包络ID数组*/
/** 入口参数校验 */
ASSERT_RET_NO_VALUE(NULL == pEnvelop,0x80000000u);
ASSERT_RET_NO_VALUE((ELM_HEAD != flag) && (ELM_TAIL != flag),0x40000000u);
/** 查询对方分界点处计轴上的包络信息 */
envelopeCnt = elm_MergeEnvelope(&ACID,1u,arEnvelopID);
/** 判断包络是否存在UCT包络 */
for (cycleElm = 0u; cycleElm < envelopeCnt; cycleElm++)
{
/** 获取包络的地址指针 */
pTemp = elm_GetEnvelopeInfoPtr(arEnvelopID[cycleElm]);
if ((NULL != pTemp) && (TYPE_UCT_ENVELOPE == pTemp->envelopeType))
{
/** 存在UCT包络 */
break;
}
else
{
/** 继续遍历 */
}
}
if (cycleElm == envelopeCnt)
{
/** 说明待筛选计轴上不存在UKT包络,无需处理 */
}
else
{
/** 查询离筛选点最近的包络 */
for (cycleElm = 0; cycleElm < envelopeCnt;cycleElm++)
{
/** 获取UCT包络的地址指针 */
pTemp = elm_GetEnvelopeInfoPtr(arEnvelopID[cycleElm]);
ASSERT_BREAK(NULL == pTemp,errorCode,0x08000000u);
/** 获取包络起终点离分界点的距离 */
disHead = elm_PrepareDistanceBtwPoints(pTemp->endPos,basePose);
disTail = elm_PrepareDistanceBtwPoints(pTemp->startPos,basePose);
minDisBtwHeadAndTail = disHead > disTail ? disTail : disHead;
if ((minDis >= minDisBtwHeadAndTail) && (TYPE_UCT_ENVELOPE == pTemp->envelopeType))
{
pOut = pTemp;
minDis = minDisBtwHeadAndTail;
}
else if ((minDis >= minDisBtwHeadAndTail) && (TYPE_UCT_ENVELOPE != pTemp->envelopeType))
{
/** 补丁:说明UCT在后面*/
pOut = NULL;
minDis = minDisBtwHeadAndTail;
}
else
{
/** 不处理 */
}
}
if (NULL != pOut)
{
/** 查询两个包络的位置关系 */
dirCheck = elm_DirIsSameELMWithELM(pEnvelop,pOut);
ASSER_ERROR(0u == dirCheck,errorCode,0x10000000u);
if (ELM_HEAD == flag)
{
if ((ELM_DIR_SAME == dirCheck) && (pOut->ACID[0u] == ACID))
{
funRtn = elm_ProcessUCTAfterScreen(ELM_TAIL,pOut,pEnvelop);
ASSER_ERROR(CI_ERROR == funRtn,errorCode,0x08000000u);
}
else if ((ELM_DIR_CONVERT == dirCheck) && (pOut->ACID[pOut->ACCnt - 1u] == ACID))
{
funRtn = elm_ProcessUCTAfterScreen(ELM_HEAD,pOut,pEnvelop);
ASSER_ERROR(CI_ERROR == funRtn,errorCode,0x04000000u);
}
else
{
/** 无需处理 */
}
}
else
{
if ((ELM_DIR_CONVERT == dirCheck) && (pOut->ACID[0u] == ACID))
{
funRtn = elm_ProcessUCTAfterScreen(ELM_TAIL,pOut,pEnvelop);
ASSER_ERROR(CI_ERROR == funRtn,errorCode,0x00800000u);
}
else if ((ELM_DIR_SAME == dirCheck) && (pOut->ACID[pOut->ACCnt - 1u] == ACID))
{
funRtn = elm_ProcessUCTAfterScreen(ELM_HEAD,pOut,pEnvelop);
ASSER_ERROR(CI_ERROR == funRtn,errorCode,0x00400000u);
}
else
{
/** 无需处理 */
}
}
}
}
if(0u != errorCode)
{
/** UCT包络跟踪失败 */
elm_SetELMWorkFlag(ELM_WORK_ERROR);
ELM_LOG_LOC(ELM_LOG_ERROR,"errorCode:0x%08x info:CT%d after Screen to Adjust UCTPoint errorELM need reset !",errorCode,pEnvelop->id);
}
else
{
/** 处理正确*/
}
}
/**
* @brief 静态函数:前/后方列车通信恢复时的快速筛选
* @param[in] UINT8 flag 包络头和包络尾标识
* @param[in] const EnvelopeStruct* pEnvelop 列车包络
* @param[out]
* @return CI_ERROR 无法因为前/后方列车通信恢复完成筛选
CI_SUCCESS 前/后方列车通信恢复完成筛选
* @note
*/
static UINT8 elm_TrainScreenByRecover(UINT8 flag,IN const EnvelopeStruct* pEnvelop)
{
UINT8 ret = CI_ERROR;
UINT8 comstatus = ELM_COM_STATUS_ERROR;
UINT16 tmpTrainID = 0u;
/** 入口参数校验 */
ASSERT_RET_VALUE(NULL == pEnvelop,ret,0x80000000u);
ASSERT_RET_VALUE((ELM_HEAD != flag) && (ELM_TAIL != flag),ret,0x40000000u);
/** 获取前/后方列车 */
if (ELM_HEAD == flag)
{
tmpTrainID = pEnvelop->headTrainID;
}
else
{
tmpTrainID = pEnvelop->tailTrainID;
}
/** 获取列车的通信状态 */
comstatus = elm_PrepareTrainCommStatus(tmpTrainID);
/** 设置函数返回值 */
ASSERT_SETRET(ELM_COM_STATUS_OK == comstatus,ret,CI_SUCCESS,CI_ERROR);
return ret;
}
/**
* @brief 静态函数:列车前端筛选
* @param[in] const EnvelopeStruct* pEnvelop 列车包络
* @param[out]
* @return
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
static void elm_TrainHeadScreen(IN const EnvelopeStruct* pEnvelop)
{
/*- 局部变量定义 */
UINT32 errorCode = 0u; /* 错误码 */
UINT8 acCnt = 0u; /* 列车最小安全前前方计轴数量*/
UINT16 acID[AC_MAXCNT_IN_SWITCH] = {0u}; /* 列车最小安全前前方计轴*/
UINT8 funRet = CI_ERROR; /* 函数返回值 */
UINT16 tmpACId = 0u; /*计轴id缓存*/
UINT8 cycleAc = 0u; /*循环变量*/
UINT8 acStatus = ELM_AC_OCC; /*计轴占用状态*/
UINT8 phyStatus = SECTION_OCCUPY_YES; /*岔区不连通计轴所处物理区段占用状态*/
UINT8 trainDir = 0u;
LOD_STRU tmpLoc = {0u}; /*最小安全前缓存*/
ELM_AxisLocStruct tmpACLoc = {0u}; /* 计轴端点位置*/
UINT8 screenCheck = CI_ERROR; /* 函数返回值 */
UINT8 chTrainNvramFlag = 0U;/*列车NVRAM标志*/
UINT8 chTrainPosMonitorState = 0U;/*列车位置监督标志*/
/** 入口参数校验 */
ASSERT_RET_NO_VALUE(NULL == pEnvelop,0x80000000u);
/** 前方列车通信恢复时的快速筛选 */
funRet = elm_TrainScreenByRecover(ELM_HEAD,pEnvelop);
chTrainNvramFlag = GetTrainNvramPosFlag(pEnvelop->trainID[0]);
chTrainPosMonitorState = GetTrainPosMonitorState(pEnvelop->trainID[0]);
/** 正常筛选 */
if (CI_ERROR == funRet)
{
/** 查询最小安全前前方计轴*/
acCnt = elm_PrepareNextAcMinSafeHeadLoc(pEnvelop->trainID[0],acID);
ASSER_ERROR((0u == acCnt) || (AC_MAXCNT_IN_SWITCH < acCnt),errorCode, 0x40000000u);
/*- 判断前方计轴是否空闲 */
for (cycleAc = 0u; cycleAc < acCnt; cycleAc++)
{
/** 获取计轴状态 */
acStatus = elm_PrepareACStatus(acID[cycleAc]);
/** 判断是否需要退出循环 */
ASSERT_BREAK(ELM_AC_OCC == acStatus,errorCode,0x20000000u);
/*当计轴区段为道岔区段,不连通的时候,需要检查计轴所处计轴区段全部空闲才给前筛通过*/
phyStatus = elm_PrepareACofSwichPhyStatus(acID[cycleAc]);
/** 判断是否需要退出循环 */
ASSERT_BREAK(SECTION_OCCUPY_YES == phyStatus, errorCode, 0x00400000u);
}
/** 最小安全前前方计轴是否在安全包络内*/
funRet = elm_PrepareInUINT16Array(acID[0],pEnvelop->ACID,pEnvelop->ACCnt);
if (CI_SUCCESS == funRet)
{
/** 判断前方计轴是否为安全车头所属计轴,如果相同则可以完成前筛,如果安全包络太大并且无占用,应该是车停下的延时,那么就晚点完成前筛也是可以的*/
funRet = elm_PrepareInUINT16Array(pEnvelop->ACID[pEnvelop->ACCnt - 1U],acID,acCnt);
ASSER_ERROR(CI_ERROR == funRet,errorCode, 0x10000000u);
}
else
{
/** 可继续进行筛选*/
}
/** 获取最小安全前所属计轴区段*/
tmpACId = elm_PrepareACOfMinSafeHeadLoc(pEnvelop->trainID[0]);
ASSER_ERROR(0u == tmpACId,errorCode, 0x08000000u);
/** 获取列车运行方向 */
trainDir = elm_PrepareTrainMinHeadDir(pEnvelop->trainID[0]);
ASSER_ERROR(0u == trainDir,errorCode, 0x04000000u);
/** 获取计轴端点位置*/
funRet = elm_PrepareACLoc(tmpACId,trainDir,&tmpACLoc);
ASSER_ERROR(CI_ERROR == funRet,errorCode, 0x02000000u);
/** 获取最小安全前位置 */
funRet = elm_PrepareMinSafeHeadLoc(pEnvelop->trainID[0],&tmpLoc);
ASSER_ERROR(CI_ERROR == funRet,errorCode, 0x01000000u);
screenCheck = elm_PrepareHeadScreenCheck(pEnvelop->trainID[0], tmpLoc,tmpACLoc.endPos,&errorCode);
if ((0u == errorCode) && (CI_SUCCESS == screenCheck) && ((TRAIN_NVRAM_POS_FLAG_NO == chTrainNvramFlag)
|| ((TRAIN_NVRAM_POS_FLAG_YES == chTrainNvramFlag) && (TRAIN_POS_MONITOR_VALID == chTrainPosMonitorState))))
{
/** 处理前方UCT包络 */
elm_AdjustUCTPointAfterScreen(ELM_HEAD,tmpACId,tmpACLoc.endPos,pEnvelop);
/** 设置前车无其他车 */
funRet = elm_SetEnvelopeHeadTrainID(pEnvelop->id, 0u);
ASSER_ERROR(CI_ERROR == funRet,errorCode, 0x00200000u);
/** 维护日志--调试级别*/
ELM_LOG_LOC(ELM_LOG_FATAL,"info:Train%d,delete Head suspicious.",pEnvelop->trainID[0]);
}
else
{
if (ADJUST_UCT == screenCheck)
{
/** 处理前方UCT包络 */
elm_AdjustUCTPointAfterScreen(ELM_HEAD,tmpACId,tmpACLoc.endPos,pEnvelop);
}
else
{
/** 不处理*/
}
/** 无法完成筛选*/
ELM_LOG_LOC(ELM_LOG_ERROR,"errorCode:0x%08x info:Train%d can't delete Head suspicious.",errorCode,pEnvelop->trainID[0]);
}
}
else
{
if ((TRAIN_NVRAM_POS_FLAG_NO == chTrainNvramFlag)
|| ((TRAIN_NVRAM_POS_FLAG_YES == chTrainNvramFlag) && (TRAIN_POS_MONITOR_VALID == chTrainPosMonitorState)))
{
/** 维护日志--调试级别*/
ELM_LOG_LOC(ELM_LOG_FATAL, "info:Train%d,delete Head suspicious by headTrain%d recover.", pEnvelop->trainID[0], pEnvelop->headTrainID);
/** 设置前车无其他车 */
funRet = elm_SetEnvelopeHeadTrainID(pEnvelop->id, 0u);
ASSER_ERROR(CI_ERROR == funRet, errorCode, 0x00100000u);
}
else
{
}
}
}
/**
* @brief 静态函数:列车后端筛选
* @param[in] const EnvelopeStruct* pEnvelop 列车包络
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
static void elm_TrainTailScreen(IN const EnvelopeStruct* pEnvelop)
{
/*- 局部变量定义 */
UINT32 errorCode = 0u; /* 错误码 */
UINT8 acCnt = 0u; /* 列车最小安全前前方计轴数量*/
UINT16 acID[AC_MAXCNT_IN_SWITCH] = {0u}; /* 列车最小安全前前方计轴*/
UINT8 funRet = CI_ERROR; /* 函数返回值 */
UINT16 tmpACId = 0u; /*计轴id缓存*/
UINT8 cycleAc = 0u; /*循环变量*/
UINT8 acStatus = ELM_AC_OCC; /*计轴占用状态*/
UINT8 phyStatus = SECTION_OCCUPY_YES; /*岔区不连通计轴所处物理区段占用状态*/
UINT8 trainDir = 0u;
LOD_STRU tmpLoc = {0u}; /*最小安全前缓存*/
ELM_AxisLocStruct tmpACLoc = {0u}; /* 计轴端点位置*/
UINT8 screenCheck = CI_ERROR; /* 函数返回值 */
UINT8 chTrainNvramFlag = 0U;/*列车NVRAM标志*/
UINT8 chTrainPosMonitorState = 0U;/*列车位置监督标志*/
/** 入口参数校验 */
ASSERT_RET_NO_VALUE(NULL == pEnvelop,0x80000000u);
/** 前方列车通信恢复时的快速筛选 */
funRet = elm_TrainScreenByRecover(ELM_TAIL,pEnvelop);
chTrainNvramFlag = GetTrainNvramPosFlag(pEnvelop->trainID[0]);
chTrainPosMonitorState = GetTrainPosMonitorState(pEnvelop->trainID[0]);
/** 正常筛选 */
if (CI_ERROR == funRet)
{
/** 查询最大安全后后方计轴*/
acCnt = elm_PrepareNextAcMaxSafeTailLoc(pEnvelop->trainID[0],acID);
ASSER_ERROR((0u == acCnt) || (AC_MAXCNT_IN_SWITCH < acCnt),errorCode, 0x40000000u);
/*- 判断后方计轴是否空闲 */
for (cycleAc = 0u; cycleAc < acCnt; cycleAc++)
{
/** 获取计轴状态 */
acStatus = elm_PrepareACStatus(acID[cycleAc]);
/** 判断是否需要退出循环 */
ASSERT_BREAK(ELM_AC_OCC == acStatus,errorCode,0x20000000u);
/*当计轴区段为道岔区段,不连通的时候,需要检查计轴所处计轴区段全部空闲才给后筛通过*/
phyStatus = elm_PrepareACofSwichPhyStatus(acID[cycleAc]);
/** 判断是否需要退出循环 */
ASSERT_BREAK(SECTION_OCCUPY_YES == phyStatus, errorCode, 0x00400000u);
}
/** 最大安全后后方计轴是否在安全包络内*/
funRet = elm_PrepareInUINT16Array(acID[0],pEnvelop->ACID,pEnvelop->ACCnt);
if (CI_SUCCESS == funRet)
{
/** 最大安全后后方计轴是否为最大安全后后方计轴*/
funRet = elm_PrepareInUINT16Array(pEnvelop->ACID[0],acID,acCnt);
ASSER_ERROR(CI_ERROR == funRet,errorCode, 0x10000000u);
}
else
{
/** 可继续进行筛选*/
}
/** 获取最大安全后所属计轴*/
tmpACId = elm_PrepareACOfMaxSafeTailLoc(pEnvelop->trainID[0]);
ASSER_ERROR(0u == tmpACId,errorCode, 0x08000000u);
/** 获取列车运行方向 */
trainDir = elm_PrepareTrainMaxTailDir(pEnvelop->trainID[0]);
ASSER_ERROR(0u == trainDir,errorCode, 0x04000000u);
/** 获取计轴端点位置*/
funRet = elm_PrepareACLoc(tmpACId,trainDir,&tmpACLoc);
ASSER_ERROR(CI_ERROR == funRet,errorCode, 0x02000000u);
/** 获取最大安全后位置 */
funRet = elm_PrepareMaxSafeTailLoc(pEnvelop->trainID[0],&tmpLoc);
ASSER_ERROR(CI_ERROR == funRet,errorCode, 0x01000000u);
screenCheck = elm_PrepareTailScreenCheck(pEnvelop->trainID[0], tmpLoc, tmpACLoc.startPos, &errorCode);
if ((0u == errorCode) && (CI_SUCCESS == screenCheck) && ((TRAIN_NVRAM_POS_FLAG_NO == chTrainNvramFlag)
|| ((TRAIN_NVRAM_POS_FLAG_YES == chTrainNvramFlag) && (TRAIN_POS_MONITOR_VALID == chTrainPosMonitorState))))
{
/** 处理后方UCT包络 */
elm_AdjustUCTPointAfterScreen(ELM_TAIL,tmpACId,tmpACLoc.startPos,pEnvelop);
/** 设置后车无其他车 */
funRet = elm_SetEnvelopeTailTrainID(pEnvelop->id, 0u);
ASSER_ERROR(CI_ERROR == funRet,errorCode, 0x00200000u);
/** 维护日志--调试级别*/
ELM_LOG_LOC(ELM_LOG_FATAL,"info:Train%d,delete Tail suspicious.\n",pEnvelop->trainID[0]);
}
else
{
if (ADJUST_UCT == screenCheck)
{
/** 处理后方UCT包络 */
elm_AdjustUCTPointAfterScreen(ELM_TAIL,tmpACId,tmpACLoc.startPos,pEnvelop);
}
else
{
/** 不处理*/
}
/** 无法完成筛选*/
ELM_LOG_LOC(ELM_LOG_ERROR,"errorCode:0x%08x info:Train%d can't delete Tail suspicious.",errorCode,pEnvelop->trainID[0]);
}
}
else
{
if ((TRAIN_NVRAM_POS_FLAG_NO == chTrainNvramFlag)
|| ((TRAIN_NVRAM_POS_FLAG_YES == chTrainNvramFlag) && (TRAIN_POS_MONITOR_VALID == chTrainPosMonitorState)))
{
/** 维护日志--调试级别*/
ELM_LOG_LOC(ELM_LOG_FATAL, "info:Train%d,delete Tail suspicious by tailTrain%d recover.", pEnvelop->trainID[0], pEnvelop->tailTrainID);
/** 设置前车无其他车 */
funRet = elm_SetEnvelopeTailTrainID(pEnvelop->id, 0u);
ASSER_ERROR(CI_ERROR == funRet, errorCode, 0x00100000u);
}
else
{
;
}
}
}
/**
* @brief 列车筛选
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
void elm_TrainScreen(void)
{
UINT16 cycle = 0u;
UINT8 vaildFlag = ENVELOPE_UNEXIT;
UINT32 errorCode = 0u;
UINT8 comstatus = 0U;
const EnvelopeStruct* pEnvelop = NULL;
for (cycle = 1u; cycle < ENVELOPE_SUM_MAX; cycle++)
{
/** 获取空间使用标志*/
vaildFlag = elm_IsEnvelopeExit(cycle);
if (ENVELOPE_EXIT == vaildFlag)
{
/** 获取包络的地址 */
pEnvelop = elm_GetEnvelopeInfoPtr(cycle);
/** 判断包络地址是否正确 */
ASSERT_BREAK(NULL == pEnvelop,errorCode,0x08000000u);
/** 获取列车的通信状态 */
comstatus = elm_PrepareTrainCommStatus(pEnvelop->trainID[0u]);
/*CT包络且通信正常,才进行筛选*/
if ((TYPE_CT_ENVELOPE == pEnvelop->envelopeType)&&(ELM_COM_STATUS_OK ==comstatus))
{
/** 判断前端是否可疑 */
if (0u != pEnvelop->headTrainID)
{
/** 处理前端筛选*/
elm_TrainHeadScreen(pEnvelop);
}
else
{
/** 无需处理 */
}
/** 判断后端是否可疑*/
if (0u != pEnvelop->tailTrainID)
{
/** 处理后端筛选*/
elm_TrainTailScreen(pEnvelop);
}
else
{
/** 无需处理 */
}
}
else
{
/** 无需筛选*/
}
}
else
{
/** 无需筛选*/
}
}
}
/**
* @brief 全线免筛处理
* @param[in] 无
* @param[out] 无
* @return 无
* @note 无
*/
void elm_WLScreenProcess(void)
{
UINT16 cycle;
UINT8 wlsFlag = WHOLE_LINE_SCREEN_UNVAILD;
UINT8 relEnvelopeCnt= TRAIN_REL_ENVELOPE_SUM_MAX; /*列车关联的包络数量*/
UINT16 relEnvelopeID[TRAIN_REL_ENVELOPE_SUM_MAX] = {0u}; /*列车关联的包络索引*/
const EnvelopeStruct *pEnvelopeInfo = NULL;
/** 获取全线免筛标志 */
wlsFlag = wls_GetWLScreenPermitFlag();
if (WHOLE_LINE_SCREEN_VAILD == wlsFlag)
{
for (cycle = 1u; cycle < LINE_MAX_TRAIN; cycle++)
{
relEnvelopeCnt = elm_GetRelELIdByTrainID(cycle,relEnvelopeID);
if (1u == relEnvelopeCnt)
{
/** UCT包络本集中区内暂未裂变 */
pEnvelopeInfo = elm_GetEnvelopeInfoPtr(relEnvelopeID[0u]);
if ((NULL != pEnvelopeInfo) &&
((TYPE_CT_ENVELOPE == pEnvelopeInfo->envelopeType) || (TYPE_UCT_ENVELOPE == pEnvelopeInfo->envelopeType)))
{
ELM_LOG(ELM_LOG_FATAL,"info:ELM%d WLS Process,",pEnvelopeInfo->id);
if (LINE_MAX_TRAIN == pEnvelopeInfo->headTrainID)
{
ELM_LOG(ELM_LOG_FATAL," delete Head suspicious,");
(void)elm_SetEnvelopeHeadTrainID(pEnvelopeInfo->id,0u);
}
else
{
/* 不处理 */
}
if (LINE_MAX_TRAIN == pEnvelopeInfo->tailTrainID)
{
ELM_LOG(ELM_LOG_FATAL," delete Tail suspicious,");
(void)elm_SetEnvelopeTailTrainID(pEnvelopeInfo->id,0u);
}
else
{
/* 不处理 */
}
ELM_LOG(ELM_LOG_FATAL,"\n");
}
}
else
{
/* 无需处理 */
}
}
}
else
{
/** 不处理 */
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,186 @@
/******************************************************************************
** 文件名: UKTEnvelopeTrack.c
** 描 述: 实现UKT包络的追踪处理
*******************************************************************************/
#include "EnvelopeLogicProcess.h"
/**
* @brief 隐藏车包络跟踪管理
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
void elm_UKTEnvelopeTrack(void)
{
/*- 局部变量定义 */
UINT8 funFlag = CI_ERROR; /*函数执行返回值*/
UINT16 cycle = 0u;
UINT32 errorCode = 0u; /*错误码*/
UINT16 acCnt = 0u; /*OC范围内所有的计轴区段数量*/
UINT8 OCId = 0u;
UINT8 acStatus = ELM_AC_OCC;
UINT8 acAssertStatus = AAM_API_AC_UT;
const UINT16 *pACIdbuff = NULL; /** 计轴ID数值缓存 */
/** 获取OC范围内所有的计轴区段数组索引 */
acCnt = elm_PrepareACBuffIndexs(&pACIdbuff);
/** 判断是否查询成功 */
if (0u == acCnt)
{
/** 查询失败,OC范围内不可能不存在计轴区段 */
elm_SetELMWorkFlag(ELM_WORK_ERROR);
errorCode = errorCode + 0x80000000u;
ELM_LOG_LOC(ELM_LOG_ERROR,"errno:0x%08x info:Get ACID Buff error!",errorCode)
}
else
{
/** 遍历OC集中区所有的计轴区段索引*/
for (cycle = 0u; cycle < acCnt; cycle++)
{
/** 判断计轴区段是否属于本OC */
funFlag = elm_PrepareACIsSelf(pACIdbuff[cycle],&OCId);
if (ELM_BELONG_OTHER == funFlag)
{
/** 不属于本OC,不处理 */
}
else
{
/** 获取计轴占用状态 */
acStatus = elm_PrepareACStatus(pACIdbuff[cycle]);
if (ELM_AC_OCC == acStatus)
{
/** 获取冗余时间 */
acAssertStatus = elm_PrepareACAssertStatus(pACIdbuff[cycle]);
if ((AAM_API_AC_ARB == acAssertStatus) || (AAM_API_AC_REDUNARB == acAssertStatus) || (AAM_API_AC_REDUNUT == acAssertStatus))
{
/** 计轴冗余期间,不添加故障包络*/
ELM_LOG(ELM_LOG_FATAL,"info:ac%d no add UKT because AssertStatus:%d.\n",pACIdbuff[cycle],acAssertStatus);
}
else
{
/*- 在占用无其他包络的计轴上添加UKT包络 */
funFlag = elm_AddUKTEnvelopeInAC(pACIdbuff[cycle]);
/** 判断是否执行正确 */
if (CI_ERROR == funFlag)
{
/** 函数执行错误,需要设置该模块无法正常处理标志位 */
elm_SetELMWorkFlag(ELM_WORK_ERROR);
ASSER_ERROR(CI_ERROR == funFlag,errorCode,0x40000000u)
ASSER_DEBUG(0u != errorCode,ELM_LOG_LOC(ELM_LOG_ERROR,"errno:0x%08x info:ac%d add UKT error.",errorCode,pACIdbuff[cycle]))
}
else
{
/** 处理正确,继续处理*/
}
}
}
else
{
/** 空闲不处理 */
}
}
}
}
}
/**
* @brief 根据计轴占用空闲状态清UKT包络
* @note
* 1、从EnvelopeManageAPI.c拆分到此文件中,代码未修改
*/
void elm_ProcessFreeAC(void)
{
/*- 局部变量定义 */
UINT8 funRtn = CI_ERROR;
UINT8 OCId = 0u;
UINT16 cycle = 0u;
UINT32 errorCode = 0u; /*错误码*/
UINT16 acCnt = 0u; /*OC范围内所有的计轴区段数量*/
const UINT16 *pACIdbuff = NULL; /** 计轴ID数值缓存 */
UINT16 tmpAcIndex = 0u;
UINT8 tmpStatus = ELM_AC_OCC;
UINT8 cycleELM = 0u;
UINT8 acRelEnvelopeCnt = 0u;
UINT16 acRelEnvelopeID[SECTION_REL_ENVELOPE_SUM_MAX] = {0u};
const EnvelopeStruct* pEnvelope = NULL;
/** 获取OC范围内所有的计轴区段数组索引 */
acCnt = elm_PrepareACBuffIndexs(&pACIdbuff);
/** 判断是否查询成功 */
if (0u == acCnt)
{
/** 查询失败,OC范围内不可能不存在计轴区段 */
errorCode = errorCode + 0x80000000u;
elm_SetELMWorkFlag(ELM_WORK_ERROR);
ELM_LOG_LOC(ELM_LOG_ERROR,"errno:0x%08x info:Get ACID Buff error!",errorCode)
}
else
{
/** 遍历OC集中区所有的计轴区段索引*/
for (cycle = 0u; cycle < acCnt; cycle++)
{
/** 判断计轴区段是否属于本OC */
funRtn = elm_PrepareACIsSelf(pACIdbuff[cycle],&OCId);
if (ELM_BELONG_OWNER == funRtn)
{
/** 通过计轴数组索引查找计轴索引*/
tmpAcIndex = elm_PrepareACIndex(pACIdbuff[cycle]);
/** 通过计轴区段ID获取计轴状态*/
tmpStatus = elm_PrepareACStatus(pACIdbuff[cycle]);
/** 通过计轴数组索引获取关联的包络个数 */
acRelEnvelopeCnt = elm_GetACRelEnvelopeCnt(tmpAcIndex, acRelEnvelopeID);
ASSERT_BREAK(SECTION_REL_ENVELOPE_SUM_MAX == acRelEnvelopeCnt,errorCode,0x40000000u);
/** 如果计轴空闲且包络只有一个,则判断是否为UKT包络,如果是,则清除*/
if (ELM_AC_FREE== tmpStatus)
{
/** 删除空闲计轴上的UKT包络,一个计轴肯定只存在一个UKT包络,但是此处如果真的有两个,进行容忍*/
for (cycleELM = 0u; cycleELM < acRelEnvelopeCnt; cycleELM++)
{
/** 获取包络指针*/
pEnvelope = elm_GetEnvelopeInfoPtr(acRelEnvelopeID[0]);
ASSERT_BREAK(NULL == pEnvelope,errorCode,0x20000000u);
if (TYPE_UKT_ENVELOPE == pEnvelope->envelopeType)
{
(void)elm_DeleteUKTEnvelope(pEnvelope);
}
else
{
/** 无需处理*/
}
}
/** 判断处理是否成功 */
ASSERT_BREAK(cycleELM != acRelEnvelopeCnt,errorCode,0x10000000u);
}
else
{
/** 无需处理*/
}
}
else
{
/** 非本OC计轴,不处理*/
}
}
if (cycle == acCnt)
{
/** 处理无问题*/
}
else
{
elm_SetELMWorkFlag(ELM_WORK_ERROR);
ELM_LOG_LOC(ELM_LOG_ERROR,"errno:0x%08x info:Clear AC%d ELM error!",errorCode,pACIdbuff[cycle]);
}
}
}
@@ -0,0 +1,492 @@
/********************************************************
*
* 文 件 名: FloodGateConfigDataManage.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2014-12-24
* 作 者: 联锁组
* 功能描述: 防淹门配置数据管理
* 修改记录:
*
********************************************************/
#include "FloodGateConfigDataManage.h"
FloodGateConfigDataStruct FloodGateConfigDataStru[FLOOD_GATE_SUM_MAX]; /*定义防淹门数据配置结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
UINT16 LocalCiFloodGateIdBuf[FLOOD_GATE_SUM_MAX] = {0u}; /*定义本地联锁防淹门ID映射数组*/
INT16 FloodGateCurSum = 0; /*防淹门当前总数*/
UINT16 TotalFloodGateNum = 0u;/*本联锁和相邻联锁发送给本联锁防淹门总数*/
/*
* 功能描述: 获取防淹门当前总数
* 参数说明: void
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门当前总数
*/
UINT16 GetFloodGateCurSum(void)
{
UINT16 floodCurSum = 0u;
if ((INT16)FLOOD_GATE_SUM_MAX <= FloodGateCurSum)
{
floodCurSum = FLOOD_GATE_SUM_MAX;
}
else if (0 > FloodGateCurSum)
{
floodCurSum = 0u;
}
else
{
floodCurSum = (UINT16)FloodGateCurSum;
}
return floodCurSum;
}
/*
* 功能描述: 获取指定数组下标对应的防淹门ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门ID
*/
UINT16 GetFloodGateId(const UINT16 bufIndex)
{
UINT16 floodGateId = CI_ERROR;
UINT16 curSum = GetTotalFloodGateCurSum();
if (bufIndex < curSum)
{
floodGateId = LocalCiFloodGateIdBuf[bufIndex];
}
return floodGateId;
}
/*
* 功能描述: 获取指定ID防淹门数组下标
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门ID
*/
UINT16 GetFloodGateBufIndex(const UINT16 floodGateId)
{
UINT16 returnValue = FLOOD_GATE_SUM_MAX;
if ((floodGateId >=1u) && (floodGateId < FLOOD_GATE_SUM_MAX))
{
returnValue = floodGateId;
}
else
{
returnValue = 0u;
}
return returnValue;
}
/*
* 功能描述: 获取指定数组下标对应的关门请求继电器ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门ID
*/
UINT16 GetFloodGateCloseApplyRelayId(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 closeApplyRelayId = CI_ERROR;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (1u <= bufIndex)
{
closeApplyRelayId = FloodGateConfigDataStru[bufIndex].CloseApplyRelayId;
}
else
{
/*无操作*/
}
return closeApplyRelayId;
}
/*
* 功能描述: 获取指定数组下标对应的开门且锁闭继电器ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门ID
*/
UINT16 GetFloodGateOpenLockRelayId(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 openLockRelayId = CI_ERROR;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (1u <= bufIndex)
{
openLockRelayId = FloodGateConfigDataStru[bufIndex].OpenLockRelayId;
}
else
{
/*无操作*/
}
return openLockRelayId;
}
/*
* 功能描述: 获取指定数组下标对应的允许请求继电器ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门ID
*/
UINT16 GetFloodGateAllowRequestRelayId(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 allowRequestRelayId = CI_ERROR;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (1u <= bufIndex)
{
allowRequestRelayId = FloodGateConfigDataStru[bufIndex].AllowCloseRelayId;
}
else
{
/*无操作*/
}
return allowRequestRelayId;
}
/*
* 功能描述: 获取指定ID防淹门所属联锁ID
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 所属联锁ID
*/
UINT8 GetFloodGateBelongCiId(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 belongCiId = CI_ERROR;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (1u <= bufIndex)
{
belongCiId = FloodGateConfigDataStru[bufIndex].BelongCiId;
}
else
{
/*无操作*/
}
return belongCiId;
}
/*
* 功能描述: 整理读入的防淹门配置数据
* 参数说明: 无
* 返回值 1,整理成功
* 0u,整理失败
*/
UINT8 FloodGateConfigDataManage(void)
{
UINT16 ii = 0u; /*游标*/
UINT16 jj = 0u; /*游标*/
UINT16 floodGateConfigDataSum = 0u; /*防淹门设备配置数据总数*/
UINT8 returnValue = CI_SUCCESS;
/*保存自动折返进路Id索引数组*/
floodGateConfigDataSum = GetFloodGateCurSum();
TotalFloodGateNum = floodGateConfigDataSum;
if (floodGateConfigDataSum >= FLOOD_GATE_SUM_MAX)
{/*配置数据总数错误*/
returnValue = CI_ERROR;
}
else
{
for (ii = 0u; ii < FLOOD_GATE_SUM_MAX; ii++)
{
if (jj == floodGateConfigDataSum)
{/*遍历有效数据完毕*/
break;
}
if (FloodGateConfigDataStru[ii].BelongCiId == GetSystemParaLocalCiId())
{/*该部分为无效数据*/
LocalCiFloodGateIdBuf[jj] = FloodGateConfigDataStru[ii].FloodGateId;
jj++;
}
}
}
return returnValue;
}
/*
* 功能描述: 获取相邻联锁发送给本联锁以及本联锁防淹门当前总数
* 参数说明: void
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门当前总数
*/
UINT16 GetTotalFloodGateCurSum(void)
{
UINT16 retVal = 0u;
if (TotalFloodGateNum >= FLOOD_GATE_SUM_MAX)
{
retVal = 0u;
}
else
{
retVal = TotalFloodGateNum;
}
return retVal;
}
/*
* 功能描述: 整理读入的相邻联锁防淹门数据
* 参数说明:
* UINT16 floodGateSum, 相邻联锁发给本联锁的防淹门数量
* const UINT16 *floodGateIdBuff, 相邻联锁发给本联锁的物理区段ID
* 返回值 0u-失败 1-成功
*/
UINT8 AddExtendFloodGateIdDataManage(UINT16 floodGateSum,const UINT16 *floodGateIdBuff)
{
UINT16 index = 0u; /*数组下标*/
UINT16 ii = 0u;
UINT8 retVal =1u;
if ((TotalFloodGateNum + floodGateSum) >= FLOOD_GATE_SUM_MAX)
{/*入口防护*/
retVal = 0u;
}
else
{
index = TotalFloodGateNum;
TotalFloodGateNum += floodGateSum;
for(ii = 0u;ii< floodGateSum;ii++)
{
LocalCiFloodGateIdBuf[index+ii] = floodGateIdBuff[ii];/*追加到LocalCiFloodGateIdBuf*/
}
}
return retVal;
}
/*
* 功能描述: 获取指定ID防淹门接近区域区段数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 接近区域区段数量
*/
UINT16 GetFloodGateAccessPhySecNum(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = 0u;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (1u <= bufIndex)
{
reVal = FloodGateConfigDataStru[bufIndex].AccessPhySecNum;
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 获取指定ID防淹门接近区域区段信息结构体
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : NULL: 获取数据失败
* !NULL: 接近区域区段结构体
*/
FloodGateAccessPhySecStruct* GetFloodGateAccessPhyDataStru(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
FloodGateAccessPhySecStruct* pPhysecIdStr = NULL;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (1u <= bufIndex)
{
pPhysecIdStr = FloodGateConfigDataStru[bufIndex].AccessPhySecStru;
}
else
{
/*无操作*/
}
return pPhysecIdStr;
}
/*
* 功能描述: 获取指定ID防淹门防护区域区段数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防护区域区段数量
*/
UINT16 GetFloodGateProtectPhySecNum(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = 0u;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (1u <= bufIndex)
{
reVal = FloodGateConfigDataStru[bufIndex].ProtectPhySecNum;
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 获取指定ID防淹门防护区域区段Id数组指针
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : NULL: 获取数据失败
* !NULL: 防护区域区段Id数组指针
*/
UINT16* GetFloodGateProtectPhyIDBuf(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 *pPhysecIdBuf = NULL;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (1u <= bufIndex)
{
pPhysecIdBuf = FloodGateConfigDataStru[bufIndex].ProtectPhySecIdBuf;
}
else
{
/*无操作*/
}
return pPhysecIdBuf;
}
/*
* 功能描述: 获取指定ID防淹门所属联锁ID
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 所属联锁ID
*/
UINT8 GetFloodGateBelongVirCiId(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 belongVirCiId = 0u;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (1u <= bufIndex)
{
belongVirCiId = FloodGateConfigDataStru[bufIndex].BelongVirId;
}
else
{
/*无操作*/
}
return belongVirCiId;
}
/*
* 功能描述: 获取指定ID防淹门接近区域计轴区段数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 接近区域区段数量
*/
UINT16 GetFloodGateAccessAxisNum(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = 0u;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (1u <= bufIndex)
{
reVal = FloodGateConfigDataStru[bufIndex].AccessAxisNum;
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 获取指定ID防淹门接近区域计轴区段Id数组指针
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : NULL: 获取数据失败
* !NULL: 接近区域区段Id数组指针
*/
UINT16* GetFloodGateAccessAxisIDBuf(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 *pPhysecIdBuf = NULL;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (1u <= bufIndex)
{
pPhysecIdBuf = FloodGateConfigDataStru[bufIndex].AccessAxisId;
}
else
{
/*无操作*/
}
return pPhysecIdBuf;
}
/*
* 功能描述: 获取指定ID防淹门防护区域计轴区段数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防护区域区段数量
*/
UINT16 GetFloodGateProtectAxisNum(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = 0u;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (1u <= bufIndex)
{
reVal = FloodGateConfigDataStru[bufIndex].ProtectAxisNum;
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 获取指定ID防淹门防护区域计轴区段Id数组指针
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : NULL: 获取数据失败
* !NULL: 防护区域区段Id数组指针
*/
UINT16* GetFloodGateProtectAxisIDBuf(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 *pPhysecIdBuf = NULL;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (1u <= bufIndex)
{
pPhysecIdBuf = FloodGateConfigDataStru[bufIndex].ProtectAxisId;
}
else
{
/*无操作*/
}
return pPhysecIdBuf;
}
@@ -0,0 +1,225 @@
/********************************************************
*
* 文 件 名: FloodGateConfigDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2014-12-24
* 作 者: 联锁组
* 功能描述: 防淹门配置数据管理头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _FLOODGATE_CONFIG_DATA_MANAGE_H_
#define _FLOODGATE_CONFIG_DATA_MANAGE_H_
#include "FloodGateDefine.h"
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#include "../System/SystemParameterManage.h"
#ifdef __cplusplus
extern "C" {
#endif
/*逻辑区段关联联络线道岔设备结构体*/
typedef struct S_FloodGate_AccessPhySec
{
UINT16 AccessPhySecId; /*接近区域物理区段ID*/
UINT8 AccessPhySecDir; /*接近区段接近方向*/
} FloodGateAccessPhySecStruct;
/*防淹门配置数据结构体*/
typedef struct S_FloodGateConfigDataStruct
{
UINT16 FloodGateId; /*防淹门ID (配置字段)*/
UINT16 CloseApplyRelayId; /*关门请求继电器ID (配置字段)*/
UINT16 OpenLockRelayId; /*开门且锁闭继电器ID (配置字段)*/
UINT16 AllowCloseRelayId; /*允许关门继电器ID (配置字段)*/
UINT16 AccessPhySecNum; /*防淹门接近物理区段数量(计算)*/
FloodGateAccessPhySecStruct AccessPhySecStru[FLOOD_GATE_PROTECT_PHYSECTION_NUM_MAX];
UINT16 AccessAxisNum; /*防淹门接近区域计轴区段数量*/
UINT16 AccessAxisId[FLOOD_GATE_ACCESS_AXIS_NUM_MAX]; /*防淹门接近区域计轴区段ID*/
UINT16 ProtectPhySecNum; /*防淹门防护物理区段数量(计算)*/
UINT16 ProtectPhySecIdBuf[FLOOD_GATE_ACCESS_PHYSECTION_NUM_MAX]; /*防淹门防护物理区段id数组(计算)*/
UINT16 ProtectAxisNum; /*防淹门防护区域计轴区段数量*/
UINT16 ProtectAxisId[FLOOD_GATE_PROTECT_AXIS_NUM_MAX]; /*防淹门防护区域计轴区段ID*/
UINT8 BelongCiId; /* 计算: 所属联锁ID */
UINT8 BelongVirId; /*所属虚拟联锁ID*/
} FloodGateConfigDataStruct;
/*******************************全局变量声明*******************************/
extern FloodGateConfigDataStruct FloodGateConfigDataStru[FLOOD_GATE_SUM_MAX]; /*定义防淹门数据配置结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
extern UINT16 LocalCiFloodGateIdBuf[FLOOD_GATE_SUM_MAX]; /*定义本地联锁防淹门ID映射数组*/
extern INT16 FloodGateCurSum; /*防淹门当前总数*/
extern UINT16 TotalFloodGateNum;/*本联锁和相邻联锁发送给本联锁防淹门总数*/
/*
* 功能描述: 获取防淹门当前总数
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 防淹门当前总数
*/
UINT16 GetFloodGateCurSum(void);
/*
* 功能描述: 获取指定数组下标对应的防淹门ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 防淹门ID
*/
UINT16 GetFloodGateId(const UINT16 bufIndex);
/*
* 功能描述: 获取指定ID防淹门数组下标
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 0: 获取数据失败
* >0: 防淹门ID
*/
UINT16 GetFloodGateBufIndex(const UINT16 floodGateId);
/*
* 功能描述: 获取指定数组下标对应的关门请求继电器ID
* 参数说明: const UINT16 floodGateId, 数组下标
* 返回值 0: 获取数据失败
* >0: 防淹门ID
*/
UINT16 GetFloodGateCloseApplyRelayId(const UINT16 floodGateId);
/*
* 功能描述: 获取指定数组下标对应的开门且锁闭继电器ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 防淹门ID
*/
UINT16 GetFloodGateOpenLockRelayId(const UINT16 floodGateId);
/*
* 功能描述: 获取指定数组下标对应的允许请求继电器ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 防淹门ID
*/
UINT16 GetFloodGateAllowRequestRelayId(const UINT16 floodGateId);
/*
* 功能描述: 获取指定ID防淹门所属联锁ID
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
*/
UINT8 GetFloodGateBelongCiId(const UINT16 floodGateId);
/*
* 功能描述: 整理读入的防淹门配置数据
* 参数说明: 无
* 返回值 1,整理成功
* 0,整理失败
*/
UINT8 FloodGateConfigDataManage(void);
/*
* 功能描述: 整理读入的相邻联锁防淹门数据
* 参数说明:
* UINT16 floodGateSum, 相邻联锁发给本联锁的防淹门数量
* const UINT16 *floodGateIdBuff, 相邻联锁发给本联锁的物理区段ID
* 返回值 0-失败 1-成功
*/
UINT8 AddExtendFloodGateIdDataManage(UINT16 floodGateSum,const UINT16 *floodGateIdBuff);
/*
* 功能描述: 获取相邻联锁发送给本联锁以及本联锁防淹门当前总数
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 防淹门当前总数
*/
UINT16 GetTotalFloodGateCurSum(void);
/*
* 功能描述: 获取指定ID防淹门接近区域区段数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 接近区段数量
*/
UINT16 GetFloodGateAccessPhySecNum(const UINT16 floodGateId);
/*
* 功能描述: 获取指定ID防淹门接近区域区段信息结构体
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 接近区域区段结构体
*/
FloodGateAccessPhySecStruct* GetFloodGateAccessPhyDataStru(const UINT16 floodGateId);
/*
* 功能描述: 获取指定ID防淹门防护区域区段数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防护区域区段数量
*/
UINT16 GetFloodGateProtectPhySecNum(const UINT16 floodGateId);
/*
* 功能描述: 获取指定ID防淹门防护区域区段Id数组指针
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防护区域区段Id数组指针
*/
UINT16* GetFloodGateProtectPhyIDBuf(const UINT16 floodGateId);
/*
* 功能描述: 获取指定ID防淹门所属联锁ID
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 所属联锁ID
*/
UINT8 GetFloodGateBelongVirCiId(const UINT16 floodGateId);
/*
* 功能描述: 获取指定ID防淹门接近区域计轴区段数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防护区域区段数量
*/
UINT16 GetFloodGateAccessAxisNum(const UINT16 floodGateId);
/*
* 功能描述: 获取指定ID防淹门接近区域计轴区段Id数组指针
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防护区域区段Id数组指针
*/
UINT16* GetFloodGateAccessAxisIDBuf(const UINT16 floodGateId);
/*
* 功能描述: 获取指定ID防淹门防护区域计轴区段数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防护区域区段数量
*/
UINT16 GetFloodGateProtectAxisNum(const UINT16 floodGateId);
/*
* 功能描述: 获取指定ID防淹门防护区域计轴区段Id数组指针
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防护区域区段Id数组指针
*/
UINT16* GetFloodGateProtectAxisIDBuf(const UINT16 floodGateId);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,755 @@
/********************************************************
*
* 文 件 名: FloodGateDataManage.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2020-6-24
* 作 者: 联锁组
* 功能描述: 防淹门动态数据管理
* 修改记录:
*
********************************************************/
#include "FloodGateDataManage.h"
#include "CommonMemory.h"
FloodGateDataStruct FloodGateDataStru[FLOOD_GATE_SUM_MAX]; /*定义防淹门动态数据*/
/*
* 功能描述: 获取防淹门数据结构体指针
* 参数说明:
* 返回值
FloodGateDataStruct *
*/
FloodGateDataStruct *GetFloodGateData(void)
{
return FloodGateDataStru;
}
/*
* 功能描述: 获取指定ID防淹门开门锁闭状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门开门锁闭状态
*/
UINT8 GetFloodGateCurOpenLockState(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = 0u;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取自动折返数组下标*/
if (0u < bufIndex)
{
reVal = FloodGateDataStru[bufIndex].CurOpenLockStateFromFYM;
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 设置指定ID防淹门开门锁闭状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 1: 成功
* 0u: 失败
*/
UINT8 SetFloodGateCurOpenLockState(const UINT16 floodGateId,const UINT8 openLockSt)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取自动折返数组下标*/
if (0u < bufIndex)
{
if ((FLOOD_GATE_OPENLOCK == openLockSt) || (FLOOD_GATE_NOT_OPENLOCK == openLockSt))
{/*开启锁闭状态必须为【开启锁闭】或【未开启锁闭】*/
FloodGateDataStru[bufIndex].CurOpenLockStateFromFYM = openLockSt;
reVal = CI_SUCCESS;
}
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 获取指定ID防淹门关门请求状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门关门请求状态
*/
UINT8 GetFloodGateCurCloseRequestSta(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = 0u;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
reVal = FloodGateDataStru[bufIndex].CurCloseRequestStateFromFYM;
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 设置指定ID防淹门关门请求状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 1: 成功
* 0u: 失败
*/
UINT8 SetFloodGateCurCloseRequestSta(const UINT16 floodGateId,const UINT8 closeReqSt)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
if ((FLOOD_GATE_CLOSEREQ == closeReqSt) || (FLOOD_GATE_NOT_CLOSEREQ == closeReqSt))
{/*关门请求状态必须为【关门请求】或【无关门请求】*/
FloodGateDataStru[bufIndex].CurCloseRequestStateFromFYM = closeReqSt;
reVal = CI_SUCCESS;
}
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 获取指定ID防淹门当前同意关门输出状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门同意关门状态
*/
UINT8 GetFloodGateCurAgreeCloseOutSta(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = 0u;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
reVal = FloodGateDataStru[bufIndex].CurAgreeCloseStateOut;
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 设置指定ID防淹门当前同意关门输出状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 1: 成功
* 0u: 失败
*/
UINT8 SetFloodGateCurAgreeCloseOutSta(const UINT16 floodGateId,const UINT8 agreeCloseSt)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
if ((FLOOD_GATE_AGREE_CLOSE == agreeCloseSt) || (FLOOD_GATE_NOT_AGREE_CLOSE == agreeCloseSt))
{/*同意关门的输出状态必须为【同意关闭】或【不同意关闭】*/
FloodGateDataStru[bufIndex].CurAgreeCloseStateOut = agreeCloseSt;
reVal = CI_SUCCESS;
}
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 获取指定ID防淹门zc回复关门许可
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门关门请求状态
*/
UINT8 GetFloodGateCurZCAgrCloseAck(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = 0u;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
reVal = FloodGateDataStru[bufIndex].CurAgreeCloseAckFromZC;
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 设置指定ID防淹门zc回复关门许可
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 1: 成功
* 0u: 失败
*/
UINT8 SetFloodGateCurZCAgrCloseAck(const UINT16 floodGateId,const UINT8 allowCloseSt)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
if ((FLOOD_GATE_ALLOWCLOSE_ZC == allowCloseSt) || (FLOOD_GATE_NOT_ALLOWCLOSE_ZC == allowCloseSt))
{/*关门许可的状态必须为【允许关门】或【不允许关门】*/
FloodGateDataStru[bufIndex].CurAgreeCloseAckFromZC = allowCloseSt;
reVal = CI_SUCCESS;
}
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 获取指定ID防淹门当前同意关门采集状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门同意关门状态
*/
UINT8 GetFloodGateCurAgreeCloseSta(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = 0u;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
reVal = FloodGateDataStru[bufIndex].CurAgreeCloseStateIn;
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 设置指定ID防淹门当前同意关门采集状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 1: 成功
* 0u: 失败
*/
UINT8 SetFloodGateCurAgreeCloseSta(const UINT16 floodGateId,const UINT8 agreeCloseSt)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
if ((FLOOD_GATE_AGREE_CLOSE == agreeCloseSt) || (FLOOD_GATE_NOT_AGREE_CLOSE == agreeCloseSt))
{/*同意关门的采集状态必须为【同意关闭】或【不同意关闭】*/
FloodGateDataStru[bufIndex].CurAgreeCloseStateIn = agreeCloseSt;
reVal = CI_SUCCESS;
}
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 获取指定ID防淹门当前逻辑上的关门状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门状态
*/
UINT8 GetFloodGateCurLogicCloseState(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 floodStateKS = 0u;/*开启锁闭*/
UINT8 floodStateGQ = 0u;/*关门请求*/
UINT8 floodStateYG = 0u;/*运行关闭*/
UINT8 reVal = FLOOD_GATE_CLOSE;/*初始化为防淹门关门*/
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
/*非开启锁闭 或 有关门请求 或 采到允许关闭,三种情况任意之一,均视为防淹门状态为关闭*/
floodStateKS = FloodGateDataStru[bufIndex].CurOpenLockStateFromFYM;
floodStateGQ = FloodGateDataStru[bufIndex].CurCloseRequestStateFromFYM;
floodStateYG = FloodGateDataStru[bufIndex].CurAgreeCloseStateIn;
if (FLOOD_GATE_OPENLOCK == floodStateKS)
{
reVal = FLOOD_GATE_OPEN;/*开启锁闭为开门,除此之外导向安全侧(如0u值),认为是关门*/
}
else
{
reVal = FLOOD_GATE_CLOSE;
}
if (FLOOD_GATE_OPEN == reVal)
{
if (FLOOD_GATE_NOT_CLOSEREQ == floodStateGQ)
{
reVal = FLOOD_GATE_OPEN;/*无关门请求为开门,除此之外导向安全侧(如0u值),认为是关门*/
}
else
{
reVal = FLOOD_GATE_REQ_CLOSE;
}
}
else
{
/*无操作*/
}
if (FLOOD_GATE_OPEN == reVal)
{
if (FLOOD_GATE_NOT_AGREE_CLOSE == floodStateYG)
{
reVal = FLOOD_GATE_OPEN;/*无同意关闭为开门,除此之外导向安全侧(如0u值),认为是关门*/
}
else
{
reVal = FLOOD_GATE_ALLOW_CLOSE;
}
}
else
{
/*无操作*/
}
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 获取指定ID防淹门YGJ混线开始时间
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门混线开始时间
*/
UINT32 GetFloodGateCurYGJCrosLStartCnt(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT32 reVal = 0u;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
reVal = FloodGateDataStru[bufIndex].CurYGJCrossLineStartCount;
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 设置指定ID防淹门YGJ混线开始时间
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 1: 成功
* 0u: 失败
*/
UINT8 SetFloodGateCurYGJCrosLStartCnt(const UINT16 floodGateId,const UINT32 crossLineStartCount)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
FloodGateDataStru[bufIndex].CurYGJCrossLineStartCount = crossLineStartCount;
reVal = CI_SUCCESS;
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 获取指定ID防淹门防淹门接近区段占压延时关门开始时间
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门混线开始时间
*/
UINT32 GetFloodGateDelayCloseStartCnt(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT32 reVal = 0u;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
reVal = FloodGateDataStru[bufIndex].CurFloodGateDelayCloseStartCyc;
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 设置指定ID防淹门防淹门接近区段占压延时关门开始时间
* 参数说明: const UINT16 floodGateId, 防淹门ID
* const UINT32 floodGateDelayCloseStartCount 延迟关门起始周期
* 返回值 void
*/
void SetFloodGateDelayCloseStartCnt(const UINT16 floodGateId, const UINT32 floodGateDelayCloseStartCount)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
FloodGateDataStru[bufIndex].CurFloodGateDelayCloseStartCyc = floodGateDelayCloseStartCount;
}
else
{
/*无操作*/
}
}
/*
* 功能描述: 获取指定ID防淹门关门申请列车数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门关门申请列车数量
*/
UINT8 GetFloodGateCloseApplyIvocSum(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = 0u;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
reVal = FloodGateDataStru[bufIndex].FloodGateCloseApplyIvocSum;
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 设置指定ID防淹门关门申请列车数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* const UINT8 wTrainSum ,防淹门关门申请列车数量
* 返回值 void
*/
void SetFloodGateCloseApplyIvocSum(const UINT16 floodGateId, const UINT8 wTrainSum)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
FloodGateDataStru[bufIndex].FloodGateCloseApplyIvocSum = wTrainSum;
}
else
{
/*无操作*/
}
}
/*
* 功能描述: 获取指定ID防淹门关门申请列车ID
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门关门申请列车ID
*/
UINT16* GetFloodGateCloseApplyIvocId(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 *applyIvocBuf = NULL;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
applyIvocBuf = FloodGateDataStru[bufIndex].FloodGateCloseApplyIvocId;
}
else
{
/*无操作*/
}
return applyIvocBuf;
}
/*
* 功能描述: 设置指定ID防淹门关门申请列车ID
* 参数说明: const UINT16 floodGateId, 防淹门ID
* const UINT16* applyIvocBuf ,申请的列车ID地址
* 返回值 void
*/
void SetFloodGateCloseApplyIvocId(const UINT16 floodGateId, const UINT16* applyIvocBuf)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
(void)CommonMemSet(FloodGateDataStru[bufIndex].FloodGateCloseApplyIvocId,
(UINT32)(sizeof(UINT16)*FLOOD_GATE_APPLY_TRAIN_SUM_MAX),
0U, (UINT32)(sizeof(UINT16)*FLOOD_GATE_APPLY_TRAIN_SUM_MAX)); /*先出清,防止脏数据*/
(void)CommonMemCpy(FloodGateDataStru[bufIndex].FloodGateCloseApplyIvocId, /*赋值申请的列车ID*/
(UINT32)(sizeof(UINT16)*FLOOD_GATE_APPLY_TRAIN_SUM_MAX),
applyIvocBuf, (UINT32)(sizeof(UINT16)*FLOOD_GATE_APPLY_TRAIN_SUM_MAX));
}
}
/*
* 功能描述: 获取指定ID防淹门列车同意防淹门关门请求结构体
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 0: 获取数据失败
* >0: 列车同意防淹门关门请求结构体
*/
FloodGateTrainAnsStruct* GetFloodGateCloseFromIvocStru(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
FloodGateTrainAnsStruct* retVal = NULL;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
retVal = FloodGateDataStru[bufIndex].FloodGateCloseFromIvocStru;
}
else
{
retVal = NULL;
}
return retVal;
}
/*
* 功能描述: 设置指定ID防淹门列车同意防淹门关门请求标志
* 参数说明: UINT16 floodGateId, 防淹门ID
* UINT16 wTrainId, 列车ID
* UINT8 agreeFlag 允许关门标志
* 返回值 void
*/
void SetFloodGateAllowCloseFlagIVOC(UINT16 floodGateId, UINT16 wTrainId, UINT8 agreeFlag)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 trainSumIndex = 0U;
UINT8 ii = 0U;
UINT8 retVal = CI_ERROR;
UINT8 chIvocSum = 0U;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
chIvocSum = GetFloodGateCloseAnsIvocSum(floodGateId); /*获取当前已经同意的列车数量*/
if ((0u < bufIndex) && ((FLOOD_GATE_ALLOWCLOSE_IVOC == agreeFlag) || (FLOOD_GATE_NOT_ALLOWCLOSE_IVOC == agreeFlag)))
{
if (FLOOD_GATE_ALLOWCLOSE_IVOC == agreeFlag)
{
/*同意的才需要计入,未同意的,继续等待*/
retVal = CI_SUCCESS;
trainSumIndex = chIvocSum;
for (ii = 0U; ii < chIvocSum; ii++)
{
if (FloodGateDataStru[bufIndex].FloodGateCloseFromIvocStru[ii].wTrainId == wTrainId)
{
retVal = CI_ERROR; /*已存入过的列车,且回复了,不再存入*/
break;
}
}
if (CI_SUCCESS == retVal)
{
FloodGateDataStru[bufIndex].FloodGateCloseFromIvocStru[trainSumIndex].wTrainId = wTrainId;
FloodGateDataStru[bufIndex].FloodGateCloseFromIvocStru[trainSumIndex].wFloodGateCloseIvocFlag = agreeFlag; /*检查标志的时候,查所有起始周期询问的列车是否都回复了同意*/
chIvocSum++;
SetFloodGateCloseAnsIvocSum(floodGateId, chIvocSum);
}
}
else
{
; /*未同意,不计入*/
}
}
else
{
/*无操作*/
}
}
/*
* 功能描述: 清除指定ID防淹门列车同意防淹门关门请求标志
* 参数说明: UINT16 floodGateId, 防淹门ID
* 返回值 void
*/
void ClearFloodGateAllowClosFlagIVOC(UINT16 floodGateId)
{
UINT8 chIvocSum = 0U;
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 ii = 0U;
chIvocSum = GetFloodGateCloseAnsIvocSum(floodGateId); /*获取当前已经同意的列车数量*/
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if ((0U < bufIndex) && (0U < chIvocSum))
{
for (ii = 0U; ii < chIvocSum; ii++)
{
FloodGateDataStru[bufIndex].FloodGateCloseFromIvocStru[ii].wTrainId = 0U;
FloodGateDataStru[bufIndex].FloodGateCloseFromIvocStru[ii].wFloodGateCloseIvocFlag = FLOOD_GATE_NOT_ALLOWCLOSE_IVOC;
}
SetFloodGateCloseAnsIvocSum(floodGateId, 0U);
}
}
/*
* 功能描述: 获取指定ID防淹门接近区段是否有UT占压标志
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门接近区段是否有UT占压标志
*/
UINT8 GetFloodGateAccessUTFlag(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = 0u;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
reVal = FloodGateDataStru[bufIndex].FloodGateAccessUTFlag;
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 设置指定ID防淹门接近区段是否有UT占压标志
* 参数说明: const UINT16 floodGateId, 防淹门ID
* const UINT8 accessUTFlag,是否有UT占压标志
* 返回值 void
*/
void SetFloodGateAccessUTFlag(const UINT16 floodGateId, const UINT8 accessUTFlag)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
if ((FLOOD_GATE_ACCESS_UT_YES == accessUTFlag) || (FLOOD_GATE_ACCESS_UT_NO == accessUTFlag))
{/*混跑或者纯CT跑*/
FloodGateDataStru[bufIndex].FloodGateAccessUTFlag = accessUTFlag;
}
}
else
{
/*无操作*/
}
}
/*
* 功能描述: 获取指定ID防淹门列车回复允许关门列车数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门列车回复允许关门列车数量
*/
UINT8 GetFloodGateCloseAnsIvocSum(const UINT16 floodGateId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = 0u;
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
reVal = FloodGateDataStru[bufIndex].FloodGateCloseAnsIvocSum;
}
else
{
/*无操作*/
}
return reVal;
}
/*
* 功能描述: 设置指定ID防淹门列车回复允许关门列车数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* const UINT8 wTrainSum ,列车回复允许关门列车数量
* 返回值 void
*/
void SetFloodGateCloseAnsIvocSum(const UINT16 floodGateId, const UINT8 wTrainSum)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetFloodGateBufIndex(floodGateId); /*获取防淹门数组下标*/
if (0u < bufIndex)
{
FloodGateDataStru[bufIndex].FloodGateCloseAnsIvocSum = wTrainSum;
}
else
{
/*无操作*/
}
}
@@ -0,0 +1,294 @@
/********************************************************
*
* 文 件 名: FloodGateDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2020-6-24
* 作 者: 联锁组
* 功能描述: 防淹门动态数据管理头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _FLOODGATE_DATA_MANAGE_H_
#define _FLOODGATE_DATA_MANAGE_H_
#include "FloodGateDefine.h"
#include "FloodGateConfigDataManage.h"
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
/*列车同意防淹门关门请求结构体*/
typedef struct S_FloodGate_CloseTrainAns
{
UINT16 wTrainId; /*列车ID*/
UINT8 wFloodGateCloseIvocFlag; /*防淹门关门请求同意标志*/
} FloodGateTrainAnsStruct;
/*防淹门数据结构体*/
typedef struct S_FloodGateDataStruct
{
UINT16 FloodGateId; /*防淹门ID (初始化字段)*/
UINT8 CurOpenLockStateFromFYM; /*当前开门且锁闭状态 (动态字段)FLOOD_GATE_OPENLOCK、FLOOD_GATE_NOT_OPENLOCK*/
UINT8 CurCloseRequestStateFromFYM; /*当前关门请求状态(动态字段):FLOOD_GATE_CLOSEREQ、FLOOD_GATE_NOT_CLOSEREQ*/
/*当检查防淹门关联区段全部空闲,且关门请求继电器吸起有效时,发申请*/
UINT8 CurAgreeCloseAckFromZC;/*当前zc回复关门许可:FLOOD_GATE_ALLOWCLOSE_ZC、FLOOD_GATE_NOT_ALLOWCLOSE_ZC*/
UINT8 CurAgreeCloseStateIn; /*当前同意关门输入状态(动态字段):FLOOD_GATE_AGREE_CLOSE、FLOOD_GATE_NOT_AGREE_CLOSE*/
/*当前同意关门状态需综合如下两个条件:
* 条件1:当前关门请求状态;
*
* 条件2:CI检查是否满足关门条件,条件2又分为如下两种情况,任一情况满足,则条件2满足
* 情况1:与zc通信故障时,且防淹门关联物理区段全部空闲
* 情况2:与zc通信良好时,且防淹门所在区段全部空闲,且ZC回复防淹门关闭许可有效;
*
* 条件1为当前关门请求为是,且条件2满足,当前同意关门状态才为同意;
*/
UINT8 CurAgreeCloseStateOut; /*当前同意关门输出状态(动态字段):FLOOD_GATE_AGREE_CLOSE、FLOOD_GATE_NOT_AGREE_CLOSE*/
UINT32 CurYGJCrossLineStartCount;/*当前YGJ混线开始时间*/
UINT32 CurFloodGateDelayCloseStartCyc; /*防淹门接近区段占压延时关门开始时间*/
UINT8 FloodGateCloseApplyIvocSum; /*防淹门关门申请列车数量*/
UINT16 FloodGateCloseApplyIvocId[FLOOD_GATE_APPLY_TRAIN_SUM_MAX]; /*防淹门关门申请列车ID*/
UINT8 FloodGateCloseAnsIvocSum; /*防淹门关门允许,列车回复数量*/
FloodGateTrainAnsStruct FloodGateCloseFromIvocStru[FLOOD_GATE_APPLY_TRAIN_SUM_MAX]; /*列车同意防淹门关门请求结构体*/
UINT8 FloodGateAccessUTFlag; /*防淹门接近区段是否有非通信车标志*/
} FloodGateDataStruct;
/*******************************全局变量声明*******************************/
extern FloodGateDataStruct FloodGateDataStru[FLOOD_GATE_SUM_MAX]; /*定义防淹门动态数据*/
/*
* 功能描述: 获取防淹门数据结构体指针
* 参数说明:
* 返回值
FloodGateDataStruct *
*/
FloodGateDataStruct *GetFloodGateData(void);
/*
* 功能描述: 获取指定ID防淹门开门锁闭状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 0: 获取数据失败
* >0: 防淹门开门锁闭状态
*/
UINT8 GetFloodGateCurOpenLockState(const UINT16 floodGateId);
/*
* 功能描述: 设置指定ID防淹门开门锁闭状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 1: 成功
* 0: 失败
*/
UINT8 SetFloodGateCurOpenLockState(const UINT16 floodGateId,const UINT8 openLockSt);
/*
* 功能描述: 获取指定ID防淹门关门请求状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 0: 获取数据失败
* >0: 防淹门关门请求状态
*/
UINT8 GetFloodGateCurCloseRequestSta(const UINT16 floodGateId);
/*
* 功能描述: 设置指定ID防淹门关门请求状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 1: 成功
* 0: 失败
*/
UINT8 SetFloodGateCurCloseRequestSta(const UINT16 floodGateId,const UINT8 closeReqSt);
/*
* 功能描述: 获取指定ID防淹门当前同意关门输出状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 0: 获取数据失败
* >0: 防淹门同意关门状态
*/
UINT8 GetFloodGateCurAgreeCloseOutSta(const UINT16 floodGateId);
/*
* 功能描述: 设置指定ID防淹门当前同意关门输出状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 1: 成功
* 0: 失败
*/
UINT8 SetFloodGateCurAgreeCloseOutSta(const UINT16 floodGateId,const UINT8 agreeCloseSt);
/*
* 功能描述: 获取指定ID防淹门当前同意关门采集状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 0: 获取数据失败
* >0: 防淹门同意关门状态
*/
UINT8 GetFloodGateCurAgreeCloseSta(const UINT16 floodGateId);
/*
* 功能描述: 设置指定ID防淹门当前同意关门采集状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 1: 成功
* 0: 失败
*/
UINT8 SetFloodGateCurAgreeCloseSta(const UINT16 floodGateId,const UINT8 agreeCloseSt);
/*
* 功能描述: 获取指定ID防淹门zc回复关门许可
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 0: 获取数据失败
* >0: 防淹门关门请求状态
*/
UINT8 GetFloodGateCurZCAgrCloseAck(const UINT16 floodGateId);
/*
* 功能描述: 设置指定ID防淹门zc回复关门许可
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 1: 成功
* 0: 失败
*/
UINT8 SetFloodGateCurZCAgrCloseAck(const UINT16 floodGateId,const UINT8 allowCloseSt);
/*
* 功能描述: 获取指定ID防淹门当前逻辑上的关门状态
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 0: 获取数据失败
* >0: 防淹门状态
*/
UINT8 GetFloodGateCurLogicCloseState(const UINT16 floodGateId);
/*
* 功能描述: 获取指定ID防淹门YGJ混线开始时间
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 0: 获取数据失败
* >0: 防淹门混线开始时间
*/
UINT32 GetFloodGateCurYGJCrosLStartCnt(const UINT16 floodGateId);
/*
* 功能描述: 设置指定ID防淹门YGJ混线开始时间
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 1: 成功
* 0: 失败
*/
UINT8 SetFloodGateCurYGJCrosLStartCnt(const UINT16 floodGateId,const UINT32 crossLineStartCount);
/*
* 功能描述: 获取指定ID防淹门防淹门接近区段占压延时关门开始时间
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门混线开始时间
*/
UINT32 GetFloodGateDelayCloseStartCnt(const UINT16 floodGateId);
/*
* 功能描述: 设置指定ID防淹门防淹门接近区段占压延时关门开始时间
* 参数说明: const UINT16 floodGateId, 防淹门ID
* const UINT32 floodGateDelayCloseStartCount 延迟关门起始周期
* 返回值 void
*/
void SetFloodGateDelayCloseStartCnt(const UINT16 floodGateId, const UINT32 floodGateDelayCloseStartCount);
/*
* 功能描述: 获取指定ID防淹门关门申请列车数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门关门申请列车数量
*/
UINT8 GetFloodGateCloseApplyIvocSum(const UINT16 floodGateId);
/*
* 功能描述: 设置指定ID防淹门关门申请列车数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* const UINT8 wTrainSum ,防淹门关门申请列车数量
* 返回值 void
*/
void SetFloodGateCloseApplyIvocSum(const UINT16 floodGateId, const UINT8 wTrainSum);
/*
* 功能描述: 获取指定ID防淹门关门申请列车ID
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门关门申请列车ID
*/
UINT16* GetFloodGateCloseApplyIvocId(const UINT16 floodGateId);
/*
* 功能描述: 设置指定ID防淹门关门申请列车ID
* 参数说明: const UINT16 floodGateId, 防淹门ID
* const UINT16* applyIvocBuf ,申请的列车ID地址
* 返回值 void
*/
void SetFloodGateCloseApplyIvocId(const UINT16 floodGateId, const UINT16* applyIvocBuf);
/*
* 功能描述: 获取指定ID防淹门列车同意防淹门关门请求结构体
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 0: 获取数据失败
* >0: 列车同意防淹门关门请求结构体
*/
FloodGateTrainAnsStruct* GetFloodGateCloseFromIvocStru(const UINT16 floodGateId);
/*
* 功能描述: 设置指定ID防淹门列车同意防淹门关门请求标志
* 参数说明: UINT16 floodGateId, 防淹门ID
* UINT16 wTrainId, 列车ID
* UINT8 agreeFlag 允许关门标志
* 返回值 void
*/
void SetFloodGateAllowCloseFlagIVOC(UINT16 floodGateId, UINT16 wTrainId, UINT8 agreeFlag);
/*
* 功能描述: 清除指定ID防淹门列车同意防淹门关门请求标志
* 参数说明: UINT16 floodGateId, 防淹门ID
* 返回值 void
*/
void ClearFloodGateAllowClosFlagIVOC(UINT16 floodGateId);
/*
* 功能描述: 获取指定ID防淹门接近区段是否有UT占压标志
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门接近区段是否有UT占压标志
*/
UINT8 GetFloodGateAccessUTFlag(const UINT16 floodGateId);
/*
* 功能描述: 设置指定ID防淹门接近区段是否有UT占压标志
* 参数说明: const UINT16 floodGateId, 防淹门ID
* const UINT8 accessUTFlag,是否有UT占压标志
* 返回值 void
*/
void SetFloodGateAccessUTFlag(const UINT16 floodGateId, const UINT8 accessUTFlag);
/*
* 功能描述: 获取指定ID防淹门列车回复允许关门列车数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门列车回复允许关门列车数量
*/
UINT8 GetFloodGateCloseAnsIvocSum(const UINT16 floodGateId);
/*
* 功能描述: 设置指定ID防淹门列车回复允许关门列车数量
* 参数说明: const UINT16 floodGateId, 防淹门ID
* const UINT8 wTrainSum ,列车回复允许关门列车数量
* 返回值 : 0u: 获取数据失败
* >0u: 防淹门列车回复允许关门列车数量
*/
void SetFloodGateCloseAnsIvocSum(const UINT16 floodGateId, const UINT8 wTrainSum);
#endif
@@ -0,0 +1,68 @@
/********************************************************
*
* 文 件 名: FloodGateDefine.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2014-12-24
* 作 者: 联锁组
* 功能描述: 防淹门配置头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _FLOODGATE_DEFINE_H_
#define _FLOODGATE_DEFINE_H_
/*防淹门总数最大值*/
#define FLOOD_GATE_SUM_MAX ((UINT16)50) /*定义防淹门数量最大值*/
/*防淹门状态*/
#define FLOOD_GATE_STATE_OPEN ((UINT8)0x55) /*定义防淹门开放状态*/
#define FLOOD_GATE_STATE_CLOSE ((UINT8)0xaa) /*定义防淹门关闭状态*/
#define FLOOD_GATE_PROTECT_PHYSECTION_NUM_MAX ((UINT8)100U) /*防淹门防护物理区段最大数量*/
#define FLOOD_GATE_ACCESS_PHYSECTION_NUM_MAX ((UINT8)100U) /*防淹门接近物理区段最大数量*/
#define FLOOD_GATE_OPENLOCK ((UINT8)0xaa) /*防淹门-开门且锁定*/
#define FLOOD_GATE_NOT_OPENLOCK ((UINT8)0x55) /*防淹门-未开门且锁定*/
#define FLOOD_GATE_CLOSEREQ ((UINT8)0xaa) /*防淹门-关门请求*/
#define FLOOD_GATE_NOT_CLOSEREQ ((UINT8)0x55) /*防淹门-无关门请求*/
#define FLOOD_GATE_APPLYCLOSE_ZC ((UINT8)0xaa) /*向zc申请关防淹门请求*/
#define FLOOD_GATE_NOT_APPLYCLOSE_ZC ((UINT8)0x55) /*不向zc申请关防淹门请求*/
#define FLOOD_GATE_ALLOWCLOSE_ZC ((UINT8)0xaa) /*ZC回复关门请求:允许关门*/
#define FLOOD_GATE_NOT_ALLOWCLOSE_ZC ((UINT8)0x55) /*ZC回复关门请求:不允许关门*/
#define FLOOD_GATE_ALLOWCLOSE_IVOC ((UINT8)0xaa) /*IVOC回复关门请求:允许关门*/
#define FLOOD_GATE_NOT_ALLOWCLOSE_IVOC ((UINT8)0x55) /*IVOC回复关门请求:不允许关门*/
#define FLOOD_GATE_AGREE_CLOSE ((UINT8)0xaa) /*当前同意关门状态:同意关门*/
#define FLOOD_GATE_NOT_AGREE_CLOSE ((UINT8)0x55) /*当前同意关门状态:不同意关门*/
#define FLOOD_GATE_ACCESS_UT_YES ((UINT8)0x55) /*防淹门接近区段有UT占压,混跑*/
#define FLOOD_GATE_ACCESS_UT_NO ((UINT8)0xAA) /*防淹门接近区段无UT占压,纯CT跑*/
#define FLOOD_GATE_OPEN ((UINT8)0x55) /*防淹门开门*/
#define FLOOD_GATE_CLOSE ((UINT8)0xaa) /*防淹门关门*/
/*其他联锁条件使用*/
#define FLOOD_GATE_REQ_CLOSE ((UINT8)0x5a) /*防淹门请求关闭*/
#define FLOOD_GATE_ALLOW_CLOSE ((UINT8)0xa5) /*防淹门同意关门*/
#define FLOOD_GATE_YGJ_CROSS_LINE_MAX_COUNT ((UINT8)5) /*防淹门混线持续周期*/
#define FLOOD_GATE_ACCESS_AXIS_NUM_MAX ((UINT8)100U) /*防淹门关联接近区域最大计轴区段数量*/
#define FLOOD_GATE_PROTECT_AXIS_NUM_MAX ((UINT8)100U) /*防淹门关联防护区域最大计轴区段数量*/
#define FLOOD_GATE_APPLY_TRAIN_SUM_MAX ((UINT8)80U) /*防淹门申请关门请求以及回复的列车最大数量-车车使用*/
#define FLOOD_GATE_ACCESS_DIR ((UINT8)0x55) /*防淹门接近区段接近方向-LINK同向*/
#define FLOOD_GATE_AWAY_DIR ((UINT8)0xaa) /*防淹门接近区段接近方向-LINK反向*/
#define FLOOD_GATE_DEFAULT_DIR ((UINT8)0xff) /*防淹门接近区段接近方向-默认方向*/
#endif
@@ -0,0 +1,679 @@
/********************************************************
*
* 文 件 名: GaragedoorConfigDataManage.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2014-12-17
* 作 者: 联锁组
* 功能描述: 车库门配置数据管理
* 修改记录:
*
********************************************************/
#include "GaragedoorConfigDataManage.h"
#include "LinkConfigDataManage.h"
#include "SignalConfigDataManage.h"
GaragedoorConfigDataStruct GaragedoorConfigDataStru[GARAGE_DOOR_SUM_MAX]; /*定义车库门数据配置结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
UINT16 LocalCiGaragedoorIdBuf[GARAGE_DOOR_SUM_MAX] = {0u}; /*定义本地联锁车库门ID映射数组*/
INT16 GaragedoorCurSum = 0; /*车库门当前总数*/
/*
* 功能描述: 获取车库门当前总数
* 参数说明: void
* 返回值 : 0u: 获取数据失败
* >0u: 车库门当前总数
*/
UINT16 GetGaragedoorSum(void)
{
UINT16 garagedoorCurSum = 0u;
if ((INT16)GARAGE_DOOR_SUM_MAX <= GaragedoorCurSum)
{
garagedoorCurSum = GARAGE_DOOR_SUM_MAX;
}
else if (0 > GaragedoorCurSum)
{
garagedoorCurSum = 0u;
}
else
{
garagedoorCurSum = (UINT16)GaragedoorCurSum;
}
return garagedoorCurSum;
}
/*
* 功能描述: 获取指定数组下标对应的车库门ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 : 0u: 获取数据失败
* >0u: 车库门ID
*/
UINT16 GetGaragedoorId(const UINT16 bufIndex)
{
UINT16 garagedoorId = CI_ERROR;
if (bufIndex < GetGaragedoorSum())
{
garagedoorId = LocalCiGaragedoorIdBuf[bufIndex];
}
return garagedoorId;
}
/*
* 功能描述: 获取指定ID车库门索引号
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 GARAGE_DOOR_SUM_MAX: 获取数据失败
* <GARAGE_DOOR_SUM_MAX: 查找成功
*/
UINT16 GetGaragedoorConfigBufIndex(const UINT16 garagedoorId)
{
UINT16 index = 0u;
if ((garagedoorId >= 1u) && (garagedoorId < GARAGE_DOOR_SUM_MAX))
{
index = garagedoorId;
}
else
{
index = GARAGE_DOOR_SUM_MAX;
}
return index;
}
/*
* 功能描述: 获取指定ID车库门所属联锁ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 所属联锁ID
*/
UINT8 GetGaragedoorBelongCiId(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 belongCiId = CI_ERROR;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
belongCiId = GaragedoorConfigDataStru[bufIndex].BelongCiId;
}
return belongCiId;
}
/*
* 功能描述: 获取指定ID车库门开门继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 车库门开门继电器ID
*/
UINT16 GetGaragedoorOpenRelayId(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 garagedoorRelayId = CI_ERROR;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
garagedoorRelayId = GaragedoorConfigDataStru[bufIndex].GardoorOpenRelayId;
}
return garagedoorRelayId;
}
/*
* 功能描述: 获取指定ID车库门关门继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 车库门关门继电器ID
*/
UINT16 GetGardoorCloseRelayId(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 garagedoorRelayId = CI_ERROR;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
garagedoorRelayId = GaragedoorConfigDataStru[bufIndex].GardoorCloseRelayId;
}
return garagedoorRelayId;
}
/*
* 功能描述: 获取指定ID车库门开门命令继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 车库门开门命令继电器ID
*/
UINT16 GetGardoorOpenOrderRelayId(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 garagedoorRelayId = CI_ERROR;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
garagedoorRelayId = GaragedoorConfigDataStru[bufIndex].GardoorOpenOrderRelayId;
}
return garagedoorRelayId;
}
/*
* 功能描述: 获取指定ID车库门关门命令继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 车库门关门命令继电器ID
*/
UINT16 GetGardoorCloseOrderRelayId(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 garagedoorRelayId = CI_ERROR;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
garagedoorRelayId = GaragedoorConfigDataStru[bufIndex].GardoorCloseOrderRelayId;
}
return garagedoorRelayId;
}
/*
* 功能描述: 获取指定ID车库门模式状态继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 模式状态继电器ID
*/
UINT16 GetGardoorModeStateRelayId(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
reVal = GaragedoorConfigDataStru[bufIndex].GardoorModeStateRelayId;
}
return reVal;
}
/*
* 功能描述: 获取指定ID车库门故障状态继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 故障状态继电器ID
*/
UINT16 GetGardoorFaultStateRelayId(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
reVal = GaragedoorConfigDataStru[bufIndex].GardoorFaultStateRelayId;
}
return reVal;
}
/*
* 功能描述: 获取指定ID车库门旁路继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 旁路继电器ID
*/
UINT16 GetGardoorPangLuRelayId(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
reVal = GaragedoorConfigDataStru[bufIndex].GardoorPangLuRelayId;
}
return reVal;
}
/*
* 功能描述: 获取指定ID车库门开关状态后节点继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 开关后继电器ID
*/
UINT16 GetGardoorKGHRelayId(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = CI_ERROR;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
reVal = GaragedoorConfigDataStru[bufIndex].GardoorKGHRelayId;
}
return reVal;
}
/*
* 功能描述: 获取指定ID车库门防护信号机总数
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防护信号机总数
*/
UINT16 GetGardoorProtectSigSum(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = 0u;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
reVal = GaragedoorConfigDataStru[bufIndex].signalSum;
}
return reVal;
}
/*
* 功能描述: 根据下标获取指定ID车库门防护信号机ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT16 sigIndex, 防护信号机下标
* 返回值 : 0u: 获取数据失败
* >0u: 防护信号机ID
*/
UINT16 GetGardoorProtectSigIdByIndex(const UINT16 garagedoorId,const UINT16 sigIndex)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = 0u;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
if (sigIndex < GaragedoorConfigDataStru[bufIndex].signalSum)
{
reVal = GaragedoorConfigDataStru[bufIndex].signalIdBuff[sigIndex];
}
}
return reVal;
}
/*
* 功能描述: 获取指定ID车库门spks总数
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: SPKS总数
*/
UINT16 GetGarageSpksSum(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = 0u;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
reVal = GaragedoorConfigDataStru[bufIndex].GardoorSpksSum;
}
return reVal;
}
/*
* 功能描述: 根据下标获取指定ID车库门spksID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT16 spksIndex, spks下标
* 返回值 : 0u: 获取数据失败
* >0u: SPKS ID
*/
UINT16 GetGarageSpksIdBuff(const UINT16 garagedoorId,const UINT16 spksIndex)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = 0u;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
if (spksIndex < GaragedoorConfigDataStru[bufIndex].GardoorSpksSum)
{
reVal = GaragedoorConfigDataStru[bufIndex].spksIdBuff[spksIndex];
}
}
return reVal;
}
/*
* 功能描述: 获取指定ID车库门关联的物理区段总数
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 物理区段总数
*/
UINT16 GetGardoorphySecSum(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = 0u;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
reVal = GaragedoorConfigDataStru[bufIndex].GardoorphySecSum;
}
return reVal;
}
/*
* 功能描述: 根据下标获取指定ID车库门物理区段ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT16 phyIndex, 物理区段下标
* 返回值 : 0u: 获取数据失败
* >0u: 物理区段 ID
*/
UINT16 GetGardoorphySecBuf(const UINT16 garagedoorId,const UINT16 phyIndex)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 reVal = 0u;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
if (phyIndex < GaragedoorConfigDataStru[bufIndex].GardoorphySecSum)
{
reVal = GaragedoorConfigDataStru[bufIndex].GardoorphySecBuf[phyIndex];
}
}
return reVal;
}
/*
* 功能描述: 整理读入的车库门配置数据
* 参数说明: 无
* 返回值 CI_SUCCESS,整理成功
* CI_ERROR,整理失败
*/
UINT8 GaragedoorConfigDataManage(void)
{
UINT16 ii = 0u; /*游标*/
UINT16 jj = 0u; /*游标*/
UINT16 garagedoorConfigDataSum = 0u; /*车库门配置数据总数*/
UINT8 returnValue = CI_SUCCESS;
/*保存车库门ID索引数组*/
garagedoorConfigDataSum = GetGaragedoorSum();
if (garagedoorConfigDataSum >= GARAGE_DOOR_SUM_MAX)
{/*配置数据总数错误*/
returnValue = CI_ERROR;
}
else
{
for (ii = 0u; ii < GARAGE_DOOR_SUM_MAX; ii++)
{
if (jj == garagedoorConfigDataSum)
{/*遍历有效数据完毕*/
break;
}
if (GaragedoorConfigDataStru[ii].BelongCiId == GetSystemParaLocalCiId())
{/*该部分为无效数据*/
LocalCiGaragedoorIdBuf[jj] = GaragedoorConfigDataStru[ii].GaragedoorId;
jj++;
}
}
}
return returnValue;
}
/*
* 功能描述: 获取指定ID车库门关联进路总数
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 进路总数
*/
UINT8 GetGardoorRouteSum(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = 0u;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
reVal = GaragedoorConfigDataStru[bufIndex].GardoorRouteSum;
}
return reVal;
}
/*
* 功能描述: 获取指定ID车库门关联进路ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 关联进路ID
*/
UINT16* GetGardoorRouteIdBuf(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* reVal = NULL;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
reVal = GaragedoorConfigDataStru[bufIndex].GardoorRouteBuf;
}
return reVal;
}
/*
* 功能描述: 获取指定ID车库门所属虚拟联锁ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 所属虚拟联锁ID
*/
UINT8 GetGaragedoorBelongVirCiId(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 belongVirCiId = CI_ERROR;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
belongVirCiId = GaragedoorConfigDataStru[bufIndex].BelongVirCiId;
}
return belongVirCiId;
}
/*
* 功能描述: 获取指定ID车库门对应A库线物理区段ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0 查找失败
>0 A库线物理区段ID
* BY LC
*/
UINT16 GetGarageDoorAKuPhySec(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 phySecIdA = CI_ERROR;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
phySecIdA = GaragedoorConfigDataStru[bufIndex].phySecAKUId;
}
return phySecIdA;
}
/*
* 功能描述: 获取指定ID车库门属性
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0 查找失败
0x55 列检库
0xaa 洗车库
*/
UINT8 GetGarageDoorAttribute(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 flag = 0U;
UINT8 attribute = CI_ERROR;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
flag = GaragedoorConfigDataStru[bufIndex].depotAttribute;
}
if (1U == flag)
{
attribute = GARAGE_DOOR_ATTRIBUTE_LJK;
}
else if (2U == flag)
{
attribute = GARAGE_DOOR_ATTRIBUTE_XCK;
}
else
{
attribute = CI_ERROR;
}
return attribute;
}
/*
* 功能描述: 获取指定ID车库门防护信号机ID数组
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防护信号机ID
*/
UINT16* GetGardoorProtectSigId(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* reVal = NULL;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
reVal = GaragedoorConfigDataStru[bufIndex].signalIdBuff;
}
return reVal;
}
/*
* 功能描述: 获取指定ID车库门出库信号机防护方向
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 方向
*/
UINT8 GetGardoorProOutDir(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT16* proSignalIdBuff = NULL;
UINT8 reVal = CI_ERROR;
UINT8 proSignalOutDir = 0U;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
/*获取出库信号机防护方向*/
proSignalIdBuff = GetGardoorProtectSigId(garagedoorId);
if (NULL != proSignalIdBuff)
{
proSignalOutDir = GetSignalDirection(proSignalIdBuff[0]);
if ((DIR_SAME == proSignalOutDir) || (DIR_CONVERT == proSignalOutDir))
{
reVal = proSignalOutDir;
}
else
{
/* 方向无效*/
}
}
else
{
/*查询失败*/
}
}
return reVal;
}
/*
* 功能描述: 获取指定ID车库门所在link
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 linkID
* BY LC
*/
UINT16 GetGardoorPointLink(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 gdLink = 0U;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
gdLink = GaragedoorConfigDataStru[bufIndex].GardoorLinkId;
}
return gdLink;
}
/*
* 功能描述: 获取指定ID车库门所在link偏移量
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 偏移量
* BY LC
*/
UINT32 GetGardoorPointLinkOffset(const UINT16 garagedoorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT32 gdLinkOffest = 0U;
bufIndex = GetGaragedoorConfigBufIndex(garagedoorId); /*获取数组下标*/
if (bufIndex < GARAGE_DOOR_SUM_MAX)
{
gdLinkOffest = GaragedoorConfigDataStru[bufIndex].GardoorOffset;
}
return gdLinkOffest;
}
@@ -0,0 +1,296 @@
/********************************************************
*
* 文 件 名: GaragedoorConfigDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2014-12-17
* 作 者: 联锁组
* 功能描述: 车库门配置数据管理头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _GARAGE_DOOR_CONFIG_DATA_MANAGE_H_
#define _GARAGE_DOOR_CONFIG_DATA_MANAGE_H_
#include "GaragedoorDefine.h"
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#include "../System/SystemParameterManage.h"
#ifdef __cplusplus
extern "C" {
#endif
/*车库门接口数据结构体*/
typedef struct S_GaragedoorConfigDataStruct
{
UINT16 GaragedoorId; /*车库门ID (配置字段)*/
UINT8 BelongCiId; /*所属联锁ID*/
UINT8 BelongVirCiId; /*所属联锁ID*/
UINT16 GardoorOpenRelayId; /*车库门开门继电器ID*/
UINT16 GardoorCloseRelayId; /*车库门关门继电器ID*/
UINT16 GardoorOpenOrderRelayId; /*车库门开门命令继电器ID*/
UINT16 GardoorCloseOrderRelayId; /*车库门关门命令继电器ID*/
UINT16 GardoorModeStateRelayId; /*车库门模式状态继电器ID*/
UINT16 GardoorFaultStateRelayId; /*车库门故障状态继电器ID*/
UINT16 GardoorPangLuRelayId; /*车库门旁路继电器ID*/
UINT16 GardoorKGHRelayId; /*车库门开关状态后节点继电器ID*/
UINT16 phySecAKUId; /*车库门对应A库线物理区段ID*/
UINT8 depotAttribute; /*车库门属性*/
UINT16 signalSum; /* 防护信号机数量 */
UINT16 signalIdBuff[GARAGE_DOOR_SIG_MAX]; /* 防护信号机ID */
UINT16 GardoorphySecSum; /*车库门关联的物理区段总数*/
UINT16 GardoorphySecBuf[GARAGE_DOOR_PHY_SEC_MAX];/*车库门关联的物理区段ID*/
UINT16 GardoorSpksSum; /* SPKS数量 */
UINT16 spksIdBuff[GARAGE_DOOR_SPKS_MAX]; /* SPKSID */
UINT8 GardoorRouteSum; /*车库门关联的进路总数*/
UINT16 GardoorRouteBuf[GARAGE_DOOR_ROUTE_MAX]; /*车库门关联的进路ID*/
UINT16 GardoorLinkId; /*车库门所在Link编号*/
UINT32 GardoorOffset; /*车库门所在Link偏移量*/
} GaragedoorConfigDataStruct;
/*******************************全局变量声明*******************************/
extern GaragedoorConfigDataStruct GaragedoorConfigDataStru[GARAGE_DOOR_SUM_MAX]; /*定义车库门数据配置结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
extern UINT16 LocalCiGaragedoorIdBuf[GARAGE_DOOR_SUM_MAX]; /*定义本地联锁车库门ID映射数组*/
extern INT16 GaragedoorCurSum; /*车库门当前总数*/
/*
* 功能描述: 获取车库门当前总数
* 参数说明: void
* 返回值 0: 获取数据失败
* >0: 车库门当前总数
*/
UINT16 GetGaragedoorSum(void);
/*
* 功能描述: 获取指定数组下标对应的车库门ID
* 参数说明: const UINT16 bufIndex, 数组下标
* 返回值 0: 获取数据失败
* >0: 车库门ID
*/
UINT16 GetGaragedoorId(const UINT16 bufIndex);
/*
* 功能描述: 获取指定ID车库门索引号
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 GARAGE_DOOR_SUM_MAX: 获取数据失败
* <GARAGE_DOOR_SUM_MAX: 查找成功
*/
UINT16 GetGaragedoorConfigBufIndex(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门所属联锁ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
*/
UINT8 GetGaragedoorBelongCiId(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门开门继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 车库门继电器ID
*/
UINT16 GetGaragedoorOpenRelayId(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门关门继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 车库门继电器ID
*/
UINT16 GetGardoorCloseRelayId(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门开门命令继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 车库门继电器ID
*/
UINT16 GetGardoorOpenOrderRelayId(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门关门命令继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 车库门继电器ID
*/
UINT16 GetGardoorCloseOrderRelayId(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门模式状态继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 模式状态继电器ID
*/
UINT16 GetGardoorModeStateRelayId(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门故障状态继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 故障状态继电器ID
*/
UINT16 GetGardoorFaultStateRelayId(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门旁路继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 旁路继电器ID
*/
UINT16 GetGardoorPangLuRelayId(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门开关状态后节点继电器ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 开关后继电器ID
*/
UINT16 GetGardoorKGHRelayId(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门防护信号机总数
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 防护信号机总数
*/
UINT16 GetGardoorProtectSigSum(const UINT16 garagedoorId);
/*
* 功能描述: 根据下标获取指定ID车库门防护信号机ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT16 sigIndex, 防护信号机下标
* 返回值 0: 获取数据失败
* >0: 防护信号机ID
*/
UINT16 GetGardoorProtectSigIdByIndex(const UINT16 garagedoorId,const UINT16 sigIndex);
/*
* 功能描述: 获取指定ID车库门spks总数
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: SPKS总数
*/
UINT16 GetGarageSpksSum(const UINT16 garagedoorId);
/*
* 功能描述: 根据下标获取指定ID车库门spksID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT16 spksIndex, spks下标
* 返回值 0: 获取数据失败
* >0: SPKS ID
*/
UINT16 GetGarageSpksIdBuff(const UINT16 garagedoorId,const UINT16 spksIndex);
/*
* 功能描述: 获取指定ID车库门关联的物理区段总数
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 物理区段总数
*/
UINT16 GetGardoorphySecSum(const UINT16 garagedoorId);
/*
* 功能描述: 根据下标获取指定ID车库门物理区段ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT16 phyIndex, 物理区段下标
* 返回值 0: 获取数据失败
* >0: 物理区段 ID
*/
UINT16 GetGardoorphySecBuf(const UINT16 garagedoorId,const UINT16 phyIndex);
/*
* 功能描述: 整理读入的车库门配置数据
* 参数说明: 无
* 返回值 CI_SUCCESS,整理成功
* CI_ERROR,整理失败
*/
UINT8 GaragedoorConfigDataManage(void);
/*
* 功能描述: 获取指定ID车库门关联进路总数
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 进路总数
*/
UINT8 GetGardoorRouteSum(const UINT16 garagedoorId);
/*
* 功能描述: 根据下标获取指定ID车库门关联进路ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 关联进路ID
*/
UINT16* GetGardoorRouteIdBuf(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门所属虚拟联锁ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 所属虚拟联锁ID
*/
UINT8 GetGaragedoorBelongVirCiId(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门对应A库线物理区段ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0 查找失败
>0 A库线物理区段ID
*/
UINT16 GetGarageDoorAKuPhySec(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门属性
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0 查找失败
1 列检库
2 洗车库
*/
UINT8 GetGarageDoorAttribute(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门防护信号机ID数组
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 防护信号机ID
*/
UINT16* GetGardoorProtectSigId(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门出库信号机防护方向
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 方向
*/
UINT8 GetGardoorProOutDir(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门所在link
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 linkID
* BY LC
*/
UINT16 GetGardoorPointLink(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门所在link偏移量
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 偏移量
* BY LC
*/
UINT32 GetGardoorPointLinkOffset(const UINT16 garagedoorId);
#ifdef __cplusplus
}
#endif
#endif
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,387 @@
/********************************************************
*
* 文 件 名: GaragedoorDataManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2014-12-17
* 作 者: 联锁组
* 功能描述: 车库门数据管理头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _GARAGEDOOR_DATA_MANAGE_H_
#define _GARAGEDOOR_DATA_MANAGE_H_
#include "GaragedoorDefine.h"
#include "GaragedoorConfigDataManage.h"
#include "CommonTypes.h"
#include "../DataManage/DeviceDataManage.h"
#ifdef __cplusplus
extern "C" {
#endif
/*车库门数据结构体*/
typedef struct S_GaragedoorDataStruct
{
UINT16 GaragedoorId; /*车库门ID (初始化字段)*/
UINT8 GaragedoorState; /*车库门状态 (动态字段)*/
UINT8 GaragedoorAllowCloseFlag; /*车库门允许关门标志,ZC发送*/
UINT8 GDAllowCloseFlagIVOC; /*车库门允许关门标志,IVOC发送*/
UINT16 GDAkuNearestTrainId; /*A库物理区段上最接近的列车*/
UINT8 GaragedoorModeState; /*车库门模式状态*/
UINT8 GaragedoorFaultState; /*车库门故障状态*/
UINT8 GaragedoorPangLuState; /*车库门旁路状态*/
UINT8 drvDoorState; /* 驱动车库门状态*/
UINT8 cmdProcessState; /* 命令处理状态 */
UINT32 drvDoorStartCycle; /* 驱动开始时间,预留 */
UINT32 waiteZCResponseStartCycNum; /*等待ZC反馈开始时间*/
UINT32 waiteIVOCResponseStartCycNum; /*等待IVOC反馈开始时间*/
UINT32 GaragedoorOpenStartCycNum; /*车库门打开开始周期 (动态字段)*/
UINT32 GaragedoorCloseStartCycNum; /*车库门关闭开始周期 (动态字段)*/
} GaragedoorDataStruct;
extern GaragedoorDataStruct GaragedoorDataStru[GARAGE_DOOR_SUM_MAX]; /*定义车库门数据结构体*/
/*
* 功能描述: 获取指定车库门数据
* 参数说明:
* 返回值
GaragedoorDataStruct *
*/
GaragedoorDataStruct *GetGaragedoorData(void);
/*
* 功能描述: 获取指定ID车库门驱动状态
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 车库门驱动状态
*/
UINT8 GetDrvGaragedoorState(const UINT16 garagedoorId);
/*
* 功能描述: 设置指定ID车库门驱动状态
* 参数说明: const UINT16 garagedoorId, 车库门ID
* UINT8 drvState , 车库门驱动状态
* 返回值 CI_ERROR: 设置失败
* CI_SUCCESS: 设置成功
*/
UINT8 SetDrvGaragedoorState(const UINT16 garagedoorId,const UINT8 drvState);
/*
* 功能描述: 获取指定ID车库门命令处理状态
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 车库门状态
*/
UINT8 GetGrgdoorCmdProcessState(const UINT16 garagedoorId);
/*
* 功能描述: 设置指定ID车库门驱动状态
* 参数说明: const UINT16 garagedoorId, 车库门ID
* UINT8 drvState , 车库门状态
* 返回值 0: 获取数据失败
* >0: 车库门状态
*/
UINT8 SetGrgdoorCmdProcessState(const UINT16 garagedoorId,UINT8 state);
/*
* 功能描述: 获取指定ID车库门状态
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 车库门状态
*/
UINT8 GetGaragedoorState(const UINT16 garagedoorId);
/*
* 功能描述: 设置指定ID车库门状态
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT8 garagedoorState, 车库门状态
* 返回值 0: 设置失败
* 1: 设置成功
*/
UINT8 SetGaragedoorState(const UINT16 garagedoorId, const UINT8 garagedoorState);
/*
* 功能描述: 获取指定ID车库门允许关门标志 ZC
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 设置数据失败
* 1: 设置数据成功
*/
UINT8 GetGaragedoorAllowCloseFlag(const UINT16 garagedoorId);
/*
* 功能描述: 设置指定ID车库门允许关门标志 ZC
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值
*
*/
void SetGaragedoorAllowCloseFlag(const UINT16 garagedoorId, const UINT8 allowCloseFlag);
/*
* 功能描述: 获取指定ID车库门允许关门标志,IVOC
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 获取数据成功
*/
UINT8 GetGaragedoorAllowCloseFlagIVOC(const UINT16 garagedoorId);
/*
* 功能描述: 设置指定ID车库门允许关门标志 IVOC
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值
*
*/
void SetGaragedoorAllowCloseFlagIVOC(const UINT16 garagedoorId, const UINT8 allowCloseFlag);
/*
* 功能描述: 获取A库区段上最接近车库门的列车ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 列车ID
* LC
*/
UINT16 GetGaragedoorNearestTrainId(const UINT16 garagedoorId);
/*
* 功能描述: 设置A库区段上最接近车库门的列车ID
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT16 trainId 列车ID
* 返回值
* LC
*/
void SetGaragedoorNearestTrainId(const UINT16 garagedoorId, const UINT16 trainId);
#if 0
/*
* 功能描述: 设置所有车库门命令处理状态
* 参数说明:
* UINT8 state , 车库门状态
* 返回值 0: 设置失败
* >0: 设置成功
*/
UINT8 SetAllGrgdoorCmdProcessState(const UINT8 state);
#endif
/*
* 功能描述: 设置指定ID车库门模式状态
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取失败
* >0: 获取成功
*/
UINT8 GetGaragedoorModeState(const UINT16 garagedoorId);
/*
* 功能描述: 设置指定ID车库门模式状态
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT8 garagedoorModeState, 车库门模式状态
* 返回值 0: 设置失败
* 1: 设置成功
*/
UINT8 SetGaragedoorModeState(const UINT16 garagedoorId, const UINT8 garagedoorModeState);
/*
* 功能描述: 获取指定ID车库门故障状态
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值
GARAGE_DOOR_FAULT_TRUE 车库门故障为真
GARAGE_DOOR_FAULT_FALSE 车库门故障为假
GARAGE_DOOR_FAULT_NULL 车库门故障状态无效
*/
UINT8 GetGaragedoorFaultState(const UINT16 garagedoorId);
/*
* 功能描述: 设置指定ID车库门故障状态
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT8 garagedoorFaultState, 车库门故障状态
* 返回值 0: 设置失败
* 1: 设置成功
*/
UINT8 SetGaragedoorFaultState(const UINT16 garagedoorId, const UINT8 garagedoorFaultState);
/*
* 功能描述: 获取指定ID车库门旁路状态
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值
GARAGE_DOOR_PANGLU_TRUE 车库门旁路为真
GARAGE_DOOR_PANGLU_FALSE 车库门旁路为假
CI_ERROR 获取失败
*/
UINT8 GetGaragedoorPangLuState(const UINT16 garagedoorId);
/*
* 功能描述: 设置指定ID车库门旁路状态
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT8 garagedoorPangLuState, 车库门故障状态
* 返回值 0: 设置失败
* 1: 设置成功
*/
UINT8 SetGaragedoorPangLuState(const UINT16 garagedoorId, const UINT8 garagedoorPangLuState);
/*
* 功能描述: 设置指定ID车库门等待ZC反馈开始时间
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT32 startCycNum, 起始周期号
* 返回值
*
*/
void SetWaiteZCResponseStartCycNum(const UINT16 garagedoorId, const UINT32 startCycNum);
/*
* 功能描述: 获取指定ID车库门等待ZC反馈开始时间
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取失败
* >0: 获取成功
*/
UINT32 GetWaiteZCResponseStartCycNum(const UINT16 garagedoorId);
/*
* 功能描述: 设置指定ID车库门等待IVOC反馈开始时间
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT32 startCycNum, 起始周期号
* 返回值
* BY LC
*/
void SetWaiteIVOCResponseStartCycNum(const UINT16 garagedoorId, const UINT32 startCycNum);
/*
* 功能描述: 获取指定ID车库门等待IVOC反馈开始时间
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0u: 获取失败
* >0u: 获取成功
* BY LC
*/
UINT32 GetWaiteIVOCResponseStartCycNum(const UINT16 garagedoorId);
/*
* 功能描述: 获取指定ID车库门关门起始周期号
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 关闭车库门起始周期号
*/
UINT32 GetGaragedoorCloseStartCycNum(const UINT16 garagedoorId);
/*
* 功能描述: 设置指定ID车库门关门起始周期号
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT32 startCycNum, 关闭车库门起始周期号
* 返回值 void
*/
void SetGaragedoorCloseStartCycNum(const UINT16 garagedoorId, const UINT32 startCycNum);
/*
* 功能描述: 获取指定ID车库门开门起始周期号
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 0: 获取数据失败
* >0: 打开车库门起始周期号
*/
UINT32 GetGaragedoorOpenStartCycNum(const UINT16 garagedoorId);
/*
* 功能描述: 设置指定ID车库门开门起始周期号
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT32 startCycNum, 打开车库门起始周期号
* 返回值 0: 设置失败
* 1: 设置成功
*/
UINT8 SetGaragedoorOpenStartCycNum(const UINT16 garagedoorId, const UINT32 startCycNum);
/*
* 功能描述: 获取指定ID车库门相邻计轴
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值 : 0u: 获取数据失败
* >0u: 相邻计轴数目
*/
UINT8 GetGarageDoorAdjacentAC(const UINT16 garagedoorId, OUT UINT16 adjacentACID[GARAGE_DOOR_ADJACENT_AXIS]);
/*
* 功能描述: 检查指定计轴区段是否都属于车库门A库线上的休眠轨
* 参数说明: const UINT16 garagedoorId, 车库门ID
* const UINT8 axisNum 计轴区段数目
* UINT16 axisID[GARAGE_DOOR_ADJACENT_AXIS] 计轴区段
* 返回值 0u: 检查失败
* 1u: 检查通过
* BY LC
*/
UINT8 CheckGarageDoorSleepAC(const UINT16 garagedoorId, UINT16 axisID);
/*
* 功能描述: 获取车库门A库线区段是否为VBTC车占用
* 参数说明: const UINT16 garagedoorId, 车库门ID
*
* 返回值 0u: 非VBTC车占用
* 1u: VBTC车占用或无车
* BY LC
*/
UINT8 CheckGarageDoorAKuIsCTOccu(const UINT16 garagedoorId);
/*
* 功能描述: 获取车库门A库线物理区段是否占用
* 参数说明: const UINT16 garagedoorId, 车库门ID
*
* 返回值 0u: 占用
* 1u: 未占用
*/
UINT8 GetGarageDoorAKuIsOccu(const UINT16 garagedoorId);
/* 功能描述: 获取车库门关联的处于已办理状态的防护进路
* 参数说明: const UINT16 garagedoorId, 车库门ID
UINT16 routeId[GARAGE_DOOR_ROUTE_MAX] 已办理的进路ID
* 返回值: 已办理的进路数量
*/
UINT8 GetProRouteInTransactState(const UINT16 garagedoorId, OUT UINT16 routeId[GARAGE_DOOR_ROUTE_MAX]);
/* 功能描述: 查询A库物理区段上离车库门最接近的列车
* 参数说明: const UINT16 garagedoorId, 车库门ID
* 返回值: !=UINT16_MAX 列车ID
* UINT16_MAX 查询失败
* BY LC
*/
UINT16 FindNearestTrainInAKuPhy(const UINT16 garagedoorId);
/* 功能描述: 检查列车接近车库门一端无可疑
* 参数说明: UINT16 garageDoorId 车库门
* UINT16 trainId 列车ID
* 返回值: CI_ERROR 存在可疑
* CI_SUCCESS 无可疑
* BY LC
*/
UINT8 CheckNearestTrainScreen(const UINT16 garageDoorId, const UINT16 trainId, const UINT8 functionId, const UINT8 sendLevel);
/* 功能描述: 检查列车包络是否跨压车库门
* 参数说明: UINT16 garageDoorId 车库门
* UINT16 trainId 列车ID
* 返回值: CI_ERROR 跨压
* CI_SUCCESS 未跨压
* BY LC
*/
UINT8 CheckNearestTrainKuaya(const UINT16 garageDoorId, const UINT16 trainId, const UINT8 functionId, const UINT8 sendLevel);
/* 功能描述: 检查车库门相邻计轴是否存在锁闭
* 参数说明: UINT16 garageDoorId 车库门
* * UINT16* pDevId 锁闭的区段ID(出参)
* UINT8* pDevState 锁闭状态(出参)
* 返回值: CI_ERROR 存在锁闭
* CI_SUCCESS 未存在锁闭
* BY LC
*/
UINT8 CheckGDAdjacentACLockState(const UINT16 garageDoorId, UINT16* pDevId, UINT8* pDevState);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,59 @@
/********************************************************
*
* 文 件 名: GaragedoorDefine.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2014-12-17
* 作 者: 联锁组
* 功能描述: 车库门配置头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _GARAGE_DOOR_CONFIG_H_
#define _GARAGE_DOOR_CONFIG_H_
/*车库门总数最大值*/
#define GARAGE_DOOR_SUM_MAX ((UINT16)80) /*定义车库门数量最大值*/
#define GARAGE_DOOR_SIG_MAX ((UINT16)6) /* 防护最大信号机数量 */
#define GARAGE_DOOR_ENTER_ROUTE_MAX ((UINT16)10) /* 车库门最大入库进路数量 */
#define GARAGE_DOOR_EXIT_ROUTE_MAX ((UINT16)8) /* 车库门最大出库进路数量 */
#define GARAGE_DOOR_SPKS_MAX ((UINT16)4) /*车库门对应SPKS数量最大值*/
#define GARAGE_DOOR_PHY_SEC_MAX ((UINT16)20) /* 车库门关联最大物理区段数量 */
#define GARAGE_DOOR_ROUTE_MAX ((UINT16)18) /* 车库门关联最大进路数量 */
#define GARAGE_DOOR_ADJACENT_AXIS ((UINT16)5) /* 车库门关联最大相邻计轴 */
/*车库门状态*/
#define GARAGE_DOOR_STATE_OPEN ((UINT8)0x55) /*车库门打开*/
#define GARAGE_DOOR_STATE_CLOSE ((UINT8)0xaa) /*车库门关闭*/
#define GARAGE_DOOR_STATE_UNVALID ((UINT8)0xff) /*车库门非开门也非关门状态*/
#define GARAGE_DOOR_STATE_MODE_LOCAL ((UINT8)0xaa) /*车库门本地模式状态*/
#define GARAGE_DOOR_STATE_MODE_REMOTE ((UINT8)0x55) /*车库门远程模式状态*/
/* 车库门允许关闭状态 */
#define GARAGE_DOOR_ALLOW_CLOSE_YES ((UINT8)0x55) /*车库门允许关闭*/
#define GARAGE_DOOR_ALLOW_CLOSE_NO ((UINT8)0xaa) /*车库门不允许关闭*/
/* 车库门驱动状态 */
#define GARAGE_DOOR_DRV_OPEN ((UINT8)0x55) /* 驱动车库门打开*/
#define GARAGE_DOOR_DRV_CLOSE ((UINT8)0xAA) /* 驱动车库门关闭*/
#define GARAGE_DOOR_DRV_NULL ((UINT8)0xFF) /* 无效 */
#define GARAGE_DOOR_CMD_OPEN ((UINT8)0x55) /* 驱动车库门打开*/
#define GARAGE_DOOR_CMD_CLOSE ((UINT8)0xAA) /* 驱动车库门关闭*/
#define GARAGE_DOOR_CMD_NULL ((UINT8)0xFF) /* 无效 */
#define GARAGE_DOOR_FAULT_TRUE ((UINT8)0x55) /*车库门故障为真*/
#define GARAGE_DOOR_FAULT_FALSE ((UINT8)0xAA) /* 车库门故障为假*/
#define GARAGE_DOOR_PANGLU_TRUE ((UINT8)0x55) /*车库门旁路为真*/
#define GARAGE_DOOR_PANGLU_FALSE ((UINT8)0xAA) /* 车库门旁路为假*/
#define GARAGE_DOOR_ATTRIBUTE_LJK ((UINT8)0x55) /*车库门属性:列检库*/
#define GARAGE_DOOR_ATTRIBUTE_XCK ((UINT8)0xaa) /*车库门属性:洗车库*/
#endif
@@ -0,0 +1,369 @@
/********************************************************
*
* 文 件 名: HLHTCommonDataPacketHead.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2016-10-21
* 作 者: 联锁产品组
* 功能描述: 互联互通通用报文头校验及消息有效性计算
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#include "HLHTCommonDataPacketHead.h"
#include "../DataManage/DeviceConfigDataManage.h"
#include "../QueryFiles/dquCIInterFace.h"
/*************************************************************************************************************
* 功能描述:收到新通用消息包时,计算该消息的剩余有效期
* 输入参数:
const UINT16 maxMsgValidTime 项目约定的该消息有效期 ;
const UINT32 CurrentOwnSN 本方的当前周期号
const UINT32 SNPeriod 本方的通信周期,在CI系统中,认为是应用的周期
const HLHTGALInfoStruct *pRecvCommonPackage 通用消息包包头
const UINT32 srcRecvCiMsgSN,对方上次收到的本方的序号
const UINT32 srcCrntOwnMsgSN,对方发送最近数据时其当前的序号
const UINT32 srcPreOwnMsgSN,对方上次收到本方数据时其当时的序号
const UINT32 srcPeriod,对方的通信周期
* 输出参数:无.
* 返回值:RemainValidity 该消息的剩余有效期
*************************************************************************************************************/
INT32 HLHTCommonMsgRemainingValidity(
const UINT32 MaxMsgValidTime,
const UINT32 CurrentOwnSN,
const UINT32 SNPeriod,
const UINT32 srcRecvCiMsgSN,
const UINT32 srcCrntOwnMsgSN,
const UINT32 srcPreOwnMsgSN,
const UINT32 srcPeriod)
{
INT32 RemainValidity = 0;
if((SNPeriod<=0u) || (srcPeriod <=0u))
{
RemainValidity = -1;
}
else if( MaxMsgValidTime <= 0u )
{
RemainValidity = -1;
}
else if(srcRecvCiMsgSN > CurrentOwnSN)
{
RemainValidity = -1;
}
else if(srcPreOwnMsgSN > srcCrntOwnMsgSN)
{
RemainValidity = -1;
}
else if (((INT32)CurrentOwnSN - (INT32)(srcRecvCiMsgSN))*((INT32)(SNPeriod)) -
((INT32)(srcCrntOwnMsgSN)-(INT32)(srcPreOwnMsgSN))*((INT32)(srcPeriod)) <= 0)
{
RemainValidity = (INT32)MaxMsgValidTime - (((INT32)CurrentOwnSN - (INT32)(srcRecvCiMsgSN))*((INT32)SNPeriod));
}
else
{
/*通过收到消息中的回复本方"上一条"消息的时间戳(即RcvOppSN),计算出总的延迟,
再减去消息在对方设备内的时间,从而得到双向的传输延迟,将其作为最大传输延迟使用*/
RemainValidity = (INT32)MaxMsgValidTime - (((INT32)CurrentOwnSN - (INT32)(srcRecvCiMsgSN))*((INT32)(SNPeriod)) -
((INT32)(srcCrntOwnMsgSN)-(INT32)(srcPreOwnMsgSN))*((INT32)(srcPeriod)));
}
return RemainValidity;
}
/*************************************************************************
* 功能描述: 接收的通用信息包包头信息合法性检查
* 输入参数: UINT16 LocalDevName 发送方设备名称
* UINT16 RemoteDevName 接收方设备名称
* UINT16 DevInterfaceType 设备与设备接口类型
* UINT8 prtrlVer 接口协议版本号
* HLHTGALInfoStruct *pMICommonPackage CI发送给VOBC的通用信息包包头
* UINT16 logId VOBC 1端或2端标识
* UINT8 devType 通信设备类型
* 输入输出参数: UINT32 *pErrorCode CI接口中的故障号.
* 输出参数: 无.
* 全局变量: ..
* 返回值:
HLHT_HEAD_SUCCESS (0x55) 互联互通头检查正确
HLHT_HEAD_ERROR (0xaa) 互联互通头检查错误
HLHT_HEAD_INIT (0x33) 表明头是互联互通初始通信帧
*************************************************************************/
UINT8 HLHTRecvCommonPacketHeadCheck(UINT16 LocalDevName, UINT16 RemoteDevName, UINT16 DevInterfaceType, UINT8 prtrlVer, HLHTGALInfoStruct *pMICommonPackage, UINT32 *pErrorCode,UINT16 logId,UINT8 devType)
{
UINT8 retVal = CI_ERROR;
UINT32 LocalEtcsId = 0u; /*发送方标识*/
UINT32 RemoteEtcsId = 0u; /*接收方标识*/
UINT32 emapVer = 0U;/*应该使用的电子地图版本*/
UINT8 emapCheckVer = 0U; /*电子地图版本校验结果*/
UINT8 chRet = 0U;
/*错误码每次都清零*/
*pErrorCode = 0u;
/*依次判断各信息是否在合法范围内,只要有错误则置相应错误码*/
if (pMICommonPackage->devInterInfoType != DevInterfaceType)
{
*pErrorCode |= GAL_COMPARE_INFO_TYPE_ERR;
}
else
{
;
}
/*发送方校验*/
chRet = dquDevName2HlhtId(LocalDevName, logId, &LocalEtcsId);
if ((CI_ERROR == chRet) || (pMICommonPackage->sourceId != LocalEtcsId))
{
*pErrorCode |= GAL_COMPARE_SEND_FLAG_ERR;
}
else
{
;
}
/*接收方校验*/
chRet = dquDevName2HlhtId(RemoteDevName, logId, &RemoteEtcsId);
if ((CI_ERROR == chRet) || (pMICommonPackage->destId != RemoteEtcsId))
{
*pErrorCode |= GAL_COMPARE_RECV_FLAG_ERR;
}
else
{
;
}
emapCheckVer = GetCiEmapCheckVer((UINT8)RemoteDevName, &emapVer, devType);
if (CI_SUCCESS == emapCheckVer)
{
/*电子地图版本校验信息(4字节CRC比较)*/
if (emapVer != pMICommonPackage->emapVerCrc)
{
*pErrorCode |= GAL_COMPARE_EMAP_VER_COMP_ERR;
}
else
{
;
}
}
else
{
*pErrorCode |= GAL_COMPARE_EMAP_VER_COMP_ERR;
}
#if 0
else
{
/*比较结果不一致,校验失败*/
vCIDBVerCmpRst = CBTC_FALSE;
/*ATS接口中电子地图版本与VOBC的不一致,记录此错误原因*/
/*数据暂不支持,待各家接口商定结果TO BE DONE 20160817*/
/**pErrorCode |= CI_COMPACK_EMAP_VER_COMP_ERR;*/
}
#endif
/* 序列号合法性检查, (2^31-1u)*/
if ((1u > pMICommonPackage->crntOwnMsgSN) || (((UINT32)0x7FFFFFFF) < pMICommonPackage->crntOwnMsgSN)
|| (1u > pMICommonPackage->recvOppMsgSN) || (((UINT32)0x7FFFFFFF) < pMICommonPackage->recvOppMsgSN)
|| (1u > pMICommonPackage->preOwnMsgSN) || (((UINT32)0x7FFFFFFF) < pMICommonPackage->preOwnMsgSN))
{
*pErrorCode |= GAL_COMPARE_MSG_BDS_SN_ERR;
}
else
{
;
}
/* 检查协议版本 */
if (prtrlVer != pMICommonPackage->prtclVer)
{
*pErrorCode |= GAL_COMPARE_PROTOCOL_VER_ERR;
}
else
{
;
}
/* 检查应用数据长度 */
if (0u >= pMICommonPackage->totalDataLen)
{
*pErrorCode |= GAL_COMPARE_APP_LEN_ERR;
}
else
{
;
}
/*检查通用信息包中通信周期*/
if (0u == pMICommonPackage->comPeriod)
{
*pErrorCode |= GAL_COMPARE_COM_PERIOD;
}
else
{
;
}
/*如果接口信息没有发生错误,则函数返回正确;否则返回错误*/
if (0u == *pErrorCode)
{
/*接口全部正确,函数返回正确*/
retVal = HLHT_HEAD_SUCCESS;
}
else if (GAL_COMPARE_MSG_BDS_SN_ERR == *pErrorCode)
{
if ((0u < pMICommonPackage->crntOwnMsgSN) && (UINT32_MAX == pMICommonPackage->recvOppMsgSN) && (UINT32_MAX == pMICommonPackage->preOwnMsgSN))
{/*说明对方还没有收到本方的帧,当前帧是初始帧*/
retVal = HLHT_HEAD_INIT;
}
else
{
retVal = HLHT_HEAD_ERROR;
}
}
else
{
retVal = HLHT_HEAD_ERROR;
}
return retVal;
}
/*************************************************************************
* 功能描述: 接收的CI通用信息包包头信息合法性检查
* 输入参数: UINT16 LocalDevName 发送方设备名称
* UINT16 RemoteDevName 接收方设备名称
* UINT16 DevInterfaceType 设备与设备接口类型
* UINT8 prtrlVer 接口协议版本号
* HLHTGALInfoStruct *pMICommonPackage CI发送给VOBC的通用信息包包头
* UINT16 logId VOBC 1端或2端标识
* UINT8 devType 通信设备类型
* 输入输出参数: UINT32 *pErrorCode CI接口中的故障号.
* 输出参数: 无.
* 全局变量: ..
* 返回值:
HLHT_HEAD_SUCCESS (0x55) 互联互通头检查正确
HLHT_HEAD_ERROR (0xaa) 互联互通头检查错误
HLHT_HEAD_INIT (0x33) 表明头是互联互通初始通信帧
*************************************************************************/
UINT8 HLHTCiCommonPacketHeadCheck(UINT16 LocalDevName, UINT16 RemoteDevName, UINT16 DevInterfaceType, UINT8 prtrlVer, HLHTGALInfoStruct* pMICommonPackage, UINT32* pErrorCode, UINT16 logId, UINT8 devType)
{
UINT8 retVal = CI_ERROR;
UINT32 LocalEtcsId = 0u; /*发送方标识*/
UINT32 RemoteEtcsId = 0u; /*接收方标识*/
UINT32 emapVer = 0U;/*应该使用的电子地图版本*/
UINT8 emapCheckVer = 0U; /*电子地图版本校验结果*/
UINT8 chRet = 0U;
UINT8 localCiId = 0u; /*本联锁ID*/
localCiId = GetSystemParaLocalCiId();
/*错误码每次都清零*/
*pErrorCode = 0u;
/*依次判断各信息是否在合法范围内,只要有错误则置相应错误码*/
if (pMICommonPackage->devInterInfoType != DevInterfaceType)
{
*pErrorCode |= GAL_COMPARE_INFO_TYPE_ERR;
}
else
{
;
}
/*发送方校验*/
chRet = dquDevName2HlhtId(LocalDevName, logId, &LocalEtcsId);
if ((CI_ERROR == chRet) || (pMICommonPackage->sourceId != LocalEtcsId))
{
*pErrorCode |= GAL_COMPARE_SEND_FLAG_ERR;
}
else
{
;
}
/*接收方校验*/
chRet = dquDevName2HlhtId(RemoteDevName, logId, &RemoteEtcsId);
if ((CI_ERROR == chRet) || (pMICommonPackage->destId != RemoteEtcsId))
{
*pErrorCode |= GAL_COMPARE_RECV_FLAG_ERR;
}
else
{
;
}
emapVer = GetCiTranCiDataCheckVer(localCiId, LocalDevName); /*获取联锁系统数据版本号*/
/*电子地图版本校验信息(4字节CRC比较)*/
if (emapVer != pMICommonPackage->emapVerCrc)
{
*pErrorCode |= GAL_COMPARE_EMAP_VER_COMP_ERR;
}
else
{
;
}
/* 序列号合法性检查, (2^31-1u)*/
if ((1u > pMICommonPackage->crntOwnMsgSN) || (((UINT32)0x7FFFFFFF) < pMICommonPackage->crntOwnMsgSN)
|| (1u > pMICommonPackage->recvOppMsgSN) || (((UINT32)0x7FFFFFFF) < pMICommonPackage->recvOppMsgSN)
|| (1u > pMICommonPackage->preOwnMsgSN) || (((UINT32)0x7FFFFFFF) < pMICommonPackage->preOwnMsgSN))
{
*pErrorCode |= GAL_COMPARE_MSG_BDS_SN_ERR;
}
else
{
;
}
/* 检查协议版本 */
if (prtrlVer != pMICommonPackage->prtclVer)
{
*pErrorCode |= GAL_COMPARE_PROTOCOL_VER_ERR;
}
else
{
;
}
/* 检查应用数据长度 */
if (0u >= pMICommonPackage->totalDataLen)
{
*pErrorCode |= GAL_COMPARE_APP_LEN_ERR;
}
else
{
;
}
/*检查通用信息包中通信周期*/
if (0u == pMICommonPackage->comPeriod)
{
*pErrorCode |= GAL_COMPARE_COM_PERIOD;
}
else
{
;
}
/*如果接口信息没有发生错误,则函数返回正确;否则返回错误*/
if (0u == *pErrorCode)
{
/*接口全部正确,函数返回正确*/
retVal = HLHT_HEAD_SUCCESS;
}
else if (GAL_COMPARE_MSG_BDS_SN_ERR == *pErrorCode)
{
if ((0u < pMICommonPackage->crntOwnMsgSN) && (UINT32_MAX == pMICommonPackage->recvOppMsgSN) && (UINT32_MAX == pMICommonPackage->preOwnMsgSN))
{/*说明对方还没有收到本方的帧,当前帧是初始帧*/
retVal = HLHT_HEAD_INIT;
}
else
{
retVal = HLHT_HEAD_ERROR;
}
}
else
{
retVal = HLHT_HEAD_ERROR;
}
return retVal;
}
@@ -0,0 +1,113 @@
/********************************************************
*
* 文 件 名: HLHTCommonDataPacketHead.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2016-10-21
* 作 者: 联锁产品组
* 功能描述: 互联互通通用报文头校验头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _HLHTCOMMONDATAPACKETHEAD_H_
#define _HLHTCOMMONDATAPACKETHEAD_H_
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#define HLHT_HEAD_SUCCESS ((UINT8)0x55) /*互联互通头检查正确*/
#define HLHT_HEAD_ERROR ((UINT8)0xaa) /*互联互通头检查错误*/
#define HLHT_HEAD_INIT ((UINT8)0x33) /*表明头是互联互通初始通信帧*/
/*************************************通用报文头消息校验错误原因定义**************************************/
#define GAL_COMPARE_INFO_TYPE_ERR ((UINT32)0x00000001) /*GAL通用信息包中接口信息类型错误*/
#define GAL_COMPARE_SEND_FLAG_ERR ((UINT32)0x00000002) /*GAL通用信息包中发送方标识信息错误*/
#define GAL_COMPARE_RECV_FLAG_ERR ((UINT32)0x00000004) /*GAL通用信息包中接收方标志信息错误*/
#define GAL_COMPARE_EMAP_VER_COMP_ERR ((UINT32)0x00000008) /*GAL通用信息包中电子地图版本号比较失败*/
#define GAL_COMPARE_MSG_BDS_SN_ERR ((UINT32)0x00000010) /*GAL通用信息包中本方、对方及收到上一条消息时本方序列号错误*/
#define GAL_COMPARE_MSG_SN_ERR ((UINT32)0x00000020) /*GAL通用信息包中对方消息序列号及收到上一条消息时本方序列号错误*/
#define GAL_COMPARE_PROTOCOL_VER_ERR ((UINT32)0x00000040) /*GAL通用信息包中协议版本号错误*/
#define GAL_COMPARE_APP_LEN_ERR ((UINT32)0x00000080) /*GAL通用信息包中应用层数据长度无效*/
#define GAL_COMPARE_COM_PERIOD ((UINT32)0x00000100)/*GAL通用信息包中通信周期错误*/
#ifdef __cplusplus
extern "C" {
#endif
/*互联互通通用报文头*/
typedef struct S_HLHTGALInfoStruct
{
UINT16 devInterInfoType; /*设备接口信息类型*/
UINT16 totalDataLen; /*应用报文总长度*/
UINT16 comPeriod; /*通信周期,单位:ms*/
UINT8 prtclVer; /*协议版本号*/
UINT32 sourceId; /*源ID,发送方标识信息*/
UINT32 destId; /*目的ID,接收方标识信息*/
UINT32 emapVerCrc; /*电子地图版本校验信息32位CRC*/
UINT32 crntOwnMsgSN; /*本方消息序列号,记录发送本条消息时,本方的周期计数,发送方每周期将本计数加1*/
UINT32 recvOppMsgSN; /*对方消息序列号,记录收到对方上一条消息中的对方消息序列号*/
UINT32 preOwnMsgSN; /*收到上一条消息时本方序列号,记录收到对方上一条消息时,本方的周期计数*/
} HLHTGALInfoStruct;
/*************************************************************************************************************
* 功能描述:收到新通用消息包时,计算该消息的剩余有效期
* 输入参数:
const UINT16 maxMsgValidTime 项目约定的该消息有效期 ;
const UINT32 CurrentOwnSN 本方的当前周期号
const UINT32 SNPeriod 本方的通信周期,在CI系统中,认为是应用的周期
const HLHTGALInfoStruct *pRecvCommonPackage 通用消息包包头
const UINT32 srcRecvCiMsgSN,对方上次收到的本方的序号
const UINT32 srcCrntOwnMsgSN,对方发送最近数据时其当前的序号
const UINT32 srcPreOwnMsgSN,对方上次收到本方数据时其当时的序号
const UINT32 srcPeriod,对方的通信周期
* 输出参数:无.
* 返回值:RemainValidity 该消息的剩余有效期
*************************************************************************************************************/
INT32 HLHTCommonMsgRemainingValidity(const UINT32 MaxMsgValidTime, const UINT32 CurrentOwnSN, const UINT32 SNPeriod, const UINT32 srcRecvCiMsgSN, const UINT32 srcCrntOwnMsgSN, const UINT32 srcPreOwnMsgSN, const UINT32 srcPeriod);
/*************************************************************************
* 功能描述: 接收的通用信息包包头信息合法性检查
* 输入参数: UINT16 LocalDevName 发送方设备名称
* UINT16 RemoteDevName 接收方设备名称
* UINT16 DevInterfaceType 设备与设备接口类型
* UINT8 prtrlVer 接口协议版本号
* HLHTGALInfoStruct *pMICommonPackage CI发送给VOBC的通用信息包包头
* UINT16 logId VOBC 1端或2端标识
* UINT8 devType 通信设备类型
* 输入输出参数: UINT32 *pErrorCode CI接口中的故障号.
* 输出参数: 无.
* 全局变量: ..
* 返回值:
HLHT_HEAD_SUCCESS (0x55) 互联互通头检查正确
HLHT_HEAD_ERROR (0xaa) 互联互通头检查错误
HLHT_HEAD_INIT (0x33) 表明头是互联互通初始通信帧
*************************************************************************/
UINT8 HLHTRecvCommonPacketHeadCheck(UINT16 LocalDevName, UINT16 RemoteDevName, UINT16 DevInterfaceType, UINT8 prtrlVer, HLHTGALInfoStruct *pMICommonPackage, UINT32 *pErrorCode,UINT16 logId,UINT8 devType);
/*************************************************************************
* 功能描述: 接收的CI通用信息包包头信息合法性检查
* 输入参数: UINT16 LocalDevName 发送方设备名称
* UINT16 RemoteDevName 接收方设备名称
* UINT16 DevInterfaceType 设备与设备接口类型
* UINT8 prtrlVer 接口协议版本号
* HLHTGALInfoStruct *pMICommonPackage CI发送给VOBC的通用信息包包头
* UINT16 logId VOBC 1端或2端标识
* UINT8 devType 通信设备类型
* 输入输出参数: UINT32 *pErrorCode CI接口中的故障号.
* 输出参数: 无.
* 全局变量: ..
* 返回值:
HLHT_HEAD_SUCCESS (0x55) 互联互通头检查正确
HLHT_HEAD_ERROR (0xaa) 互联互通头检查错误
HLHT_HEAD_INIT (0x33) 表明头是互联互通初始通信帧
*************************************************************************/
UINT8 HLHTCiCommonPacketHeadCheck(UINT16 LocalDevName, UINT16 RemoteDevName, UINT16 DevInterfaceType, UINT8 prtrlVer, HLHTGALInfoStruct* pMICommonPackage, UINT32* pErrorCode, UINT16 logId, UINT8 devType);
#ifdef __cplusplus
}
#endif
#endif
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,293 @@
/********************************************************
*
* 文 件 名: HLHTHeadContexManage.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2016-12-17
* 作 者: 联锁产品组
* 功能描述: 互联互通报文头上下文数据管理
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _HLHT_HEAD_CONTEX_MANAGE_H_
#define _HLHT_HEAD_CONTEX_MANAGE_H_
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#include "HLHTCommonDataPacketHead.h"
#include "ParsePackITEData.h"
#ifdef __cplusplus
extern "C" {
#endif
/*互联互通报文头上下文数据结构体*/
typedef struct S_HLHTHeadContextStru
{
UINT16 sourceComPeriod; /*向CI发送数据的一方的通信周期,单位:ms*/
UINT8 sourceId; /*向CI发送数据的一方的ID*/
UINT16 logId; /*向CI发送数据的一方的逻辑ID,目前仅互联互通4IP VOBC使用*/
UINT32 sourceCrntOwnMsgSN; /*向CI发送数据的一方发送报文时当前的SN*/
UINT32 sourceRecvOppMsgSN; /*向CI发送数据的一方上次收到CI数据时CI的SN*/
UINT32 sourcePreOwnMsgSN; /*向CI发送数据的一方上次收到CI数据时的SN*/
UINT32 ciPreRecvOwnSn;/*CI接收到数据时本身的SN*/
} HLHTHeadContextStru;
/*******************************全局变量声明*******************************/
extern HLHTHeadContextStru ciHLHTHeadCtxs[CI_SUM_MAX];/*存放与本CI通信的相邻CI互联互通报文头上下文数据*/
extern HLHTHeadContextStru vobcHLHTHeadCtxs[VOBC_SUM_MAX];/*存放与本CI通信的VOBC互联互通报文头上下文数据*/
extern HLHTHeadContextStru vobcBackupHLHTHeadCtxs[VOBC_BACKUP_SUM_MAX];/*存放与本CI通信的后备模式VOBC互联互通报文头上下文数据*/
extern HLHTHeadContextStru zcHLHTHeadCtxs[ZC_SUM_MAX];/*存放与本CI通信的ZC互联互通报文头上下文数据*/
extern HLHTHeadContextStru ocHLHTHeadCtxs[OC_SUM_MAX];/*存放与本CI通信的OC互联互通报文头上下文数据*/
extern HLHTHeadContextStru axleHLHTHeadCtxs[AXLE_SUM_MAX];/*存放与本CI通信的计轴系统互联互通报文头上下文数据*/
extern HLHTHeadContextStru tmcHLHTHeadCtxs[TMC_SUM_MAX];/*存放与本TIOC通信的TMC互联互通报文头上下文数据*/
extern HLHTHeadContextStru IteHLHTHeadCtxs[ITE_SUM_MAX][VOBC_INC_ITE_SUM_MAX];/*存放与本TIOC通信的ITE互联互通报文头上下文数据*/
/*
* 功能描述:获取某个设备最近一次给CI发送数据时其当前的序号
* 参数说明:
const UINT8 devType:设备类型
const UINT8 devId:设备ID
* 返回值:
某个设备最近一次给CI发送数据时其当前的序号,0为无效值
*/
UINT32 GetHLHTHeadCtxSrcCrntSN(const UINT8 devType, const UINT8 devId);
/*
* 功能描述:获取某个设备最近一次给CI发送数据时里面填写的上次收到CI数据其当时的序号
* 参数说明:
const UINT8 devType:设备类型
const UINT8 devId:设备ID
* 返回值:
某个设备最近一次给CI发送数据时里面填写的上次收到CI数据其当时的序号,0为无效值
*/
UINT32 GetHLHTHeadCtxSrcOwnSN(const UINT8 devType, const UINT8 devId);
/*
* 功能描述:获取CI最近收到某个设备的数据时CI自身当时的序号
* 参数说明:
const UINT8 devType:设备类型
const UINT8 devId:设备ID
* 返回值:
CI最近收到某个设备的数据时自身当时的序号,0为无效值
*/
UINT32 GetHLHTHeadCtxCiRcvSN(const UINT8 devType, const UINT8 devId);
/*
* 功能描述:设置某个与CI通信的设备的通信周期
* 参数说明:
const UINT8 devType:设备类型
const UINT8 devId:设备ID
const UINT16 period:通信周期
* 返回值:
*/
void SetHLHTHeadCtxComPeriod(const UINT8 devType, const UINT8 devId, const UINT16 period);
/*
* 功能描述:设置CI最近收到某个设备数据时通用头里面包含的对方当前的周期号
* 参数说明:
const UINT8 devType:设备类型
const UINT8 devId:设备ID
const UINT16 srcCrntSN:对方当前的周期号
* 返回值:
*/
void SetHLHTHeadCtxSrcCrntSN(const UINT8 devType, const UINT8 devId, const UINT32 srcCrntSN);
/*
* 功能描述:设置某个设备上一次收到CI数据时里面包含的CI当前的序号
* 参数说明:
const UINT8 devType:设备类型
const UINT8 devId:设备ID
const UINT16 srcOppSN:对方上一次收到CI数据时里面包含的CI当前的序号
* 返回值:
*/
void SetHLHTHeadCtxSrcOppSN(const UINT8 devType, const UINT8 devId, const UINT32 srcOppSN);
/*
* 功能描述:设置某个设备上一次收到CI数据时其自身的当前序号
* 参数说明:
const UINT8 devType:设备类型
const UINT8 devId:设备ID
const UINT16 srcOwnSN:某个设备上一次收到CI数据时其自身的当前序号
* 返回值:
*/
void SetHLHTHeadCtxSrcOwnSN(const UINT8 devType, const UINT8 devId, const UINT32 srcOwnSN);
/*
* 功能描述:设置CI收到数据时CI自身的序号
* 参数说明:
const UINT8 devType:设备类型
const UINT8 devId:设备ID
const UINT16 ciRcvSn:CI收到数据时CI自身的序号
* 返回值:
*/
void SetHLHTHeadCtxCiRcvSN(const UINT8 devType, const UINT8 devId, const UINT32 ciRcvSn);
/*
* 功能描述:删除某个设备的互联互通头
* 参数说明:
const UINT8 devType:设备类型
const UINT8 devId:设备ID
* 返回值:
*/
void ClearHlhtHeadCtx(const UINT8 devType, const UINT8 devId);
/*
* 功能描述:初始化
* 参数说明:
*const UINT8 devType:设备类型
*/
void InitHlhtHeadCtx(const UINT8 devType);
/*
* 功能描述: 处理互联互联互通通用报文头时效性
* 参数说明:
* 返回值
*/
void ProcHlhtHeadCtxTimeOut(void);
/*
* 功能描述: 根据设备类型,获得具备初始通信互联互通头的所有设备ID
* 参数说明:
const UINT8 devType, 设备类型
UINT8* devIdBuf, 存储满足条件的设备编号的数组
const UINT8 devIdBufMaxLen, devIdBuf的容量,防止函数内访问越界
UINT8* devSum,表明满足条件的设备编号的数量
UINT16* devLogIdBuf 存储满足条件的设备逻辑ID的数组
* 返回值
CI_SUCCESS:获得成功
CI_ERROR:获得失败
*/
UINT8 GetHlhtInitHeadDevsByDevType(const UINT8 devType, UINT8* devIdBuf, const UINT8 devIdBufMaxLen, UINT8* devSum, UINT16* devLogIdBuf);
/*
* 功能描述:获取某个与CI通信的设备的互联互通报文头上下文信息是否存在并且有效
* 参数说明:
const UINT8 devType:设备类型
const UINT8 devId:设备ID
* 返回值:
CI_ERROR:不存在
* CI_SUCCESS:存在
*/
UINT8 GetHLHTHeadCtxValid(const UINT8 devType, const UINT8 devId);
/*
* 功能描述:判断后备模式初始帧
* 参数说明:
const UINT8 devType:设备类型
const UINT8 devId:设备ID
* 返回值:
CI_ERROR:不是
* CI_SUCCESS:是
*/
UINT8 BackupHeadCheckValid(const UINT8 devType, const UINT8 devId);
/*
* 功能描述:获取某个与CI通信的设备的互联互通报文头上下文信息是否存在
* 参数说明:
const UINT8 devType:设备类型
const UINT8 devId:设备ID
* 返回值:
CI_ERROR:不存在
* CI_SUCCESS:存在
*/
UINT8 GetHLHTHeadCtxExistance(const UINT8 devType,const UINT8 devId);
/*
* 功能描述:设置CI收到数据时对方的LogId
* 参数说明:
const UINT8 devType:设备类型
const UINT8 devId:设备ID
const UINT16 ciRcvLogId:CI收到数据时对方的LogId
* 返回值:
CI_SUCCESS:成功
CI_ERROR:失败
*/
void SetHLHTHeadCtxCiRcvLogId(const UINT8 devType, const UINT8 devId, const UINT16 ciRcvLogId);
/*
* 功能描述:获取某个设备上次收到CI数据时CI的序号
* 参数说明:
const UINT8 devType:设备类型
const UINT8 devId:设备ID
* 返回值:
某个设备上次收到CI数据时CI的序号,0u为无效值
*/
UINT32 GetHLHTHeadCtxSrcOppSN(const UINT8 devType, const UINT8 devId);
/*
* 功能描述:获取某个设备的通信周期
* 参数说明:
const UINT8 devType:设备类型
const UINT8 devId:设备ID
* 返回值:
某个的通信周期
*/
UINT32 GetHLHTHeadCtxComPeriod(const UINT8 devType, const UINT8 devId);
/*
* 功能描述:设置指定ITE的互联互通报文头上下文数据
* 参数说明:const UINT8 iteId ITE ID
* const UINT16 iteLogId ITE逻辑ID
* const HLHTGALInfoStruct* strHlhtGalHead 待设置的ITE互联互通报文头
* 返 回 值:无
* Created By LQ 2024.06.05
*/
void SetIteHLHTHeadCtx(const UINT8 iteId, const UINT16 iteLogId, const HLHTGALInfoStruct* pstrHlhtGalHead);
/*
* 功能描述:获取指定ITE的互联互通报文头上下文数据
* 参数说明:const UINT8 iteId ITE ID
* const UINT16 iteLogId ITE逻辑ID
* 返 回 值:NULL 获取数据失败
* 非NULL 获取数据成功
* Created By LQ 2024.06.05
*/
HLHTHeadContextStru* GetIteHLHTHeadCtx(const UINT8 iteId, const UINT16 iteLogId);
/*
* 功能描述:删除指定ITE的互联互通报文头上下文
* 参数说明:const UINT8 devId ITE ID
* const UINT16 logId ITE逻辑ID
* 返 回 值:无
* Created By LQ 2024.06.05
*/
void ClearIteHlhtHeadCtx(const UINT8 devId, const UINT16 logId);
/*
* 功能描述:校验ITE互联互通报文头上下文信息是否有效
* 参数说明:const UINT8 cIteId ITE ID
* const UINT16 wIteLogId ITE逻辑ID
* 返 回 值:CI_ERROR 0 无效
* CI_SUCCESS 1 有效
* Created By LQ 2024.06.06
*/
UINT8 CheckIteHLHTHeadCtxValid(const UINT8 cIteId, const UINT16 wIteLogId);
/*
* 功能描述:获取具备初始通信互联互通头的ITEID
* 参数说明:UINT8* cIteNum 初始通信的ITE数量(出参)
* UINT8 pIteIdBuf[ITE_TO_CI_SUM_MAX] 初始通信的ITE ID(出参)
* UINT16 pIteLogIdBuf[ITE_TO_CI_SUM_MAX] 初始通信的ITE逻辑ID(出参)
* 返 回 值:CI_ERROR 0 获得失败
* CI_SUCCESS 1 获得成功
* Created By LQ 2024.06.08
*/
UINT8 GetIteHlhtInitHeadDevs(UINT8* cIteNum, UINT8 pIteIdBuf[ITE_TO_CI_SUM_MAX], UINT16 pIteLogIdBuf[ITE_TO_CI_SUM_MAX]);
/*
* 功能描述:ITE互联互通报文头时效性处理
* 参数说明:const UINT32 dwTimeoutSnCount 保持有效的最大周期数
* const UINT32 dwTimeoutSpan 保持有效的最大时间
* 返 回 值:无
* Created By LQ 2024.06.11
*/
void ProcIteHlhtHeadCtxTimeOut(const UINT32 dwTimeoutSnCount, const UINT32 dwTimeoutSpan);
#ifdef __cplusplus
}
#endif
#endif
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,860 @@
/********************************************************
*
* 文 件 名: DeviceRelayDataProcess.h
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-09-21
* 作 者: 联锁组
* 功能描述: 设备间数据管理头文件
* 函数包括:
* 使用注意:
* 修改记录:
*
********************************************************/
#ifndef _DEVICE_RELAY_DATA_PROCESS_H_
#define _DEVICE_RELAY_DATA_PROCESS_H_
#include "../DataManage/DeviceDataManage.h"
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#include "../System/SystemParameterManage.h"
#include "../Relay/RelayConfigDataManage.h"
#include "../Relay/RelayDataManage.h"
#include "../Signal/SignalConfigDataManage.h"
#include "../Signal/SignalDataManage.h"
#include "../Switch/SwitchConfigDataManage.h"
#include "../Switch/SwitchDataManage.h"
#include "../Section/PhysicalSectionDataManage.h"
#include "../Section/PhysicalSectionConfigDataManage.h"
#include "../Section/AxisSectionConfigDataManage.h"
#include "../Section/AxisSectionDataManage.h"
#include "../Section/LogicSectionConfigDataManage.h"
#include "../Section/LogicSectionDataManage.h"
#include "../psd/PSDConfigDataManage.h"
#include "../psd/PSDDataManage.h"
#include "../esb/ESBConfigDataManage.h"
#include "../esb/ESBDataManage.h"
#include "../error/ErrorDataManage.h"
#include "../ParsePack/CiInterfaceDefine.h"
#include "../ParsePack/ParsePackAtsData.h"
#include "../ParsePack/ParsePackVobcData.h"
#include "../Route/RouteDataManage.h"
#include "../Route/RouteConfigDataManage.h"
#include "../Garagedoor/GaragedoorConfigDataManage.h"
#include "../Garagedoor/GaragedoorDataManage.h"
#include "../WashMachine/WashMachineConfigDataManage.h"
#include "../WashMachine/WashMachineDataManage.h"
#include "../ParsePack/ParsePackOcData.h"
#include "ReverseCutDataManage.h"
#include "ReverseCutConfigDataManage.h"
#ifdef __cplusplus
extern "C" {
#endif
/******************************信号机相关继电器处理****************************/
/*
* 功能描述: 信号机继电器状态->逻辑状态
* 参数说明: const UINT32 curCycleNum, 当前周期号
* 返回值 0: 更新失败
* 1: 更新成功
*/
void SignalRelayToDeviceStateProc(void);
/*
* 功能描述: 信号机逻辑状态->继电器状态
* 参数说明: void
* 返回值 0: 更新失败
* 1: 更新成功
*/
void SignalDeviceToRelayStateProc(void);
/*
* 功能描述: 根据信号机驱动信息驱动指定ID信号机继电器
* 参数说明: const UINT16 signalId
* 返回值 0:设置失败
* >0:设置成功
*/
UINT8 SetSignalRelayState(const UINT16 signalId);
/*
* 功能描述: 根据继电器采集数据获取指定ID信号机的当前显示颜色
* 参数说明: const UINT16 signalId
* 返回值 0: 获取错误
* >0: 当前显示颜色
*/
UINT8 GetSignalShowColor(const UINT16 signalId);
/*
* 功能描述: 信号机双系板卡故障,信号机当前设置颜色
* 参数说明:
UINT16 signalId:信号机id
UINT8 ocId OC ID
* 返回值 信号机颜色
*/
UINT8 GetOcBoardFaultSignalColor(UINT16 signalId, UINT8 ocId);
/*
* 功能描述: 信号机亮灯情况下,OC给全灭,信号机颜色设置
* 参数说明:
UINT16 signalId:信号机id
* 返回值 信号机颜色
*/
UINT8 SetSignalColorOcAllOff(const UINT16 signalId);
/******************************道岔相关继电器处理****************************/
/*
* 功能描述: 更新道岔逻辑状态
* 参数说明: const UINT32 curCycleNum, 当前周期号
* 返回值 0: 更新失败
* 1: 更新成功
*/
void SwitchRelayToDeviceStateProc(void);
/* zt 删除单轨相关代码 2022-02-15 */
/*
* 功能描述: 更新道岔继电器状态
* 参数说明: void
* 返回值 0: 更新失败
* 1: 更新成功
*/
void SwitchDeviceToRelayStateProc(void);
/******************************区段相关继电器处理****************************/
/*
* 功能描述: 更新物理区段占用状态
* 参数说明: const UINT32 curCycleNum, 当前周期号
* 返回值 void
*/
void PhySecRelayToDeviceStateProc(void);
/*
* 功能描述: 更新区段计轴复位继电器状态
* 参数说明: void
* 返回值 void
*/
void PhySecResetToRelayStateProc(void);
/*
* 功能描述: 更新区段计轴复位继电器状态
* 参数说明: void
* 返回值 void
*/
void PhySecResetToRelayStateProc_Vir(UINT8 virCIid);
/*
* 功能描述: 更新所有区段计轴复位继电器状态
* 参数说明: void
* 返回值 void
*/
void UpDataAllPhySecResetRelay_VirCI(void);
/******************************站台相关继电器处理****************************/
/*
* 功能描述: 更新屏蔽门逻辑状态
* 参数说明: void
* 返回值 0: 更新失败
* 1: 更新成功
*/
void PsdRelayToDeviceStateProc(void);
#if 0
/*
* 功能描述: 屏蔽门状态转移处理函数
* 参数说明: void
* 返回值 void
*/
void PsdStateTransferProc(void);
#endif
/*
* 功能描述: 更新屏蔽门继电器状态
* 参数说明: void
* 返回值 0: 更新失败
* 1: 更新成功
*/
UINT8 PsdDeviceToRelayStateProc(void);
/*
* 功能描述: 更新洗车机继电器状态
* 参数说明: void
* 返回值 0: 更新失败
* 1: 更新成功
*/
UINT8 WashMachineDevToRelayStaProc(void);
/*
* 功能描述: 更新紧急停车按钮逻辑状态
* 参数说明: void
* 返回值 0: 更新失败
* 1: 更新成功
*/
UINT8 EsbRelayToDeviceStateProc(void);
/*
* 功能描述: 更新车库门的逻辑状态
* 参数说明: void
* 返回值 0: 更新失败
* 1: 更新成功
*/
UINT8 GaragedoorRelayToDevStaProc(void);
/*
* 功能描述: 更新车库门的逻辑开关门状态(仅配置开门、旁路继电器)
* 参数说明: void
* 返回值 0u: 更新失败
* 1: 更新成功
*/
UINT8 GDRelayToDeviceStateOnlyOpenPL(const UINT16 garagedoorId);
/*
* 功能描述: 更新车库门继电器状态
* 参数说明: void
* 返回值 0: 更新失败
* 1: 更新成功
*/
void GaragedoorDevToRelayStaProc(void);
/*
* 功能描述: 更新洗车机的逻辑状态
* 参数说明: void
* 返回值 0: 更新失败
* 1: 更新成功
*/
UINT8 WashMachineToDeviceStateProc(void);
/*
* 功能描述: 更新Spks按钮逻辑状态
* 参数说明: void
* 返回值 0: 更新失败
* 1: 更新成功
*/
UINT8 SpksRelayToDeviceStateProc(void);
/*
* 功能描述: 根据继电器采集数据获取指定ID信号机的显示颜色
* 参数说明: const UINT16 signalId
* 返回值 0: SIGNAL_SHOWCOLOUR_INVALID
* >0: 当前显示颜色
*/
UINT8 GetRelayToDeviceSignalColor(const UINT16 signalId);
/*
* 功能描述: 根据继电器采集数据获取指定ID信号机的显示颜色-没有配置DDJ的特殊处理
* 参数说明: const UINT16 signalId
* 返回值 0: SIGNAL_SHOWCOLOUR_INVALID
* >0: 当前显示颜色
*/
UINT8 GetNoDDJSignalColor(const UINT16 signalId);
/*
* 功能描述: 更新防淹门的设备逻辑状态
* 参数说明: void
* 返回值 void
*/
void FloodGateRelayToDeviceStateProc(void);
/*
* 功能描述: 更新防淹门继电器状态
* 参数说明: void
* 返回值
*/
void FloodGateDeviceToRelayStateProc(void);
/*
* 功能描述: 更新进路的调车同意逻辑状态
* 参数说明: void
* 返回值 void
*/
void RouteDCTYRelayToDeviceStateProc(void);
/*
* 功能描述: 更新调车同意继电器状态
* 参数说明: void
* 返回值
*/
void RouteDCTYToRelayStateProc(void);
/*
* 功能描述: 设置只有采集列车信号继电器状态的信号机颜色
* 参数说明: const UINT16 signalId :信号机ID
* 返回值
*/
void SetNoDriveSignalCurColor(const UINT16 signalId);
/*
* 功能描述: OC信号机设备采集状态->逻辑状态
* 参数说明: void
* 返回值 void
*
*/
void OcSignalDeviceInput(void);
/*
* 功能描述: OC道岔设备采集状态->逻辑状态
* 参数说明: void
* 返回值 void
*/
void OcSwitchDeviceInput(void);
/*
* 功能描述: OC信号机设备输出处理
* 参数说明: void
* 返回值 void
*/
void OcSignalDeviceOutput(void);
/*
* 功能描述: OC道岔设备输出处理
* 参数说明: void
* 返回值 void
*/
void OcSwitchDeviceOutput(void);
/*
* 功能描述: 获取OC信号机设备颜色
* 参数说明:
UINT16 signalId:信号机id
* 返回值 void
*/
UINT8 GetOcSignalColor(UINT16 signalId);
/*
* 功能描述: 获取OC道岔设备颜色
* 参数说明:
UINT16 signalId:信号机id
* 返回值 void
*/
UINT8 GetOcSwitchState(UINT16 switchId);
/*
* 功能描述: 间隙探测脉冲接口方式启动驱动处理
* 参数说明: UINT16 startJXTCRelayId 启动继电器
UINT16 stopJXTCRelayId 停止继电器
UINT16 psdId 屏蔽门ID
* 返回值
*/
void ProcessJXTCPulseInterfStartDrv (UINT16 startJXTCRelayId, UINT16 stopJXTCRelayId, UINT16 psdId);
/*
* 功能描述: 间隙探测脉冲接口方式停止驱动处理
* 参数说明: UINT16 startJXTCRelayId 启动继电器
UINT16 stopJXTCRelayId 停止继电器
UINT16 psdId 屏蔽门ID
* 返回值
*/
void ProcessJXTCPulseInterfStopDrv(UINT16 startJXTCRelayId, UINT16 stopJXTCRelayId, UINT16 psdId);
/******************************OC spks指示灯输出处理****************************/
/*
* 功能描述: OC spks指示灯和spks旁路指示灯输出处理
* 参数说明: void
* 返回值 void
*/
void SpksDisplayDrivOutput(void);
/***********************OC SPKS关联的门禁解锁继电器输出处理****************************/
/*
* 功能描述: OC spks关联的门禁解锁输出处理
* 参数说明: void
* 返回值 void
*/
void SpksMenjinJSDrivOutput(void);
/*
* 功能描述: OC 门禁关联的spks是否激活逻辑判断
* 参数说明: void
* 返回值 void
*/
UINT8 MJrelSpksMJStateProcess(UINT16 spksId);
/******************************OC esb指示灯输出处理****************************/
/*
* 功能描述: OC esb指示灯和esb旁路指示灯输出处理
* 参数说明: void
* 返回值 void
*/
void EsbDisplayDrivOutput(void);
/******************************OC 扣车旁路指示灯输出处理****************************/
/*
* 功能描述: OC 扣车和扣车旁路指示灯输出处理
* 参数说明: void
* 返回值 void
*/
void DetainDisplayDrivOutput(void);
/*
* 功能描述: 检查取消自动触发标志是否执行
* 参数说明: const UINT16 routeId :进路ID
* const UINT16 phySecId :物理区段ID
* 返回值 CI_ERROR 检查失败
* CI_SUCCESS 检查成功
*/
UINT8 CheckCancleAutoFlag(const UINT16 routeId,const UINT16 phySecId);
/*
* 功能描述: 更新联络线设备采集状态至逻辑状态
* 参数说明: void
* 返回值
*
*/
void ConnectLineRelayToDevStateProc(void);
/*
* 功能描述: 设置联络线道岔定反表继电器驱动状态
* 参数说明: const UINT16 devId 设备ID
* const UINT16 dbRelayId 定表继电器ID
* const UINT16 fbRelayId 反表继电器ID
* 返回值
*
*/
void SetConnectSwitchPosRelayDrvSta(const UINT16 devId, const UINT16 dbRelayId, const UINT16 fbRelayId);
/*
* 功能描述: 更新联络线设备逻辑状态至继电器驱动状态
* 参数说明: void
* 返回值
*
*/
void UpdateConnectDriveRelayOutput(void);
/*
* 功能描述: 检查是否混线状态
* 参数说明:
*
* 返回值 1:不是混线状态
* 0:混线状态
*
*/
UINT8 CheckRelayHunXiandState(const UINT16 relayId);
/*
* 功能描述:计轴总复位表示灯驱动输出处理
* 参数说明: void
* 返回值 void
*/
void PhyZFWBsRelayDriveOutput(void);
/*
* 功能描述: 驱动扣车指示灯、扣车旁路指示灯
* 参数说明:const UINT16 signalCutDetainRelayId, 扣车旁路继电器ID
* const UINT16 cutDetainDisplayId, 扣车旁路表示灯继电器ID
* const UINT16 signalDetainRelayId, 扣车继电器ID
* const UINT16 signalDetainDisplayId, 扣车表示灯继电器ID
* const UINT16 signalId, 信号机ID
*
* 返回值
*
*/
void DriveDetainBsRelay(const UINT16 signalId, const UINT16 signalCutDetainRelayId, const UINT16 cutDetainDisplayId, const UINT16 signalDetainRelayId, const UINT16 signalDetainDisplayId);
/*
* 功能描述: 更新倒切装置状态
* 参数说明: void
* 返回值
*/
void RvrsCutRlyToDvicSttPrc(void);
/*
* 功能描述: 更新是否可倒切原因
* 参数说明: void
* 返回值
*/
void ReverseCutReasonProcess(void);
/*
* 功能描述: TIOC影子模式设备输出处理
* 参数说明: void
* 返回值 void
*/
void TiocSysShadowDeviceOutputProc(void);
/*
* 功能描述: 处理物理区段上的占用落到计轴区段
* 参数说明: void
* 返回值 void
*/
void ProcessPhyOCcStateToAxisSection(void);
/*
* 功能描述: 获取ESB当前需要设置的状态
* 参数说明:UINT16 esbId ESB ID
*
* 返回值 ESB_STATE_VALID_YES:设置状态为有效
* ESB_STATE_VALID_NO:设置状态为无效
* CI_ERROR: 获取失败
* cgh-合并CID-2349-3
*/
UINT8 GetEsbCurNeedSetState(UINT16 esbId);
/*
* 功能描述: OC ESS和PEP操作下的闪灯、稳灯和蜂鸣器继电器驱动输出处理
* 参数说明: void
* 返回值 void
* cgh-合并CID-2349-3
*/
void EsbRelateDelayDriveOutputProc(void);
/*
* 功能描述: OC ESS和PEP操作下的闪灯、稳灯和蜂鸣器继电器驱动输出状态机管理函数
* 参数说明: UINT16 esbId ESB ID
* 返回值 void
* cgh-合并CID-2349-3
*/
void EsbRelateDelayDriveStateManage(UINT16 esbId);
/*
* 功能描述: 检查是否驱动超时
* 参数说明: const UINT16 relayId 继电器ID
*
* 返回值 : 1:不是驱动超时状态
* 0:驱动超时
* cgh-合并CID-2349-4
*/
UINT8 CheckRelayDriveOutTimeState(const UINT16 relayId);
/*
* 功能描述: 检查是否驱动超时
* 参数说明: const UINT16 psdId 屏蔽门ID
* const UINT8 psdDriveState psd驱动状态
* 返回值 : 0xff:不是驱动超时状态
* 0x55 驱动开门未开门
* 0xaa 驱动关门未关门
* cgh-合并CID-2349-4
*/
UINT8 CheckPsdDriveOutTimeState(const UINT16 psdId);
/*
* 功能描述:获取继电器是否驱动采集不一致
* 参数说明: const UINT16 relayId, 继电器ID
const UINT8 foreNodeColl 前采状态
const UINT8 backNodeColl 后采状态
* 返回值 : 0: 驱动采集不一致
* >0: 一致
*cgh-合并CID-2349-4
*/
UINT8 CheckRelayDriAndCollDiffSeat(const UINT16 relayId, const UINT8 foreNodeColl, const UINT8 backNodeColl);
/*
* 功能描述:获取PSD是否驱动采集不一致
* 参数说明: const UINT16 psdId, PSD ID
* 返回值 : 0xff: 无报警
* 0x55: 开门驱动采集不一致
* 0xaa: 关门驱动采集不一致
*cgh-合并CID-2349-4
*/
UINT8 CheckPsdDriAndCollDiff(const UINT16 psdId);
/*
* 功能描述: 总Spks按钮指示灯处理
* 参数说明: UINT16 spksId ID
* 返回值 void
*/
void TotalSpksOutsideDisPlayProc(UINT16 spksId);
/*
* 功能描述: 室外SPKS指示灯驱动
* 参数说明: UINT16 contrlspksId spksId ID
* UINT32 spksflockStartNum spks作用起始周期
* 返回值 void
*/
void SpksOutsideDisPlayDriv(UINT16 contrlspksId, UINT32 spksflockStartNum);
/*
* 功能描述: 判断硬件扣车是否执行
* 参数说明: const UINT16 detainCutRelayId 旁路继电
const UINT16 signalDetainRelayId 扣车继电器
* 返回值 CI_ERROR: 不执行
* CI_SUCCESS: 执行
*
*/
UINT8 CheakDeatainState(UINT16 detainCutRelayId, UINT16 signalDetainRelayId);
/*
* 功能描述: 获取具备虚拟ESB当前需要设置的状态
* 参数说明:UINT16 esbId ESB ID
*
* 返回值 ESB_STATE_VALID_YES:设置状态为有效
* ESB_STATE_VALID_NO:设置状态为无效
* CI_ERROR: 获取失败
* cgh-合并CID-3037-1
*/
UINT8 GetVirEsbCurNeedSetState(UINT16 esbId);
/*
* 功能描述: 虚拟ESB逻辑处理函数
* 参数说明: 无
* 返回值 void
* cgh-合并CID-3037-1
*/
void VirtualEsbLogicProcess(void);
/*
* 功能描述: OC ESS和PEP操作下的闪灯、稳灯和蜂鸣器继电器驱动输出状态机管理函数
* 参数说明: UINT16 esbId ESB ID
* 返回值 void
* 备注:cgh-合并CID-3037-1:。
*/
void VirEsbRelateDelayDriStaManage(UINT16 esbId);
/*
* 功能描述: 获取复示信号机驱动颜色
* 参数说明: const UINT8 signalColor, 主体信号机颜色
* 返回值 : 0x01 :驱红灭,0x02:驱黄,0x04:驱绿
*cgh-合并CID-3037-3
*/
UINT8 GetFushiSignalDriveColor(const UINT8 signalColor);
/*
* 功能描述: 站台清客确认按钮闪灯稳灯继电器驱动处理
* 参数说明: const UINT16 psdId, 屏蔽门ID
* 返回值
*cgh-合并CID-3037-7
*/
void StationCearPassenagerProcess(const UINT16 psdId);
/*
* 功能描述: 更新屏蔽门对应清客确认箱关门按钮及指示灯逻辑状态
* 参数说明: const UINT16 wPsdId 屏蔽门ID
* 返回值 0u: 更新失败
* 1: 更新成功
* * cgh修改成都四线清客需求
*/
UINT8 PsdCleFarePCBRelToDevStaProc(const UINT16 wPsdId);
/*
* 功能描述: 更新屏蔽门对应清客确认箱发车按钮及指示灯逻辑状态
* 参数说明: const UINT16 wPsdId 屏蔽门ID
* 返回值 0u: 更新失败
* 1: 更新成功
* cgh修改成都四线清客需求
*/
UINT8 PsdCleFarePDBRelToDevStaProc(const UINT16 wPsdId);
/*
* 功能描述: 清客确认箱发车按钮指示灯闪灯处理
* 参数说明: const UINT16 psdId, 屏蔽门ID
* 返回值
*cgh修改成都四线清客需求
*/
void PsdCleFarePDBFlashProcess(const UINT16 psdId);
/*
* 功能描述: 自复式扣车按钮处理
* 参数说明: const UINT16 signalId 信号机ID
* 返回值
*/
void SignalZfsDetainBtnPro(const UINT16 signalId);
/*
* 功能描述: 自复式取消扣车按钮处理
* 参数说明: const UINT16 signalId 信号机ID
* 返回值
*/
void SignalZfsCancelDetainBtnPro(const UINT16 signalId);
/*
* 功能描述: 自复式取消扣车按钮按下状态处理
* 参数说明: const UINT16 wSignalId 信号机ID
* const UINT16 wCancelDetBtnRelayId 取消扣车按钮采集继电器ID
* 返回值
* Created By LQ 2024.05.09
*/
void DetZfsCancelBtnPressStateProc(const UINT16 wSignalId, const UINT16 wCancelDetBtnRelayId);
/*
* 功能描述: 自复式取消扣车按钮激活标志处理
* 参数说明: const UINT16 wSignalId 信号机ID
* const UINT16 wCancelDetBtnRelayId 取消扣车按钮采集继电器ID
* 返回值
* Created By LQ 2024.05.09
*/
void DetZfsCancelBtnActFlagProc(const UINT16 wSignalId, const UINT16 wCancelDetBtnRelayId);
/*
* 功能描述:驱动自复式扣车指示灯
* 参数说明:const UINT16 signalId, 信号机ID
* const UINT16 signalDetainDisplayId, 扣车表示灯继电器1ID
* 返回值:无
*
*/
void DriveZfsDetainBsRelay(const UINT16 signalId, const UINT16 signalDetainDisplayId);
/*
* 功能描述:自复式紧急停车按钮处理
* 参数说明:UINT16 esbId ESB ID
* 返回值 :无
*/
void EsbZfsBtnProc(UINT16 esbId);
/*
* 功能描述:自复式取消紧急停车按钮处理
* 参数说明:UINT16 esbId ESB ID
* 返回值 :无
*/
void EsbZfsCancelBtnProc(UINT16 esbId);
/*
* 功能描述:自复式紧急停车按钮取消按钮按下状态处理
* 参数说明:const UINT16 wEsbId ESB ID
* const UINT16 wCancelEsbRelayId ESB取消按钮采集继电器ID
* 返回值 :无
* Created By LQ 2024.05.09
*/
void EsbZfsCancelBtnPressStateProc(const UINT16 wEsbId, const UINT16 wCancelEsbRelayId);
/*
* 功能描述:自复式紧急停车按钮取消按钮有效标志处理
* 参数说明:const UINT16 wEsbId ESB ID
* const UINT16 wCancelEsbRelayId ESB取消按钮采集继电器ID
* 返回值 :无
* Created By LQ 2024.05.09
*/
void EsbZfsCancelBtnValidFlagProc(const UINT16 wEsbId, const UINT16 wCancelEsbRelayId);
/*
* 功能描述: 根据SPKS状态更新逻辑区段SPKS封锁状态
* 参数说明: 无
* 返回值
* by cgh 20230919 逻辑区段封锁状态仅用于给ATS显示
*/
void SpksRelayToLogSecFlockStatus(void);
/*
* 功能描述: 屏蔽门再开/关门按钮指示灯处理
* 参数说明: const UINT16 psdId, 屏蔽门ID
* 返回值
* 成都13、27、30新需求——2023.09.21
*/
void PsdOpenAndCloseBsdProc(const UINT16 psdId);
/*
* 功能描述: 检查继电器是否驱动超时-带超时时间参数
* 参数说明: const UINT16 relayId 继电器ID
* const UINT32 dwTimeOutCycCount 最大时间
* 返回值 : 1:不是驱动超时状态
* 0:驱动超时
* by cgh 20230923
*/
UINT8 CheckRelayDriveOutTime(const UINT16 wRelayId, const UINT32 dwTimeOutCycCount);
/*
* 功能描述: 声光报警器输出处理
* 参数说明: void
* 返回值 void
* 成都三线新需求:声光报警器——2023.09.23 by LQ
*/
void SGBJDriveOutputProc(void);
/*
* 功能描述: 设置继电器驱动起始周期
* 参数说明: const UINT16 relayId 继电器ID
* 返回值
* by cgh 20230930
*/
void SetRelayDriveStartCyc(const UINT16 wRelayId);
/*
* 功能描述: 设置所有道岔单独位置
* 参数说明: UINT16 switchCurSum 道岔总数
* 返回值
*/
void SetAllSingleSwitchCurPosition(UINT16 switchCurSum);
/*
* 功能描述: 设置道岔当前逻辑位置
* 参数说明: UINT16 switchCurSum 道岔总数
* 返回值
*/
void UpdataSwitchCurPostion(UINT16 switchCurSum);
/*
* 功能描述: 根据道岔当前逻辑位置选择清理相关内容
* 参数说明: UINT16 switchCurSum 道岔总数
* 返回值
*/
void ClearSwitchMessageByCurPostion(UINT16 switchCurSum);
/*
* 功能描述: 洗车机工作模式继电器状态处理
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 0u: 更新失败
* 1: 更新成功
* by cgh 20231108
*/
UINT8 WashMachineWorkModeRelayProc(const UINT16 washMachineId);
/*
* 功能描述: 更新降级模式洗车继电器状态
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 CI_ERROR: 更新失败
* CI_SUCCESS: 更新成功
* by cgh 20231113
*/
UINT8 DownWashDevToRelayStaProc(const UINT16 washMachineId);
/*
* 功能描述: 降级模式洗车线关联进路状态检查
* 参数说明: const UINT16 wRouteId 进路ID
* const UINT8 chCheckType 进路检查类型
* 返回值 CI_ERROR: 更新失败
* CI_SUCCESS: 更新成功
* by cgh 20231113
*/
UINT8 DownWashRelRouteStateCheck(const UINT16 wRouteId, const UINT8 chCheckType);
/*
* 功能描述: 处理驱采两个继电器ID是否混线状态
* 参数说明:const UINT16 drvRelayId 驱动继电器ID
* const UINT16 collectRelayId 采集继电器ID
*
*/
void ProcessCoupleRelayHunXianState(const UINT16 drvRelayId, const UINT16 collectRelayId);
/*
* 功能描述: 设置洗车模式继电器驱动起始周期
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值
* by cgh 20231208
*/
void SetWorkModeRelayDriveStartCyc(const UINT16 washMachineId);
/*
* 功能描述: 屏蔽门视频清客驱动状态处理
* 参数说明: const UINT16 wPsdId, 屏蔽门ID
* 返回值
* by cgh 20231214
*/
void PsdVideoQkDriveStateProc(const UINT16 wPsdId);
/*
* 功能描述:道岔采集容忍处理(对存在锁闭状态的道岔采集四开增加3周期的容忍)
* 参数说明: const UINT16 switchId 道岔ID
* 返回值 道岔容忍后位置
* Create: fan 20250317
*/
UINT8 GetSwitchCollToleratePos(const UINT16 switchId);
/*
* 功能描述:检查道岔是否满足容忍条件
* 参数说明: const UINT16 switchId 道岔ID
* 返回值 CI_SUCCESS满足融合条件 CI_ERROR不满足容忍 需要立即四开
* Create: fan 20250317
*/
UINT8 CheckSwitchCollTolerateState(UINT16 switchId);
#ifdef __cplusplus
}
#endif
#endif
File diff suppressed because it is too large Load Diff
+458
View File
@@ -0,0 +1,458 @@
/********************************************************
*
* 文 件 名: InputDataProcess.c
* 版权说明: 北京交控科技有限公司
* 创建时间: 2012-04-07
* 作 者: 联锁组
* 功能描述: 输入数据处理
* 修改记录:
*
********************************************************/
#ifndef _INPUT_DATA_PROCESS_H_
#define _INPUT_DATA_PROCESS_H_
#include "../2oo2/2oo2InterfaceDataManage.h"
#include "../ParsePack/ParsePackIoData.h"
#include "../Relay/RelayConfigDataManage.h"
#include "../Relay/RelayDataManage.h"
#include "../Mask/MaskConfigDataManage.h"
#include "../Transmit/TransmitDefine.h"
#if 0
#include "../ParsePack/ParsePackZcData.h"
#endif
#include "../ParsePack/ParsePackCiData.h"
#include "../ParsePack/ParsePackAtsData.h"
#include "../ParsePack/ParsePackIoData.h"
#include "../ParsePack/ParsePackVobcData.h"
#include "../ParsePack/ParsePackPlatformData.h"
#include "../ParsePack/ParsePackLeuData.h"
#include "../ParsePack/CiInterfaceDefine.h"
#include "../LogicManage/InterlockLogicManage.h"
#include "../Signal/SignalDataManage.h"
#include "../DataManage/DeviceDataManage.h"
#include "./DeviceRelayDataProcess.h"
#include "../LogicManage/TradInterlockLogicManage.h"
#include "../Initial/InitialProcess.h"
#include "../Route/RouteDataManage.h"
#include "../Signal/SignalDataManage.h"
#include "../WashMachine/WashMachineDataManage.h"
#include "../Section/PhysicalSectionDataManage.h"
#include "../ERROR/ErrorDefine.h"
#include "dquIdmapQuery.h"
#include "../VirtualDevice/VirtualDevDataManage.h"
#include "../ParsePack/ParsePackAxleData.h"
#include "../Train/TrainDataManage.h"
#include "../ParsePack/ParsePackZcData.h"
#include "../AxisSort/AxisSort_api.h"
#include "../SectionStateProcess/SectionStateProcess_api.h"
#include "../ParsePack/ParsePackITEData.h"
#include "../PSD/PSDDataManage.h"
#include "SectionDefine.h"
#define USE_OC_GD_AS_PHY_COLL /*宏定义:使用OC轨道状态作为物理区段采集*/
#undef USE_OC_GD_AS_PHY_COLL
#ifdef __cplusplus
extern "C" {
#endif
/*
* 功能描述: 处理输入数据
* 参数说明: void
* 返回值 void
*/
void InputDataProcess(void);
/*
* 功能描述: 处理IO到CI数据
* 参数说明: void
* 返回值 0:处理失败
* 1:处理成功
*/
UINT8 ProcessIoToCiData(void);
#if 1
/*
* 功能描述: 处理ZC到CI数据
* 参数说明: void
* 返回值
*
*/
void ProcessZcToCiData(void);
#endif
/*
* 功能描述: 处理TMC到TIOC数据
* 参数说明: void
* 返回值 0u:处理失败
* 1:处理成功
*/
void ProcessTmcToTiocData(void);
/*
* 功能描述: 处理VOBC到CI数据
* 参数说明: void
* 返回值 void
*/
void ProcessVobcToCiData(void);
/*
* 功能描述: 处理后备模式VOBC到CI数据
* 参数说明: void
* 返回值 void
* 修复bug YF0083-100、219
*/
void ProcessVobcBackupToCiData(void);
/*
* 功能描述: 处理PSD到CI数据
* 参数说明: void
* 返回值 void
*/
void ProcessPlatformToCiData(void);
/*
* 功能描述:处理PSC系统数据
* 参数说明: void
* 返回值 void
*/
void ProcessPscToCiData(void);
/*
* 功能描述: 处理ATS或现地到CI数据
* 参数说明: void
* 返回值 0:处理失败
* 1:处理成功
*/
UINT8 ProcessAtsOrXianDiToCiData(void);
/*
* 功能描述: 处理车辆段的ATS或现地到CI数据
* 参数说明: void
* 返回值 0:处理失败
* 1:处理成功
*/
UINT8 ProcessAtsOrXianDiToCiDataCld(void);
/*
* 功能描述: 处理设备逻辑状态
* 参数说明: void
* 返回值 void
*/
void ProcessDeviceLogicState(void);
/*
* 功能描述: 处理码位逻辑
* 参数说明:
* const UINT8 systemType, 系统设备类型
* const UINT8* maskBuf, 码位数据
* const UINT16 maskSum, 码位总数
* 返回值 0: 处理失败
* 1: 处理成功
*/
UINT8 MaskDataProcess(const UINT8 systemType, const UINT8* maskBuf, const UINT16 maskSum);
/*
* 功能描述: 处理CI到CI数据
* 参数说明: void
* 返回值
*
*/
void ProcessCiToCiData(void);
/*
* 功能描述: 更新物理区段融合逻辑状态
* 参数说明: void
* 返回值 void
*/
void UpdatePhySectionMergeLogicState(void);
/*
* 功能描述: 融合逻辑区段CT占用信息
* 参数说明: void
* 返回值 void
*/
void UpdateLogSectionCTOccupyState(void);
/*
* 功能描述: 处理LEU到CI数据,获取LEU整机故障标志位
* 参数说明: void
* 返回值 void
*/
void ProcessLeuToCiData(void);
/*
* 功能描述: 处理ATS或现地到CI的信号特开命令
* 参数说明: void
* 返回值 0:处理失败
* 1:处理成功
*/
UINT8 ProcessAtsOrXDToCiReturnToTRCmd(void);
/*
* 功能描述: 从PSD数据中删除某个VOBC产生的上下文
* 参数说明: UINT16 vobcId VOBC结构体的VobcId
* 返回值
*/
void ClearPsdVobcContext(const UINT16 vobcId);
/*
* 功能描述: 更新本联锁继电接口确认状态
* 参数说明: void
* 返回值 void
*/
void UpdateRelayInterfaceConfirmFlag(void);
/*
* 功能描述:处理存在ATS确认PSC旁路系统屏蔽门状态数据
* 参数说明: UINT8 pscId PSC系统ID
* 返回值 void
*/
void UpdateAtsPscPlFlagData(UINT8 pscId);
/*
* 功能描述: 处理OC到CI的继电器数据
* 参数说明: void
* 返回值 0:处理失败
* 1:处理成功
*/
UINT8 ProcessOcToCiRelayData(void);
/*
* 功能描述: 处理OC到CI数据帧
* 参数说明: void
* 返回值 void
*/
void ProcessOcToCiData(void);
/*
* 功能描述: 处理融合AB系轨道区段状态
* 参数说明: void
* 返回值 void
*/
void OcProcessMergeABGdState(void);
/*
* 功能描述: 更新OC轨道区段采集状态
* 参数说明: void
* 返回值 void
*/
void OcPhyStateToDeviceStatePro(void);
/*
* 功能描述: 重置OC轨道板AB两系采集状态
* 参数说明: void
* 返回值 void
*/
void OcResetGdABCollState(void);
/*
* 功能描述: 更新具体的OC轨道板采集状态
* 参数说明: void
* 返回值 void
*/
void OcUpdateSpecificGdCollState(void);
/*
* 功能描述: 处理Axle到CI数据
* 参数说明: void
* 返回值 void
*/
void ProcessAxleToCiData(void);
/*
* 功能描述: 融合计轴子系统和OC子系统轨道区段采集状态
* 参数说明: void
* 返回值 void
*/
void MergeAxleOcGdPhyState(void);
/*
* 功能描述: 检查命令是否为普通命令(不具备二次命令)
* 参数说明: void
* 返回值 void
*/
UINT8 CheckIsGeneralOrder(UINT8 OrderType);
/*
* 功能描述: 虚拟联锁设置临时限速
* 参数说明: void
* 返回值
*/
void SetComBadLinShiXianSuState_Vir(void);
/*
* 功能描述: 虚拟联锁处理引导总锁命令
* 参数说明: void
* 返回值
*/
void DealallSwitchYLockOrder_Vir(void);
/*
* 功能描述: 根据输入虚拟联锁ID和设备属于虚拟联锁ID,检查命令是否要被执行
* 参数说明: UINT8 virCIid 输入虚拟联锁ID
* UINT8 belongVirCIid 设备属于虚拟联锁ID
* UINT8 orderType 命令类型
* UINT16 deiceID 命令ID
* 返回值 : 检查结果:CI_ERROR 不执行,CI_SUCCESS 执行
*/
UINT8 CheckOrderWhetherDoing(UINT8 virCIid,UINT8 belongVirCIid,UINT8 orderType,UINT16 deiceID);
/*
* 功能描述: 处理自动折返闪灯,稳灯码位
* 参数说明: UINT16 DeviceId 指示灯行ID
* UINT16*maskBuf 码位数组
* UINT8 MaskType 码位类型
* 返回值
*/
void DealAutoReturnMask_UseVirCI(UINT16 DeviceId,UINT16*maskBuf,UINT8 MaskType,UINT16 index);
/*
* 功能描述: 获取全站维修点灯状态
* 参数说明: UINT8 virCIid 虚拟联锁ID
* 返回值 维修点灯状态
*/
UINT8 GetALLSignalMaintainState(UINT8 virCIid);
/*
* 功能描述:IVOC解锁保护区段处理
* 参数说明:vobcToCiDataStruVOBC数据结构体指针
* 返回值 void
*/
static void IvocUnLockOverlapProc(VobcToCiDataStruct* vobcToCiDataStru);
/*
* 功能描述: IVOC洗车相关信息处理
* 参数说明: vobcToCiDataStruVOBC数据结构体指针
* 返回值 void
* by cgh 20231109
*/
static void IvocWashDataProc(VobcToCiDataStruct* vobcToCiDataStru);
/*
* 功能描述: 设置IVOC洗车机驱动状态
* 参数说明: vobcToCiDataStruVOBC数据结构体指针
* const UINT16 washMachineId 洗车机ID
* 返回值 void
* by cgh 20231110
*/
static void SetIvocWashDriveState(VobcToCiDataStruct* vobcToCiDataStru, const UINT16 washMachineId);
/*
* 功能描述: 清除洗车机VOBC的驱动状态
* 参数说明: vobcToCiDataStruVOBC数据结构体指针
* 返回值 void
* by cgh 20231110
*/
void ClearWashVobcDriveState(VobcToCiDataStruct* vobcToCiDataStru);
/*
* 功能描述:IVOC车库门关闭确认处理
* 参数说明:vobcToCiDataStruVOBC数据结构体指针
* 返回值 void
* BY LC
*/
static void IvocGarageDoorCloseProc(VobcToCiDataStruct* vobcToCiDataStru);
/*
* 功能描述: Vobc视频清客相关信息处理
* 参数说明: vobcToCiDataStruVOBC数据结构体指针
* 返回值 void
* by cgh 20231214
*/
static void VobcVideoQkDataProc(VobcToCiDataStruct* vobcToCiDataStru);
/*
* 功能描述: 设置关联PSD视频清客驱动状态
* 参数说明: const UINT16 wPsdId1 屏蔽门ID1
* const UINT16 wPsdId2 屏蔽门ID2
* const UINT8 chSetState 视频清客驱动状态
* const UINT16 wRelateVobcId 视频清客关联VOBC ID
* 返回值 void
* by cgh 20231214
*/
void SetRelatePsdVideoQkDriveState(const UINT16 wPsdId1, const UINT16 wPsdId2, const UINT8 chSetState, const UINT16 wRelateVobcId);
/*
* 功能描述: 出清对应列车在对应物理区段上的停稳信息
* 参数说明: UINT16 wTrainId 列车ID
* 返回值 void
*/
void ClearVobcStopSteadyData(UINT16 wTrainId);
/*
* 功能描述: Vobc前车位置信息处理
* 参数说明: const UINT16 wTrainId 列车ID
* 返回值 void
* by cgh 20240606
*/
void VobcHeadTrainDataProc(const UINT16 wTrainId);
/*
* 功能描述: 清除Vobc前车位置信息处理
* 参数说明: const UINT16 wTrainId 列车ID
* 返回值 void
* by cgh 20240606
*/
static void ClearVobcHeadTrainData(const UINT16 wTrainId);
/*
* 功能描述:处理ITE到CI数据
* 参数说明:void
* 返回值 void
* Created By LQ 2024.06.06
*/
void ProcessIteToCiData(void);
/*
* 功能描述: 更新ATS设备通信状态
* 参数说明: void
* 返回值
* by cgh 20240614
*/
void UpdataAtsDeviceCommState(void);
/*
* 功能描述:刷新湿轨标志
* 参数说明:无
* 返回值 :无
* Created By LQ 2024.09.20
*/
void UpdateHumidRailFlag(void);
/*
* 功能描述: 进路区段锁闭命令处理
* 参数说明: const UINT16 wCurRLockRouteId 当前锁闭所属进路ID
const UINT16 wPreRLockRouteId 之前锁闭所属进路ID
* 返回值
* by cgh 20241204
*/
void RouteSecLockApplyCmdProc(const UINT16 wCurRLockRouteId, const UINT16 wPreRLockRouteId);
/*
* 功能描述:逻辑进路清除跨控区进路逻辑区段锁闭处理
* 参数说明:const UINT16 wPreRouteId 原进路ID
* 返 回 值: 无
* Created By LQ 2025.03.10
*/
void LogRouteCleanOldLogSecLockProc(const UINT16 wPreRouteId);
/*
* 功能描述:逻辑进路清除跨控区进路物理区段锁闭处理
* 参数说明:const UINT16 wPreRouteId 原进路ID
* 返 回 值: 无
* Created By LQ 2025.03.10
*/
void LogRouteCleanOldPhySecLockProc(const UINT16 wPreRouteId);
/*
* 功能描述:跨控区部分进路清除逻辑进路处理
* 参数说明:const UINT16 wCurRouteId 当前进路ID
* 返 回 值: 无
* Created By LQ 2025.03.10
*/
void OtherPartRouteCleanLogRouteProc(const UINT16 wCurRouteId);
#ifdef __cplusplus
}
#endif
#endif
File diff suppressed because it is too large Load Diff
+463
View File
@@ -0,0 +1,463 @@
/********************************************************
*
* OutputDataProcess.h
*
* 2012-04-07
*
*
*
* 使
*
*
********************************************************/
#ifndef _OUTPUT_DATA_PROCESS_H_
#define _OUTPUT_DATA_PROCESS_H_
#include "../ERROR/ErrorDefine.h"
#include "../ERROR/ErrorDataManage.h"
#include "../ParsePack/ParsePackAtsData.h"
#include "../ParsePack/CiInterfaceDefine.h"
#include "../ParsePack/ParsePackLeuData.h"
#include "../DataManage/DeviceDataManage.h"
#include "../DataManage/PlatDataManage.h"
#include "./DeviceRelayDataProcess.h"
#include "../Indicator/IndicatorConfigDataManage.h"
#include "../Indicator/IndicatorDataManage.h"
#include "../Indicator/IndicatorDefine.h"
#include "../NonRoute/NonRouteConfigDataManage.h"
#include "../NonRoute/NonRouteDataManage.h"
#include "../NonRoute/NonRouteDefine.h"
#include "../2oo2/2oo2InterfaceDataManage.h"
#include "../Transmit/TransmitStateDataManage.h"
#include "../Route/RouteConfigDataManage.h"
#include "../LogicProcess/InterlockLogicCheck.h"
#include "../VirtualDevice/VirtualDevDataManage.h"
#include "../QueryFiles/dquCIInterFace.h"
#include "../DiffLineDev/DiffLineDevConfigDataManage.h"
#include "../Relay/RelayDataManage.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
*
* void
* void
*/
void OutputDataProcess(void);
/*
* CI到ATS反馈信息处理
* void
*
*/
void CiToAtsBackInfoProcess(void);
/*
*
* void
*
*/
void ErrorCodeDataProcess(void);
/*
* ATS反馈信息参数
*
* const UINT8 functionId id
* const UINT8 deviceStateType,
* const UINT8 deviceState,
* 0:
* >0:
*/
UINT8 GetAtsBackInfoParam(const UINT8 functionId,const UINT8 deviceStateType, const UINT8 deviceState);
/*
* ATS反馈信息函数判断
* const UINT8 functionId, ID
const UINT8 deviceType
* 0:
* >0:
*/
UINT8 CiToAtsBackInfoFunctionJudge(const UINT8 functionId,const UINT8 deviceType);
/*
*
* void
* void
*/
void IndicatorStateProc(void);
/*
*
* void
* void
*/
void IndicatorStateProc_UseVirCI(UINT8 virCIid);
/*
*
* void
* void
*/
void NonRouteRelayStateProc(void);
/*
*
* void
*
*/
void TimeDataFeedBackProcess(void);
/*
*
* void
* void
*/
void VirtualRelayStateProc(void);
/*
*
* void
* void
*/
void UpdateFaultLockZhaoChaDrive(void);
/*
*
* UINT16 devId ID
* void
*/
void SignaDsBreakAlarmIndicator(UINT16 devId);
/*
*
* UINT16 devId ID
* void
*/
void SignaDsBreakAlarmIndicator_Vir(UINT8 virCIid,UINT8 devId);
/*
*
* void
* void
*/
void CiToCiOutputCmdProc(void);
/*
*
*
*
*/
static void AutoRtnIndictStatusProc_VirCI(void);
/*
* ID
* groupAutoRouteId ID
* ID
*
*/
UINT8 GetGroupAutoRouteBelongVirCIid(UINT16 groupAutoRouteId);
/*********************************************
*
*
*
*********************************************/
void UpdateZhaoChaCheckZhaoChaDrive(void);
/*********************************************
*
*
*
*********************************************/
void VirtualDeviceOutputProc(void);
/*********************************************
*
*
*
*********************************************/
void VirtualSignalStateProc(void);
/*
* 线
*
*
*
*/
void SetDriveRelayHunXianState(void);
/*
*
*
* const UINT16 overlapId id
* const UINT16 OverlapUnLockCount
* const UINT32 startCycNum
*
*
*/
UINT16 GetOverlapUnlockBackTime(const UINT16 overlapId, UINT16 OverlapUnLockCount, const UINT32 startCycNum);
/*
*
*
*
*
*/
void DriveFushiSignal(void);
/*
*
* UINT8 virCiId ID
* CI_SUCCESS
* CI_ERROR
*/
UINT8 CheckAutoTriggerIndicatFlag(UINT8 virCiId);
/*
*
* void
* void
*/
void OcStationIndicStateProc(void);
/*
* PSD通信状态指示灯状态处理
* UINT16 indicatorId ID
* UINT8 devType
*
*/
void SetPSDCommonState(UINT16 indicatorId ,UINT8 devType);
/*
* PSD通信状态指示灯状态处理
* UINT16 indicatorId ID
* UINT8 devType
*
*/
void SetPSDCommonState_UseVirCI(UINT8 virCIid,UINT8 indicatorId ,UINT8 devType);
/*
*
* UINT16 indicatorId ID
*
*
*/
void SetZhaoChaIndictorCommonState(UINT16 indicatorId);
/*
*
* void
* void
*/
void SetCiModeIndicatorState(UINT16 indicatorId);
/*
* 使
* void
* void
*/
void OutPutIndicatorState_UseVirCI(void);
/*
*
* const UINT16 wRouteId ID
* void
* cgh-
*/
void RouteTimeDataBackProcess(const UINT16 wRouteId);
/*
*
* const UINT16 wPhySecId ID
* void
* cgh-
*/
void PhySecTimeDataBackProcess(const UINT16 wPhySecId);
/*
*
* const UINT16 wPhySecId ID
* void
* cgh-
*/
void OverlapTimeDataBackProcess(const UINT16 wOverlapId);
/*
*
* void
* void
* cgh-
*/
void ZFWJTimeDataBackProcess(void);
/*
*
* NonRouteDataStruct* pNonRoute
* void
* cgh-
*/
void NonRouteTimeDataBackProcess(NonRouteDataStruct* pNonRoute);
/*
*
* const UINT16 wFloodGateId ID
* void
*/
void FloodGateTimeDataBackProcess(const UINT16 wFloodGateId);
/*
*
* void
*
*/
void VobcBackUpOutputProcess(void);
/*
*
* const UINT16 wTrainId ID
*
* by cgh 20240710
*/
void VobcBackUpLogSecManage(const UINT16 wTrainId);
/*
* ()
* const UINT16 wTrainId ID
*
* by cgh 20240710
*/
void VobcBackUpRouteManage(const UINT16 wTrainId);
/*
*
* const UINT16 wTrainId ID
*
* by cgh 20240710
*/
void VobcBackUpProSecManage(const UINT16 wTrainId);
/*
*
* const UINT16 wTrainId ID
*
* by cgh 20240710
*/
void VobcBackUpXiansuSecManage(const UINT16 wTrainId);
/*
*
* const UINT16 wPhySecId ID
* const UINT16 wTrainId ID
*
*/
void AddXiansuPhySecData(const UINT16 wLogSecId, const UINT16 wTrainId);
/*
* ESB数据信息
* UINT16 wTrainId id
*
*/
void VobcBackUpPsdEsbManage(UINT16 wTrainId);
/*
* : PSD数据信息
* const UINT16 , logSecID ID
* ABLTrainRelPsdStru* tmpAblPsdData Psd信息数组
* UINT8 ablPsdNum Psd数量
* >0 0:
*/
UINT8 AddABLPsdInfo(const UINT16 logSecID, ABLTrainRelPsdStru* tmpAblPsdData, const UINT8 ablPsdNum);
/*
* : ESB数据信息
* const UINT16 , logSecID ID
* ABLTrainRelEsbStru* tmpAblEsbData Esb信息数组
* UINT8 ablEsbNum Esb数量
* >0 0:
*/
UINT8 AddABLEsbInfo(const UINT16 logSecID, ABLTrainRelEsbStru* tmpAblEsbData, const UINT8 ablEsbNum);
# if 0
/*
*
* VobcBackUpToCiDataStruct* VobcBackUpToCiDataStr列车后备信息结构体
*
*/
void VoBcBackUpSwitchManage(VobcBackUpToCiDataStruct* VobcBackUpToCiDataStr);
/*
* ABL道岔
* const UINT16 switchID, ID
* ABLTrainRelSwitchStru* tmpAblSwitchData
* UINT8 tmpSwitchNum
* CI_SUCCESS CI_ERROR未改变
*/
UINT8 AddABLSwitchInfo(const UINT16 switchID, ABLTrainRelSwitchStru* tmpAblSwitchData, UINT16 tmpSwitchNum);
/*
*
*
* : UINT8 logSecNum UINT16* logSecBuf
* : ABLTrainRelSwitchStru* tmpAblSwitchData UINT8* chAblSwitchNum
* >0 0:
* Create: fan 2024.5.21
*/
UINT8 AddLogBelongPhySecABLSwitchInfo(UINT16 logSecNum, UINT16* logSecBuf, ABLTrainRelSwitchStru* tmpAblSwitchData, UINT8 chAblSwitchNum);
#endif
/*
*
* const UINT16 wTrainId ID
*
* by cgh 20240711
*/
void VobcLocReverseRouteCheck(const UINT16 wTrainId);
/*
*
* const UINT16 wTrainId ID
*
* by LC
*/
void VobcBackUpRouteNoOccuManage(const UINT16 wTrainId);
/*
*
* const UINT16 wTrainId ID
* CI_SUCCESS
* CI_ERROR
* by LC
*/
UINT8 VobcBackUpRouteNoOccuCheck(const UINT16 wTrainId);
/*
*
* const UINT16 wTrainId ID
* const UINT16 overLogSecId ID
* CI_SUCCESS
* CI_ERROR
* by LC
*/
UINT8 VobcBackUpOverlapNoOccuCheck(const UINT16 wOverlapId, UINT16* overLogSecId);
/*
*
* const UINT16 routeId ID
* CI_SUCCESS
* CI_ERROR
* by LC
*/
UINT8 FindRouteLeaveAxis(const UINT16 routeId);
/*
*
* void
*
* by cgh 20240904
*/
void RtnRealyAdhesionStatePro(void);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,459 @@
/********************************************************
*
* IndicatorConfigDataManage.c
*
* 2012-11-26
*
*
*
********************************************************/
#include "IndicatorConfigDataManage.h"
#include "../VirtualDevice/VirtualDevDataManage.h"
IndicatorConfigDataStruct IndicatorConfigDataStru[INDICATOR_SUM_MAX]; /*定义指示器数据配置结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
UINT16 LocalCiIndicatorIdBuf[INDICATOR_SUM_MAX] = {0u};/*定义本地联锁指示灯ID映射数组*/
INT16 IndicatorCurSum = 0; /*指示器当前总数*/
OCStationIndicConfigDataStru g_OCStationIndicConfigDataStru[INDICATOR_SUM_MAX] = { 0u };
UINT16 g_OCStationIndicatorCurSum = 0; /*本联锁OC站(集中站和非集中站)指示器总数,不涉及主备跟随,取值范围0-1000*/
/*
*
* void
* 0u:
* >0u:
*/
UINT16 GetIndicatorCurSum(void)
{
UINT16 reVal = 0u;
if ((INT16)INDICATOR_SUM_MAX <= IndicatorCurSum)
{
reVal = INDICATOR_SUM_MAX;
}
else if (0 > IndicatorCurSum)
{
reVal = 0u;
}
else
{
reVal = (UINT16)IndicatorCurSum;
}
return reVal;
}
/*
* ID
* const UINT16 bufIndex,
* 0u:
* >0u: ID
*/
UINT16 GetIndicatorId(const UINT16 bufIndex)
{
UINT16 reVal = CI_ERROR;
if (bufIndex < GetIndicatorCurSum())
{
reVal = LocalCiIndicatorIdBuf[bufIndex];
}
return reVal;
}
/*
* ID指示器索引号
* const UINT16 indicatorId, ID
*
*
*/
UINT16 GetIndicatorConfigBufIndex(const UINT16 indicatorId)
{
UINT16 reVal = INDICATOR_SUM_MAX;
if ((indicatorId >= 1u) && (indicatorId < INDICATOR_SUM_MAX))
{
reVal = indicatorId;
}
return reVal;
}
/*
* ID指示器类型
* const UINT16 indicatorId, ID
*
*
*/
UINT8 GetIndicatorType(const UINT16 indicatorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetIndicatorConfigBufIndex(indicatorId); /*获取指示器相关继电器数组下标*/
if (bufIndex < INDICATOR_SUM_MAX)
{
reVal = IndicatorConfigDataStru[bufIndex].IndicatorType;
}
return reVal;
}
/*
* ID指示器相关ID总数
* const UINT16 indicatorId, ID
*
*
*/
UINT8 GetIndicatorRelaySum(const UINT16 indicatorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetIndicatorConfigBufIndex(indicatorId); /*获取指示器相关继电器数组下标*/
if (bufIndex < INDICATOR_SUM_MAX)
{
reVal = IndicatorConfigDataStru[bufIndex].IdSum;
}
return reVal;
}
/*
* ID指示器相关Id数组地址
* const UINT16 indicatorId, ID
*
*
*/
UINT16* GetIndicatorRelayIdBuf(const UINT16 indicatorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16* reVal = NULL;
bufIndex = GetIndicatorConfigBufIndex(indicatorId); /*获取指示器数组下标*/
if (bufIndex < INDICATOR_SUM_MAX)
{
reVal = IndicatorConfigDataStru[bufIndex].IdBuf;
}
return reVal;
}
/*
*
*
* CI_SUCCESS,
* CI_ERROR,
*/
UINT8 IndicatorConfigDataManage(void)
{
UINT16 ii = 0u; /*游标*/
UINT16 jj = 0u; /*游标*/
UINT16 indicatorConfigDataSum = 0u; /*指示灯设备配置数据总数*/
UINT8 reVal = CI_ERROR;
/*保存indicatorId索引数组*/
indicatorConfigDataSum = GetIndicatorCurSum();
if (indicatorConfigDataSum >= INDICATOR_SUM_MAX)
{/*配置数据总数错误*/
reVal = CI_ERROR;
}
else
{
reVal = CI_SUCCESS;
for (ii = 0u; ii < INDICATOR_SUM_MAX; ii++)
{
if (jj == indicatorConfigDataSum)
{/*遍历有效数据完毕*/
break;
}
if (IndicatorConfigDataStru[ii].IndicatorId != 0u)
{/*该部分为有效数据*/
LocalCiIndicatorIdBuf[jj] = IndicatorConfigDataStru[ii].IndicatorId;
jj++;
}
}
}
return reVal;
}
/*
*
* const UINT16 indicatorId, ID
*
*/
UINT8 GetIndicatorAvalibleFlag(const UINT16 indicatorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 reVal = INDICATOR_DATA_VALID;
bufIndex = GetIndicatorConfigBufIndex(indicatorId); /*获取指示器数组下标*/
if (bufIndex < INDICATOR_SUM_MAX)
{
reVal = IndicatorConfigDataStru[bufIndex].AvalibleFlag;
}
return reVal;
}
/*
* id
* UINT16 indicatorId, ID
* id
*/
UINT8 GetNonRouteIdByIndicatorId(UINT16 indicatorId)
{
UINT8 nonRouteId = 0u;
if(indicatorId < INDICATOR_SUM_MAX)
{
IndicatorConfigDataStruct light = IndicatorConfigDataStru[indicatorId];
if(light.IdSum>=2u)
{
nonRouteId = (UINT8)(light.IdBuf[1]);
}
else if (light.IdSum == 1u)
{
nonRouteId = (UINT8)(light.IdBuf[0]);
}
else
{
/*不做处理*/
}
}
else
{
;
}
return nonRouteId;
}
/*
* id
* UINT16 indicatorId, ID
* id
*/
UINT16 GetNonRouteIdByIndictId_Vir(UINT8 virCIid,UINT8 indicatorId)
{
UINT16 nonRouteId = 0u;
UINT16 * pNonRouteIdBuf = NULL;
UINT8 nonRouteSum = 0u;
nonRouteSum = GetVirCIIndicConfDataRelaySum(virCIid,indicatorId);
pNonRouteIdBuf = GetVirCIIndicConfDataRelayBuf(virCIid,indicatorId);
if(NULL !=pNonRouteIdBuf)
{
if(2u <= nonRouteSum)
{
nonRouteId = pNonRouteIdBuf[1];
}
else if(1u == nonRouteSum)
{
nonRouteId = pNonRouteIdBuf[0];
}
else
{
nonRouteId = 0u;
}
}
return nonRouteId;
}
/*
* OC站指示灯总数
* void
* 0u:
* >0u:
* cgh-ECI11.0:
*/
UINT16 GetOCStationIndicCurSum(void)
{
UINT16 reVal = 0u;
if (INDICATOR_SUM_MAX >= g_OCStationIndicatorCurSum)
{
reVal = (UINT16)g_OCStationIndicatorCurSum;
}
return reVal;
}
/*
* OC站指示灯ID
* void
* 0u:
* >0u: ID
* cgh-ECI11.0:
*/
UINT8 GetOCStationIndicIdByIndex(UINT16 index)
{
UINT16 indicNum = GetOCStationIndicCurSum();
UINT16 i = 0u;
UINT8 reVal = 0u;
if (indicNum > index)
{
reVal = g_OCStationIndicConfigDataStru[index].IndicatorId;
}
return reVal;
}
/*
* OC站指示灯所属OC
* void
* 0u:
* >0u: OC ID
* cgh-ECI11.0:
*/
UINT8 GetOCStationIndicOcIdByIndex(UINT16 index)
{
UINT16 indicNum = GetOCStationIndicCurSum();
UINT16 i = 0u;
UINT8 reVal = 0u;
if (indicNum > index)
{
reVal = g_OCStationIndicConfigDataStru[index].OcId;
}
return reVal;
}
/*
* ID获取对应继电器ID
* UINT8 ocid OCID
* UINT8 indicId ID
* 0u:
* >0u: ID
* cgh-ECI11.0:
*/
UINT16 GetOCStationIndicRelayId(UINT8 ocid, UINT8 indicId)
{
UINT16 indicNum = GetOCStationIndicCurSum();
UINT16 i = 0u;
UINT16 relayId = 0u;
for (i = 0u; i < indicNum; i++)
{
if ((indicId == g_OCStationIndicConfigDataStru[i].IndicatorId)
&& (ocid == g_OCStationIndicConfigDataStru[i].OcId))
{
if (0u < g_OCStationIndicConfigDataStru[i].IdSum)
{
relayId = g_OCStationIndicConfigDataStru[i].IdBuf[0];
}
break;
}
}
return relayId;
}
/*
* ID获取指示灯类型
* UINT8 ocid OCID
* UINT8 indicId ID
* 0u:
* >0u: ID
* cgh-ECI11.0:
*/
UINT8 GetOCStationIndicType(UINT8 ocid, UINT8 indicId)
{
UINT16 indicNum = GetOCStationIndicCurSum();
UINT16 i = 0u;
UINT8 reVal = 0u;
for (i = 0u; i < indicNum; i++)
{
if ((indicId == g_OCStationIndicConfigDataStru[i].IndicatorId)
&& (ocid == g_OCStationIndicConfigDataStru[i].OcId))
{
reVal = g_OCStationIndicConfigDataStru[i].IndicatorType;
break;
}
}
return reVal;
}
/*
* ID获取报警灯设备ID
* UINT16 indicatorId
* 0u:
* >0u: ID
*/
UINT8 GetIndicatorDevId(UINT16 indicatorId)
{
UINT8 reVal = 0U;
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetIndicatorConfigBufIndex(indicatorId); /*获取指示器相关继电器数组下标*/
if (INDICATOR_SUM_MAX != bufIndex)
{
/*表示灯类型为无人折返(返回指示灯设备ID)、电源屏报警、UPS工作指示灯、主电源、副电源、UPS电池供电、UPS电池电压等(返回车站ID)*/
reVal = IndicatorConfigDataStru[bufIndex].BjdDeviceId;
}
else
{
reVal = 0U;
}
if (UINT8_MAX == reVal)
{
reVal = 0U;/*数据配置错误返回零,取值只能是0~254*/
}
return reVal;
}
/*
* ID获取无人折返设备ID
* UINT16 indicatorId
* 0u:
* >0u: ID
* by cgh 20240910
*/
UINT8 GetIndicatorRelNonReturnId(UINT16 indicatorId)
{
UINT16 wRetVal = CI_ERROR;
UINT16 NonAutoReturnCurSum = 0U;
UINT16 ii = 0U;
UINT16 wNonAutoRtnId = 0U;
UINT16 wCurNonAutoRtnRlyId = 0U;
if ((0U < indicatorId) && (INDICATOR_SUM_MAX > indicatorId))
{
NonAutoReturnCurSum = GetNonAutoReturnCurSum();
for (ii = 0U; ii < NonAutoReturnCurSum; ii++)
{
wNonAutoRtnId = GetNonReturnId(ii);
wCurNonAutoRtnRlyId = GetNonRtnRlyId(wNonAutoRtnId);
if (indicatorId == wCurNonAutoRtnRlyId)
{
wRetVal = wNonAutoRtnId; /*返回无人折返ID*/
break;
}
else
{
; /*继续查找*/
}
}
}
else
{
/*入参检查失败,返回失败*/
}
return wRetVal;
}

Some files were not shown because too many files have changed in this diff Show More