1 Commits

Author SHA1 Message Date
lh 6d6ddaec6b [9.7] 9.7首版一回代码,基线版本 2026-05-22 15:40:28 +08:00
150 changed files with 21694 additions and 10595 deletions
+50 -5
View File
@@ -307,6 +307,7 @@ void APP_API_Data_Init()
.M_AutoReboot_Count = 3, /**< 自动重启次数 */
.M_AutoClear_Days = 1, /**< 连续运行多久清空宕机次数的天数 */
.M_Area_Enable = 0, /**< 区域状态开关配置 */
.M_AREA_SEB_Enable = 0xAA, /**< RC与CI扩展板卡通信功能开关配置 */
.CPU[0].Logger_PortBase = 55011, /**< 明文日志记录发送端口 */
.CPU[0].Logger_PortCiphertext = 55002, /**< 暗文日志记录发送端口 */
@@ -350,17 +351,24 @@ void APP_API_Data_Init()
.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 */
.Another_SEB.EXTEND_R_G_IP = "192.168.1.90", /**< CI扩展板卡的内网IP */
.Another_SEB.EXTEND_R_P_IP = "192.168.2.90", /**< CI扩展板卡的内网IP */
.Another_SEB.OutnetSafe_R_Port = 54001, /**< 外网安全通信端口 */
.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.EXTEND_G_IP = "192.168.1.71", /**< 扩展板卡的内网IP */
.OutNetBlue.EXTEND_P_IP = "192.168.2.71", /**< 扩展板卡的内网IP */
.Another_SEB.EXTEND_B_G_IP = "192.168.1.91", /**< CI扩展板卡的内网IP */
.Another_SEB.EXTEND_B_P_IP = "192.168.2.91", /**< CI扩展板卡的内网IP */
.Another_SEB.OutnetSafe_B_Port = 54001, /**< 外网安全通信端口 */
.OutNetBlue.OutnetSafe_Port = 54001, /**< 外网安全通信端口 */
.OutNetBlue.OutnetRaw_Port = 54002, /**< 外网透传通信端口 */
.OutNetBlue.InnetRaw_Port = 53003, /**< 内网透传通信端口 */
.INNET_COM_NUM = 1, /**< 内网通信设备数量 */
.INNET_COM_CFG[0].InnetID = DEVICE_TYPE_AIM, /**< 内网通信ID */
.INNET_COM_CFG[0].Port_Raw_G = 55004, /**< 绿网透传端口 */
@@ -416,10 +424,14 @@ void APP_API_Data_Init()
(void)CommonMemCpy((void*)(AppCfgInterface.OutNetRed.CC_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.60"), (UINT32)sizeof("192.168.2.60"));
(void)CommonMemCpy((void*)(AppCfgInterface.OutNetRed.EXTEND_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.70"), (UINT32)sizeof("192.168.1.70"));
(void)CommonMemCpy((void*)(AppCfgInterface.OutNetRed.EXTEND_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.70"), (UINT32)sizeof("192.168.2.70"));
(void)CommonMemCpy((void*)(AppCfgInterface.Another_SEB.EXTEND_R_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.90"), (UINT32)sizeof("192.168.1.90"));
(void)CommonMemCpy((void*)(AppCfgInterface.Another_SEB.EXTEND_R_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.90"), (UINT32)sizeof("192.168.2.90"));
(void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.CC_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.61"), (UINT32)sizeof("192.168.1.61"));
(void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.CC_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.61"), (UINT32)sizeof("192.168.2.61"));
(void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.EXTEND_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.71"), (UINT32)sizeof("192.168.1.71"));
(void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.EXTEND_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.71"), (UINT32)sizeof("192.168.2.71"));
(void)CommonMemCpy((void*)(AppCfgInterface.Another_SEB.EXTEND_B_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.91"), (UINT32)sizeof("192.168.1.91"));
(void)CommonMemCpy((void*)(AppCfgInterface.Another_SEB.EXTEND_B_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.91"), (UINT32)sizeof("192.168.2.91"));
(void)CommonMemCpy((void*)(AppCfgInterface.CPU[0].IP_Maintain), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.146.101"), (UINT32)sizeof("192.168.146.101"));
(void)CommonMemCpy((void*)(AppCfgInterface.CPU[1].IP_Maintain), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.18.102"), (UINT32)sizeof("192.168.18.102"));
@@ -476,10 +488,14 @@ void APP_API_Data_Init()
(void)CommonMemCpy((void*)(AppCfgInterface.OutNetRed.CC_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.80"), (UINT32)sizeof("192.168.2.80"));
(void)CommonMemCpy((void*)(AppCfgInterface.OutNetRed.EXTEND_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.90"), (UINT32)sizeof("192.168.1.90"));
(void)CommonMemCpy((void*)(AppCfgInterface.OutNetRed.EXTEND_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.90"), (UINT32)sizeof("192.168.2.90"));
(void)CommonMemCpy((void*)(AppCfgInterface.Another_SEB.EXTEND_R_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.90"), (UINT32)sizeof("192.168.1.90"));
(void)CommonMemCpy((void*)(AppCfgInterface.Another_SEB.EXTEND_R_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.90"), (UINT32)sizeof("192.168.2.90"));
(void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.CC_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.81"), (UINT32)sizeof("192.168.1.81"));
(void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.CC_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.81"), (UINT32)sizeof("192.168.2.81"));
(void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.EXTEND_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.91"), (UINT32)sizeof("192.168.1.91"));
(void)CommonMemCpy((void*)(AppCfgInterface.OutNetBlue.EXTEND_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.91"), (UINT32)sizeof("192.168.2.91"));
(void)CommonMemCpy((void*)(AppCfgInterface.Another_SEB.EXTEND_B_G_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.1.91"), (UINT32)sizeof("192.168.1.91"));
(void)CommonMemCpy((void*)(AppCfgInterface.Another_SEB.EXTEND_B_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.2.91"), (UINT32)sizeof("192.168.2.91"));
(void)CommonMemCpy((void*)(AppCfgInterface.CPU[0].IP_Maintain), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.148.101"), (UINT32)sizeof("192.168.148.101"));
(void)CommonMemCpy((void*)(AppCfgInterface.CPU[1].IP_Maintain), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.20.102"), (UINT32)sizeof("192.168.20.102"));
@@ -504,7 +520,8 @@ void APP_API_Data_Init()
{
/*RC区域开关设置为0xAA*/
AppCfgInterface.M_Area_Enable = 0xAAu;
/**< RC与CI扩展板卡通信功能开关配置 */
AppCfgInterface.M_AREA_SEB_Enable = 0x55u;
}
else
@@ -705,6 +722,9 @@ ENUM_CM_RECCUSEB Is_Send_ExtendBoard(IN const CM_UINT16 dstDevTypeId)
UINT8 chLocalCiType = 0U; /*本联锁属性*/
UINT8 chDstCiType = 0U; /*本联锁属性*/
UINT8 chCldScxCommMode = 0U;
UINT8 chWorkType = 0U; /*双系工作模式*/
UINT8 cControlState = 0U;/*主备用模式*/
UINT8 cRcWorkMode = 0u;/*RC工作模式*/
UINT8 chResult = CI_ERROR; /*联锁属性检查结果*/
wAtsGtWayDevTypeId = GetTiocTrnsmtGtwyDevTypeId();
@@ -717,6 +737,9 @@ ENUM_CM_RECCUSEB Is_Send_ExtendBoard(IN const CM_UINT16 dstDevTypeId)
chLocalCiType = GetLocalCiType();
chDstCiType = GetCiType(devId);
chCldScxCommMode = GetCiFunctionSwitchConfig(SCX_CLD_INTERFACE_TYPE);
chWorkType = GetSystemWorkType();
cControlState = GetLocalCiBackUpPattern();
cRcWorkMode = GetLocalRcWorkMode();
if ((SCX_CLD_SERIAL_PORT_COMM == chCldScxCommMode) && (CI_SYSTEM_TYPE_RCI == devType))
{
@@ -735,9 +758,9 @@ ENUM_CM_RECCUSEB Is_Send_ExtendBoard(IN const CM_UINT16 dstDevTypeId)
; /*不为串口通信,此时不对本地CI类型及对方CI类型进行判断*/
}
if ((CI_SYSTEM_TYPE_XIANDI == devType) || (CI_SYSTEM_TYPE_ATS == devType) || (CI_SYSTEM_TYPE_LEU == devType)
if ((CI_SYSTEM_TYPE_XIANDI == devType) || (CI_SYSTEM_TYPE_ATS == devType)
|| (CI_SUCCESS == chResult)
|| (CI_SYSTEM_TYPE_VOBC_BACKUP == devType)) /*现地,ATS,LEU,使用串口的相邻CI*/
|| (CI_SYSTEM_TYPE_VOBC_BACKUP == devType)) /*现地,ATS,使用串口的相邻CI*/
{
retVal = ENUM_CM_SEB;
}
@@ -745,6 +768,28 @@ ENUM_CM_RECCUSEB Is_Send_ExtendBoard(IN const CM_UINT16 dstDevTypeId)
{
retVal = ENUM_CM_CCSEB;
}
else if (CI_SYSTEM_TYPE_LEU == devType)
{
if ((SYSTEM_WORK_MODE_ALL == chWorkType) && (RC_WORK_MODE_TIOC == cRcWorkMode))
{
/*双系统,并且当前是RC*/
if (SYSTEM_WORK_MODE_MAIN == cControlState)
{
/*是RC主用时,需要用CI的串口板进行LEU通信*/
retVal = ENUM_CM_SEB_ANOTHER;
}
else
{
/*RC备用,禁止发送*/
retVal = ENUM_CM_FORBIDDEN;
}
}
else
{
/*单系统,或当前是CI*/
retVal = ENUM_CM_SEB;
}
}
else
{
retVal = ENUM_CM_CC;
@@ -30,6 +30,6 @@
#define VER_INTE_PROJECT 220 /*项目编号*/
#define VER_INTE_PRODUCT 40 /*产品编号*/
#define VER_INTE_EXE 1 /*可执行编号*/
#define VER_INTE_TIME 105 /*集成次数编号*/
#define VER_INTE_TIME 112 /*集成次数编号*/
#endif/*endif of #define _CI_INTEGRATE_CONFIG_H*/
+232 -44
View File
@@ -16,6 +16,7 @@
#include "NonAutoReturnDataManage.h"
#include "DynamicRouteDataManage.h"
#include "../Deployment/DeploymentExtern.h"
#include "ParsePackPlatformData.h"
/**/
extern UINT16 TransmitStateDataCurSum; /*ͨŹϵ״̬ݵǰ*/
extern UINT8 ComCycNumForCiToAts; /*ATSͨڼ¼*/
@@ -414,6 +415,58 @@ UINT32 CopyValidSetDataStru(const UINT8 *pCurCiAppDataPointer, void *pDataStru,
return curIndex;
}
/*
* RCͨŵVOBCЧݵӦȫ
* ˵
const UINT8 *pCurCiAppDataPointer:ǰָ
UINT16 struNum:,
UINT16 struLength:
void *pDataStru:ָ,
* ֵ ݵij
*/
UINT32 CopyValidSetRcVobcDataStru(const UINT8* pCurCiAppDataPointer, void* pDataStru, UINT16 struNum, UINT16 struLength)
{
UINT32 curIndex = 0u;
UINT16 i = 0u;
UINT16 ValidIdNum = 0u;
void* pDstAddr = NULL;
/*У*/
if ((NULL != pCurCiAppDataPointer) && (NULL != pDataStru) && (0u != struNum) && (0u != struLength))
{
/*ȡܵЧID*/
ValidIdNum = ShortFromChar(pCurCiAppDataPointer);
curIndex += (UINT32)sizeof(UINT16);
for (i = 0u; i < ValidIdNum; i++)
{
pDstAddr = (UINT8*)pDataStru + struLength * i;
/*ԪǰֽIDΪ0ʱЧ,˴˵Ч*/
if (0u != ShortFromCharLE(pDstAddr))
{
(void)memcpy(pDstAddr, pCurCiAppDataPointer + curIndex, struLength);
curIndex += (UINT32)struLength;
}
else
{
/*ִκβ*/
}
}
}
else
{
curIndex = 0u;
debug_infor_printf((const)"ERROR: Parameter is invailid\n");
}
return curIndex;
}
/*
* ͨųЧݵӦȫ
* ˵
@@ -1141,8 +1194,6 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer)
(void)memcpy(pCiAppDataPointer + curIndex, &g_VirtualCIStructData.virtualCi[ii].chAllSwitchYLockFlag, sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(VirCIRtnIndicatorState) * RTNINDICATOR_SUM_MAX), (void*)(&g_VirtualCIStructData.virtualCi[ii].VirCIRtnIndicatorStaData), (UINT32)(sizeof(VirCIRtnIndicatorState) * RTNINDICATOR_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(VirCIRtnIndicatorState) * RTNINDICATOR_SUM_MAX);
(void)memcpy(pCiAppDataPointer + curIndex, &g_VirtualCIStructData.virtualCi[ii].autoTriggerflag, sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
@@ -1511,10 +1562,75 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer)
(void)CommonMemCpy(pCiAppDataPointer + curIndex, (UINT32)sizeof(UINT32),&gSystemUpdateMainUseCycNum, (UINT32)sizeof(UINT32));
curIndex = curIndex + (UINT32)sizeof(UINT32);
/*CIͬ뱾CIͨŵCIͨͷ*/
curResult = CopyValidGetHlhtHeadCtxs(pCiAppDataPointer + curIndex, CI_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), ciHLHTHeadCtxsCiToRc);
curIndex = curIndex + curResult;
/*CIͬ뱾CIͨŵRCͨͷ*/
curResult = CopyValidGetHlhtHeadCtxs(pCiAppDataPointer + curIndex, CI_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), gSzRcHLHTHeadCtxsCiToRc);
curIndex = curIndex + curResult;
/*RC͵֡*/
(void)CommonMemCpy(pCiAppDataPointer + curIndex, (UINT32)(sizeof(NeighborCiInfoStruct) * CI_COM_CI_MAX_NUM), &szNeighborCiInfo, (UINT32)(sizeof(NeighborCiInfoStruct) * CI_COM_CI_MAX_NUM));
curIndex = curIndex + (UINT32)(sizeof(NeighborCiInfoStruct) * CI_COM_CI_MAX_NUM);
/*ԳβͨŽӿʱSQJ״̬*/
pCiAppDataPointer[curIndex] = comm_Train_Test_SQJ_CLD_State;
curIndex += 1U;
/*ԳβͨŽӿʱTYSJ״̬*/
pCiAppDataPointer[curIndex] = comm_Train_Test_TYSJ_CLD_State;
curIndex += 1U;
/*CI*/
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(CommandDataStruct)* ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX), (void*)(&CiRevCmdDataStru), (UINT32)(sizeof(CommandDataStruct)* ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(CommandDataStruct) * ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX);
/*CI*/
ShortToChar(CiRevCmdStruCurSum, &pCiAppDataPointer[curIndex]);
curIndex += 2U;
/*ATSֵصCIźؿ*/
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(CommandDataStruct)* ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX), (void*)(&ATSorXDToCiCmdRtnToTRDataStru), (UINT32)(sizeof(CommandDataStruct)* ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(CommandDataStruct) * ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX);
/*ATSֵصCIźؿ*/
ShortToChar(ATSorXDToCiCmdReturnToTRCurSum, &pCiAppDataPointer[curIndex]);
curIndex += 2U;
/*TIOCͨų*/
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(TiocTransmitCtStruct)* TRANSMIT_OBJECT_DEVICE_SUM_MAX), (void*)(&g_szTiocCt), (UINT32)(sizeof(TiocTransmitCtStruct)* TRANSMIT_OBJECT_DEVICE_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(TiocTransmitCtStruct) * TRANSMIT_OBJECT_DEVICE_SUM_MAX);
/*վ̨CIͨݽṹ*/
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(PlatformToCiDataStruct)* PLATFORM_TO_CI_SUM_MAX), (void*)(&platformToCiDataStru), (UINT32)(sizeof(PlatformToCiDataStruct)* PLATFORM_TO_CI_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(PlatformToCiDataStruct) * PLATFORM_TO_CI_SUM_MAX);
/*Psc-CIĽṹ*/
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(PSCToCiDataStruct)* PSC_TO_CI_SUM_MAX), (void*)(&PscToCiDataStru), (UINT32)(sizeof(PSCToCiDataStruct)* PSC_TO_CI_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(PSCToCiDataStruct) * PSC_TO_CI_SUM_MAX);
/*̬г*/
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(TrainDyInfoStru)* TRAIN_DYN_TEST_SUM_MAX), (void*)(&gszDyTestInfo), (UINT32)(sizeof(TrainDyInfoStru)* TRAIN_DYN_TEST_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(TrainDyInfoStru) * TRAIN_DYN_TEST_SUM_MAX);
/*̬г*/
pCiAppDataPointer[curIndex] = gDyTestNum;
curIndex += 1U;
/*гԶɸѡ*/
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(TrainAtsScreenStru)* TRAIN_SUM_MAX), (void*)(&gszAtsScreenInfo), (UINT32)(sizeof(TrainAtsScreenStru)* TRAIN_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(TrainAtsScreenStru) * TRAIN_SUM_MAX);
/*Զɸѡг*/
pCiAppDataPointer[curIndex] = gAtsScreenNum;
curIndex += 1U;
/*һCRC*/
crcLength = curIndex - crcIndex;
crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength);
debug_infor_printf((const)"2oo2 RecvCiCmdDataStruCurSum-vobcToRcHLHTHeadCtxs CRC:%x, Length:%d\n", crcResult, crcLength);
debug_infor_printf((const)"2oo2 RecvCiCmdDataStruCurSum-szNeighborCiInfo CRC:%x, Length:%d\n", crcResult, crcLength);
}
return curIndex;
}
@@ -1948,9 +2064,6 @@ UINT8 SetCiAppData(const UINT8 *pCiAppDataPointer,const UINT32 len)
(void)memcpy(&g_VirtualCIStructData.virtualCi[ii].chAllSwitchYLockFlag,pCiAppDataPointer + curIndex, sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].VirCIRtnIndicatorStaData), (UINT32)(RTNINDICATOR_SUM_MAX * sizeof(VirCIRtnIndicatorState)), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(RTNINDICATOR_SUM_MAX * sizeof(VirCIRtnIndicatorState)));
curIndex = curIndex + (UINT32)(RTNINDICATOR_SUM_MAX * sizeof(VirCIRtnIndicatorState));
(void)memcpy(&g_VirtualCIStructData.virtualCi[ii].autoTriggerflag,pCiAppDataPointer + curIndex, sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
@@ -2279,7 +2392,7 @@ UINT8 SetCiAppData(const UINT8 *pCiAppDataPointer,const UINT32 len)
/*RCͨŵVobcϢ*/
(void)CommonMemSet(&VobcToRcDataStru, (UINT32)((VOBC_TO_CI_SUM_MAX) * sizeof(VobcToRcDataStruct)), 0U, (UINT32)((VOBC_TO_CI_SUM_MAX) * sizeof(VobcToRcDataStruct))); /*սṹֹ*/
curResult = CopyValidSetDataStru(pCiAppDataPointer + curIndex, VobcToRcDataStru, VOBC_TO_CI_SUM_MAX, (UINT16)sizeof(VobcToRcDataStruct));
curResult = CopyValidSetRcVobcDataStru(pCiAppDataPointer + curIndex, VobcToRcDataStru, VOBC_TO_CI_SUM_MAX, (UINT16)sizeof(VobcToRcDataStruct));
curIndex = curIndex + curResult;
/*RCͨŵVobc*/
@@ -2293,6 +2406,67 @@ UINT8 SetCiAppData(const UINT8 *pCiAppDataPointer,const UINT32 len)
/**/
(void)CommonMemCpy(&gSystemUpdateMainUseCycNum, (UINT32)sizeof(UINT32), pCiAppDataPointer + curIndex, (UINT32)sizeof(UINT32));
curIndex = curIndex + (UINT32)sizeof(UINT32);
/*CIͬ뱾CIͨŵCIͨͷ*/
curResult = CopyValidSetHlhtHeadCtxs(pCiAppDataPointer + curIndex, CI_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), ciHLHTHeadCtxsCiToRc);/*CIݽṹ*/
curIndex = curIndex + curResult;
/*CIͬ뱾CIͨŵRCͨͷ*/
curResult = CopyValidSetHlhtHeadCtxs(pCiAppDataPointer + curIndex, CI_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), gSzRcHLHTHeadCtxsCiToRc);/*CIݽṹ*/
curIndex = curIndex + curResult;
/*ͬRC͵֡*/
(void)CommonMemCpy(&szNeighborCiInfo, (UINT32)(sizeof(NeighborCiInfoStruct)* CI_COM_CI_MAX_NUM), pCiAppDataPointer + curIndex, (UINT32)(sizeof(NeighborCiInfoStruct)* CI_COM_CI_MAX_NUM));
curIndex = curIndex + (UINT32)(sizeof(NeighborCiInfoStruct) * CI_COM_CI_MAX_NUM);
/*ԳβͨŽӿʱSQJ״̬*/
comm_Train_Test_SQJ_CLD_State = pCiAppDataPointer[curIndex];
curIndex += 1U;
/*ԳβͨŽӿʱTYSJ״̬*/
comm_Train_Test_TYSJ_CLD_State = pCiAppDataPointer[curIndex];
curIndex += 1U;
/*CI*/
(void)CommonMemCpy((void*)(&CiRevCmdDataStru), (UINT32)(sizeof(CommandDataStruct)* ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(CommandDataStruct)* ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(CommandDataStruct) * ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX);
/*CI*/
CiRevCmdStruCurSum = ShortFromChar(&pCiAppDataPointer[curIndex]);
curIndex += 2U;
/*ATSֵصCIźؿ*/
(void)CommonMemCpy((void*)(&ATSorXDToCiCmdRtnToTRDataStru), (UINT32)(sizeof(CommandDataStruct)* ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(CommandDataStruct)* ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(CommandDataStruct) * ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX);
/*ATSֵصCIźؿ*/
ATSorXDToCiCmdReturnToTRCurSum = ShortFromChar(&pCiAppDataPointer[curIndex]);
curIndex += 2U;
/*TIOCͨų*/
(void)CommonMemCpy((void*)(&g_szTiocCt), (UINT32)(sizeof(TiocTransmitCtStruct)* TRANSMIT_OBJECT_DEVICE_SUM_MAX), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(TiocTransmitCtStruct)* TRANSMIT_OBJECT_DEVICE_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(TiocTransmitCtStruct) * TRANSMIT_OBJECT_DEVICE_SUM_MAX);
/*վ̨CIͨݽṹ*/
(void)CommonMemCpy((void*)&platformToCiDataStru, (UINT32)(sizeof(PlatformToCiDataStruct)* PLATFORM_TO_CI_SUM_MAX), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(PlatformToCiDataStruct)* PLATFORM_TO_CI_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(PlatformToCiDataStruct) * PLATFORM_TO_CI_SUM_MAX);
/*Psc-CIĽṹ*/
(void)CommonMemCpy((void*)(&PscToCiDataStru), (UINT32)(sizeof(PSCToCiDataStruct)* PSC_TO_CI_SUM_MAX), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(PSCToCiDataStruct)* PSC_TO_CI_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(PSCToCiDataStruct) * PSC_TO_CI_SUM_MAX);
/*̬г*/
(void)CommonMemCpy((void*)(&gszDyTestInfo), (UINT32)(sizeof(TrainDyInfoStru)* TRAIN_DYN_TEST_SUM_MAX), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(TrainDyInfoStru)* TRAIN_DYN_TEST_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(TrainDyInfoStru) * TRAIN_DYN_TEST_SUM_MAX);
/*̬г*/
gDyTestNum = pCiAppDataPointer[curIndex];
curIndex += 1U;
/*гԶɸѡ*/
(void)CommonMemCpy((void*)(&gszAtsScreenInfo), (UINT32)(sizeof(TrainAtsScreenStru)* TRAIN_SUM_MAX), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(TrainAtsScreenStru)* TRAIN_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(TrainAtsScreenStru) * TRAIN_SUM_MAX);
rtn = 1U;
}
}
@@ -2776,6 +2950,14 @@ UINT32 GetCiGeneralData(UINT8* pCiAppDataPointer)
/*OCԭʼ*/
curResult = CopyValidGetOcOrginData(pCiAppDataPointer + curIndex, OC_SUM_MAX, &m_OcToCiOrginDataArr[0]);
curIndex = curIndex + curResult;
/*뱾CIͨŵCIͨͷ*/
curResult = CopyValidGetHlhtHeadCtxs(pCiAppDataPointer + curIndex, CI_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), ciHLHTHeadCtxs);
curIndex = curIndex + curResult;
/*뱾CIͨŵRcͨͷ*/
curResult = CopyValidGetHlhtHeadCtxs(pCiAppDataPointer + curIndex, CI_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), gSzRcHLHTHeadCtxs);
curIndex = curIndex + curResult;
}
return curIndex;
@@ -3064,6 +3246,14 @@ UINT8 SetCiGeneralData(const UINT8* pCiAppDataPointer, const UINT32 len)
curResult = CopyValidSetOcOrginData(pCiAppDataPointer + curIndex, OC_SUM_MAX, &m_OcToCiOrginDataArr[0]);
curIndex = curIndex + curResult;
/*ͨŵCIͨͷ*/
curResult = CopyValidSetHlhtHeadCtxs(pCiAppDataPointer + curIndex, CI_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), ciHLHTHeadCtxsCiToRc);
curIndex = curIndex + curResult;
/*ͨŵRcͨͷ*/
curResult = CopyValidSetHlhtHeadCtxs(pCiAppDataPointer + curIndex, CI_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), gSzRcHLHTHeadCtxsCiToRc);
curIndex = curIndex + curResult;
rtn = 1u;
}
else
@@ -3857,7 +4047,7 @@ UINT32 CopyGetZcSignalDymDataStru(UINT8* pCurCiAppDataPointer)
/*У*/
if (NULL != pCurCiAppDataPointer)
{
dwCurIndex += sizeof(UINT16); /*ֽ*/
dwCurIndex += (UINT32)(sizeof(UINT16)); /*ֽ*/
cLocalCiId = GetSystemParaLocalCiId();
wSignalSum = GetSignalCurSum();
@@ -3865,12 +4055,12 @@ UINT32 CopyGetZcSignalDymDataStru(UINT8* pCurCiAppDataPointer)
{
wSignalId = GetSignalId(ii);
wBufIndex = GetSignalConfigBufIndex(wSignalId);
cSignalBlongCiId = GetSignalBelongCiId(ii);
cSignalBlongCiId = GetSignalBelongCiId(wSignalId);
if (cLocalCiId == cSignalBlongCiId)
{
/*źŻ*/
(void)CommonMemCpy((void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(SignalDataStructZC), (const void*)(&gZcToCiDymDataStru.szSignalDataStruZc[wBufIndex]), sizeof(SignalDataStructZC));
dwCurIndex += sizeof(SignalDataStructZC);
(void)CommonMemCpy((void*)(pCurCiAppDataPointer + dwCurIndex), (UINT32)(sizeof(SignalDataStructZC)), (const void*)(&gZcToCiDymDataStru.szSignalDataStruZc[wBufIndex]), (UINT32)(sizeof(SignalDataStructZC)));
dwCurIndex += (UINT32)(sizeof(SignalDataStructZC));
wValidDevNum++;
}
else
@@ -3911,7 +4101,7 @@ UINT32 CopySetZcSignalDymDataStru(const UINT8* pCurCiAppDataPointer)
/*ȡ*/
wValidDevNum = ShortFromChar(pCurCiAppDataPointer);
dwCurIndex += sizeof(UINT16); /*ֽ*/
dwCurIndex += (UINT32)(sizeof(UINT16)); /*ֽ*/
/*ͬǰ*/
(void)CommonMemSet((void*)(gZcToCiDymDataStru.szSignalDataStruZc), (UINT32)(sizeof(SignalDataStructZC) * SIGNAL_SUM_MAX), (UINT8)0U, (UINT32)(sizeof(SignalDataStructZC) * SIGNAL_SUM_MAX));
@@ -3923,14 +4113,14 @@ UINT32 CopySetZcSignalDymDataStru(const UINT8* pCurCiAppDataPointer)
wBufIndex = GetSignalConfigBufIndex(wSignalId);
if (wBufIndex < SIGNAL_SUM_MAX)
{
(void)CommonMemCpy((void*)(&gZcToCiDymDataStru.szSignalDataStruZc[wBufIndex]), sizeof(SignalDataStructZC), (const void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(SignalDataStructZC));
(void)CommonMemCpy((void*)(&gZcToCiDymDataStru.szSignalDataStruZc[wBufIndex]), (UINT32)(sizeof(SignalDataStructZC)), (const void*)(pCurCiAppDataPointer + dwCurIndex), (UINT32)(sizeof(SignalDataStructZC)));
}
else
{
debug_infor_printf((const)"\nCopySetZcSignalDymDataStru: wSignalId[%d] Is Invalid\n", wSignalId);
}
dwCurIndex += sizeof(SignalDataStructZC);
dwCurIndex += (UINT32)(sizeof(SignalDataStructZC));
}
}
else
@@ -3962,7 +4152,7 @@ UINT32 CopyGetZcLogSecDymDataStru(UINT8* pCurCiAppDataPointer)
/*У*/
if (NULL != pCurCiAppDataPointer)
{
dwCurIndex += sizeof(UINT16); /*ֽ*/
dwCurIndex += (UINT32)(sizeof(UINT16)); /*ֽ*/
cLocalCiId = GetSystemParaLocalCiId();
wLogSecSum = GetLogicSecCurSum();
@@ -3970,12 +4160,12 @@ UINT32 CopyGetZcLogSecDymDataStru(UINT8* pCurCiAppDataPointer)
{
wLogSecId = GetLogicSecId(ii);
wBufIndex = GetlogSectionBufIndex(wLogSecId);
cLogSecBlongCiId = GetLogSecBelongCiId(ii);
cLogSecBlongCiId = GetLogSecBelongCiId(wLogSecId);
if (cLocalCiId == cLogSecBlongCiId)
{
/*߼*/
(void)CommonMemCpy((void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(LogicSectionDataStructZC), (const void*)(&gZcToCiDymDataStru.LogicSectionDataStruZc[wBufIndex]), sizeof(LogicSectionDataStructZC));
dwCurIndex += sizeof(LogicSectionDataStructZC);
(void)CommonMemCpy((void*)(pCurCiAppDataPointer + dwCurIndex), (UINT32)(sizeof(LogicSectionDataStructZC)), (const void*)(&gZcToCiDymDataStru.LogicSectionDataStruZc[wBufIndex]), (UINT32)(sizeof(LogicSectionDataStructZC)));
dwCurIndex += (UINT32)(sizeof(LogicSectionDataStructZC));
wValidDevNum++;
}
else
@@ -4016,7 +4206,7 @@ UINT32 CopySetZcLogSecDymDataStru(const UINT8* pCurCiAppDataPointer)
/*ȡ*/
wValidDevNum = ShortFromChar(pCurCiAppDataPointer);
dwCurIndex += sizeof(UINT16); /*ֽ*/
dwCurIndex += (UINT32)(sizeof(UINT16)); /*ֽ*/
/*ͬǰ*/
(void)CommonMemSet((void*)(gZcToCiDymDataStru.LogicSectionDataStruZc), (UINT32)(sizeof(LogicSectionDataStructZC) * LOGIC_SECTION_SUM_MAX), (UINT8)0U, (UINT32)(sizeof(LogicSectionDataStructZC) * LOGIC_SECTION_SUM_MAX));
@@ -4028,14 +4218,14 @@ UINT32 CopySetZcLogSecDymDataStru(const UINT8* pCurCiAppDataPointer)
wBufIndex = GetlogSectionBufIndex(wLogSecId);
if (wBufIndex < LOGIC_SECTION_SUM_MAX)
{
(void)CommonMemCpy((void*)(&gZcToCiDymDataStru.LogicSectionDataStruZc[wBufIndex]), sizeof(LogicSectionDataStructZC), (const void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(LogicSectionDataStructZC));
(void)CommonMemCpy((void*)(&gZcToCiDymDataStru.LogicSectionDataStruZc[wBufIndex]), (UINT32)(sizeof(LogicSectionDataStructZC)), (const void*)(pCurCiAppDataPointer + dwCurIndex), (UINT32)(sizeof(LogicSectionDataStructZC)));
}
else
{
debug_infor_printf((const)"\nCopySetZcLogSecDymDataStru: wLogSecId[%d] Is Invalid\n", wLogSecId);
}
dwCurIndex += sizeof(LogicSectionDataStructZC);
dwCurIndex += (UINT32)(sizeof(LogicSectionDataStructZC));
}
}
else
@@ -4067,7 +4257,7 @@ UINT32 CopyGetZcAxisSecDymDataStru(UINT8* pCurCiAppDataPointer)
/*У*/
if (NULL != pCurCiAppDataPointer)
{
dwCurIndex += sizeof(UINT16); /*ֽ*/
dwCurIndex += (UINT32)(sizeof(UINT16)); /*ֽ*/
cLocalCiId = GetSystemParaLocalCiId();
wAxisSecSum = GetAxisSecCurSum();
@@ -4075,12 +4265,12 @@ UINT32 CopyGetZcAxisSecDymDataStru(UINT8* pCurCiAppDataPointer)
{
wAxisSecId = GetAxisSecId(ii);
wBufIndex = GetAxisSecConfigBufIndex(wAxisSecId);
cAxisSecBlongCiId = GetAxisSectionBelongCiId(ii);
cAxisSecBlongCiId = GetAxisSectionBelongCiId(wAxisSecId);
if (cLocalCiId == cAxisSecBlongCiId)
{
/**/
(void)CommonMemCpy((void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(AxisSectionDataStructZC), (const void*)(&gZcToCiDymDataStru.AxisSectionDataStruZc[wBufIndex]), sizeof(AxisSectionDataStructZC));
dwCurIndex += sizeof(AxisSectionDataStructZC);
(void)CommonMemCpy((void*)(pCurCiAppDataPointer + dwCurIndex), (UINT32)(sizeof(AxisSectionDataStructZC)), (const void*)(&gZcToCiDymDataStru.AxisSectionDataStruZc[wBufIndex]), (UINT32)(sizeof(AxisSectionDataStructZC)));
dwCurIndex += (UINT32)(sizeof(AxisSectionDataStructZC));
wValidDevNum++;
}
else
@@ -4121,7 +4311,7 @@ UINT32 CopySetZcAxisSecDymDataStru(const UINT8* pCurCiAppDataPointer)
/*ȡ*/
wValidDevNum = ShortFromChar(pCurCiAppDataPointer);
dwCurIndex += sizeof(UINT16); /*ֽ*/
dwCurIndex += (UINT32)(sizeof(UINT16)); /*ֽ*/
/*ͬǰ*/
(void)CommonMemSet((void*)(gZcToCiDymDataStru.AxisSectionDataStruZc), (UINT32)(sizeof(AxisSectionDataStructZC) * AXIS_SECTION_SUM_MAX), (UINT8)0U, (UINT32)(sizeof(AxisSectionDataStructZC) * AXIS_SECTION_SUM_MAX));
@@ -4133,14 +4323,14 @@ UINT32 CopySetZcAxisSecDymDataStru(const UINT8* pCurCiAppDataPointer)
wBufIndex = GetAxisSecConfigBufIndex(wAxisSecId);
if (wBufIndex < AXIS_SECTION_SUM_MAX)
{
(void)CommonMemCpy((void*)(&gZcToCiDymDataStru.AxisSectionDataStruZc[wBufIndex]), sizeof(AxisSectionDataStructZC), (const void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(AxisSectionDataStructZC));
(void)CommonMemCpy((void*)(&gZcToCiDymDataStru.AxisSectionDataStruZc[wBufIndex]), (UINT32)(sizeof(AxisSectionDataStructZC)), (const void*)(pCurCiAppDataPointer + dwCurIndex), (UINT32)(sizeof(AxisSectionDataStructZC)));
}
else
{
debug_infor_printf((const)"\nCopySetZcAxisSecDymDataStru: wAxisSecId[%d] Is Invalid\n", wAxisSecId);
}
dwCurIndex += sizeof(AxisSectionDataStructZC);
dwCurIndex += (UINT32)(sizeof(AxisSectionDataStructZC));
}
}
else
@@ -4172,7 +4362,7 @@ UINT32 CopyGetZcPhySecDymDataStru(UINT8* pCurCiAppDataPointer)
/*У*/
if (NULL != pCurCiAppDataPointer)
{
dwCurIndex += sizeof(UINT16); /*ֽ*/
dwCurIndex += (UINT32)(sizeof(UINT16)); /*ֽ*/
cLocalCiId = GetSystemParaLocalCiId();
wPhySecSum = GetPhySecCurSum();
@@ -4180,12 +4370,12 @@ UINT32 CopyGetZcPhySecDymDataStru(UINT8* pCurCiAppDataPointer)
{
wPhySecId = GetPhySecId(ii);
wBufIndex = GetPhySecConfigBufIndex(wPhySecId);
cPhySecBlongCiId = GetPhySecBelongCiId(ii);
cPhySecBlongCiId = GetPhySecBelongCiId(wPhySecId);
if (cLocalCiId == cPhySecBlongCiId)
{
/**/
(void)CommonMemCpy((void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(PhysicalSectionDataStructZC), (const void*)(&gZcToCiDymDataStru.PhysicalSectionDataStruZc[wBufIndex]), sizeof(PhysicalSectionDataStructZC));
dwCurIndex += sizeof(PhysicalSectionDataStructZC);
(void)CommonMemCpy((void*)(pCurCiAppDataPointer + dwCurIndex), (UINT32)(sizeof(PhysicalSectionDataStructZC)), (const void*)(&gZcToCiDymDataStru.PhysicalSectionDataStruZc[wBufIndex]), (UINT32)(sizeof(PhysicalSectionDataStructZC)));
dwCurIndex += (UINT32)(sizeof(PhysicalSectionDataStructZC));
wValidDevNum++;
}
else
@@ -4226,7 +4416,7 @@ UINT32 CopySetZcPhySecDymDataStru(const UINT8* pCurCiAppDataPointer)
/*ȡ*/
wValidDevNum = ShortFromChar(pCurCiAppDataPointer);
dwCurIndex += sizeof(UINT16); /*ֽ*/
dwCurIndex += (UINT32)(sizeof(UINT16)); /*ֽ*/
/*ͬǰ*/
(void)CommonMemSet((void*)(gZcToCiDymDataStru.PhysicalSectionDataStruZc), (UINT32)(sizeof(PhysicalSectionDataStructZC) * PHYSICAL_SECTION_SUM_MAX), (UINT8)0U, (UINT32)(sizeof(PhysicalSectionDataStructZC) * PHYSICAL_SECTION_SUM_MAX));
@@ -4238,14 +4428,14 @@ UINT32 CopySetZcPhySecDymDataStru(const UINT8* pCurCiAppDataPointer)
wBufIndex = GetPhySecConfigBufIndex(wPhySecId);
if (wBufIndex < PHYSICAL_SECTION_SUM_MAX)
{
(void)CommonMemCpy((void*)(&gZcToCiDymDataStru.PhysicalSectionDataStruZc[wBufIndex]), sizeof(PhysicalSectionDataStructZC), (const void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(PhysicalSectionDataStructZC));
(void)CommonMemCpy((void*)(&gZcToCiDymDataStru.PhysicalSectionDataStruZc[wBufIndex]), (UINT32)(sizeof(PhysicalSectionDataStructZC)), (const void*)(pCurCiAppDataPointer + dwCurIndex), (UINT32)(sizeof(PhysicalSectionDataStructZC)));
}
else
{
debug_infor_printf((const)"\nCopySetZcPhySecDymDataStru: wPhySecId[%d] Is Invalid\n", wPhySecId);
}
dwCurIndex += sizeof(PhysicalSectionDataStructZC);
dwCurIndex += (UINT32)(sizeof(PhysicalSectionDataStructZC));
}
}
else
@@ -4277,7 +4467,7 @@ UINT32 CopyGetZcRouteDymDataStru(UINT8* pCurCiAppDataPointer)
/*У*/
if (NULL != pCurCiAppDataPointer)
{
dwCurIndex += sizeof(UINT16); /*ֽ*/
dwCurIndex += (UINT32)(sizeof(UINT16)); /*ֽ*/
cLocalCiId = GetSystemParaLocalCiId();
wRouteSum = GetRouteCurSum();
@@ -4285,12 +4475,12 @@ UINT32 CopyGetZcRouteDymDataStru(UINT8* pCurCiAppDataPointer)
{
wRouteId = GetRouteId(ii);
wBufIndex = GetRouteConfigBufIndex(wRouteId);
cRouteBlongCiId = GetRouteBelongCiId(ii);
cRouteBlongCiId = GetRouteBelongCiId(wRouteId);
if (cLocalCiId == cRouteBlongCiId)
{
/*·*/
(void)CommonMemCpy((void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(RouteDataStructZC), (const void*)(&gZcToCiDymDataStru.szRouteDataStruZc[wBufIndex]), sizeof(RouteDataStructZC));
dwCurIndex += sizeof(RouteDataStructZC);
(void)CommonMemCpy((void*)(pCurCiAppDataPointer + dwCurIndex), (UINT32)(sizeof(RouteDataStructZC)), (const void*)(&gZcToCiDymDataStru.szRouteDataStruZc[wBufIndex]), (UINT32)(sizeof(RouteDataStructZC)));
dwCurIndex += (UINT32)(sizeof(RouteDataStructZC));
wValidDevNum++;
}
else
@@ -4331,7 +4521,7 @@ UINT32 CopySetZcRouteDymDataStru(const UINT8* pCurCiAppDataPointer)
/*ȡ*/
wValidDevNum = ShortFromChar(pCurCiAppDataPointer);
dwCurIndex += sizeof(UINT16); /*ֽ*/
dwCurIndex += (UINT32)(sizeof(UINT16)); /*ֽ*/
/*ͬǰ*/
(void)CommonMemSet((void*)(gZcToCiDymDataStru.szRouteDataStruZc), (UINT32)(sizeof(RouteDataStructZC) * ROUTE_SUM_MAX), (UINT8)0U, (UINT32)(sizeof(RouteDataStructZC) * ROUTE_SUM_MAX));
@@ -4343,14 +4533,14 @@ UINT32 CopySetZcRouteDymDataStru(const UINT8* pCurCiAppDataPointer)
wBufIndex = GetRouteConfigBufIndex(wRouteId);
if (wBufIndex < ROUTE_SUM_MAX)
{
(void)CommonMemCpy((void*)(&gZcToCiDymDataStru.szRouteDataStruZc[wBufIndex]), sizeof(RouteDataStructZC), (const void*)(pCurCiAppDataPointer + dwCurIndex), sizeof(RouteDataStructZC));
(void)CommonMemCpy((void*)(&gZcToCiDymDataStru.szRouteDataStruZc[wBufIndex]), (UINT32)(sizeof(RouteDataStructZC)), (const void*)(pCurCiAppDataPointer + dwCurIndex), (UINT32)(sizeof(RouteDataStructZC)));
}
else
{
debug_infor_printf((const)"\nCopySetZcRouteDymDataStru: wRouteId[%d] Is Invalid\n", wRouteId);
}
dwCurIndex += sizeof(RouteDataStructZC);
dwCurIndex += (UINT32)(sizeof(RouteDataStructZC));
}
}
else
@@ -4396,7 +4586,6 @@ UINT32 CopyValidSetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcTo
{
m_OcToCiOrginDataNum = (UINT8)ValidIdNum;
/**/
//printf("m_OcToCiOrginDataNum = %d\n", m_OcToCiOrginDataNum);
(void)CommonMemSet(OcRecvData, (UINT32)((OC_SUM_MAX)* sizeof(OcToCiOriginDataStruct)), 0U, (UINT32)((OC_SUM_MAX)* sizeof(OcToCiOriginDataStruct))); /*սṹֹ*/
for (i = 0U; i < ValidIdNum; i++)
{
@@ -4597,7 +4786,6 @@ UINT32 CopyValidGetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcTo
/*Ч*/
ShortToChar(m_OcToCiOrginDataNum, pCurCiAppDataPointer);
curIndex += (UINT32)sizeof(UINT16); /*ֽ*/
//printf("m_OcToCiOrginDataNum = %d\n", m_OcToCiOrginDataNum);
if (struNum > ValidIdNum)
{
for (i = 0U; i < m_OcToCiOrginDataNum; i++)
@@ -153,6 +153,20 @@ UINT32 CopyValidSetVobcBackHlht(const UINT8 *pCurCiAppDataPointer, UINT16 struNu
*/
UINT32 CopyValidSetVobcDataStru(const UINT8* pCurCiAppDataPointer, VobcToCiDataStruct* pDataStru, UINT16 struNum);
/*
* 功能描述: 拷贝RC通信的VOBC有效数据到对应的全局数组
* 参数说明:
输入参数
const UINT8 *pCurCiAppDataPointer:当前数据指针
UINT16 struNum:数组长度,
UINT16 struLength:结构体长度
输出参数
void *pDataStru:结构体指针,
* 返回值 拷贝数据的长度
*/
UINT32 CopyValidSetRcVobcDataStru(const UINT8* pCurCiAppDataPointer, void* pDataStru, UINT16 struNum, UINT16 struLength);
/*
* 功能描述:拷贝ITE有效数据到对应的全局数组
* 参数说明:const UINT8 *pCurCiAppDataPointer:当前数据指针
@@ -125,6 +125,27 @@ UINT8 GetAllAutoReturnRouteBelongCiId(const UINT16 allAutoReturnId)
return belongCiId;
}
/*
* 功能描述: 获取指定ID全自动折返所属虚拟联锁ID
* 参数说明: const UINT16 allAutoReturnId, 全自动折返ID
* 返回值 0: 获取数据失败
* >0: 所属虚拟联锁ID
* add by mpt 20260107
*/
UINT8 GetAllAutoRetRoutBelongVirCiId(const UINT16 allAutoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 belongVirCiId = CI_ERROR;
bufIndex = GetAllAutoReturnBufIndex(allAutoReturnId); /*获取全自动折返数组下标*/
if (bufIndex < ALL_AUTO_RETURN_SUM_MAX)
{
belongVirCiId = AllAutoReturnConfigDataStru[bufIndex].BelongVirCiId;
}
return belongVirCiId;
}
/*
* 功能描述: 获取指定ID全自动折返包含进路ID数组
@@ -34,6 +34,7 @@ typedef struct S_AllAutoReturnConfigDataStruct
{
UINT16 AllAutoReturnId; /*全自动折返ID (配置字段)*/
UINT8 BelongCiId; /*所属联锁ID*/
UINT8 BelongVirCiId; /*虚拟联锁ID*/
UINT8 RouteSum; /*全自动折返包含进路数目 (配置字段)*/
UINT16 RouteIdBuf[ALL_AUTO_RETURN_INCLROUTE_SUM_MAX]; /*全自动折返进路ID数组 (配置字段)*/
UINT16 RebackRouteIdBuf[ALL_AUTO_RETURN_REBACKROUTE_SUM_MAX]; /*全自动折返包含折出进路数组(配置字段)*/
@@ -92,6 +93,14 @@ UINT8 GetAllAutoReturnIncludeRouteSum(const UINT16 allAutoReturnId);
* >0: 所属联锁ID
*/
UINT8 GetAllAutoReturnRouteBelongCiId(const UINT16 allAutoReturnId);
/*
* 功能描述: 获取指定ID全自动折返所属虚拟联锁ID
* 参数说明: const UINT16 allAutoReturnId, 全自动折返ID
* 返回值 0: 获取数据失败
* >0: 所属虚拟联锁ID
* add by mpt 20260107
*/
UINT8 GetAllAutoRetRoutBelongVirCiId(const UINT16 allAutoReturnId);
/*
* 功能描述: 获取指定ID全自动折返包含进路ID数组
@@ -119,6 +119,27 @@ UINT8 GetAutoReturnRouteBelongCiId(const UINT16 autoReturnId)
return returnValue;
}
/*
* 功能描述: 获取指定ID自动折返所属虚拟联锁ID
* 参数说明: const UINT16 autoReturnId, 自动折返ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
* add by mpt 20260107
*/
UINT8 GetAutoReturnRouteBelongVirCiId(const UINT16 autoReturnId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 returnValue = CI_ERROR;
bufIndex = GetAutoReturnBufIndex(autoReturnId); /*获取自动折返数组下标*/
if (bufIndex < AUTO_RETURN_SUM_MAX)
{
returnValue = AutoReturnConfigDataStru[bufIndex].BelongVirCiId;
}
return returnValue;
}
/*
* 功能描述: 获取指定ID自动折返包含进路ID数组
@@ -34,6 +34,7 @@ typedef struct S_AutoReturnConfigDataStruct
{
UINT16 AutoReturnId; /*自动折返ID (配置字段)*/
UINT8 BelongCiId; /*所属联锁ID*/
UINT8 BelongVirCiId; /*所属虚拟联锁ID*/
UINT8 RouteSum; /*自动折返包含进路数目 (配置字段)*/
UINT16 RouteIdBuf[AUTO_RETURN_INCLROUTE_SUM_MAX]; /*自动折返进路包含进路ID数组 (配置字段)*/
UINT8 AutoReturnOpposedReturnIdSum; /*自动折返抵触自动折返进路数目 (配置字段)*/
@@ -88,6 +89,14 @@ UINT8 GetAutoReturnIncludeRouteSum(const UINT16 autoReturnId);
* >0: 所属联锁ID
*/
UINT8 GetAutoReturnRouteBelongCiId(const UINT16 autoReturnId);
/*
* 功能描述: 获取指定ID自动折返所属虚拟联锁ID
* 参数说明: const UINT16 autoReturnId, 自动折返ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
* add by mpt 20260107
*/
UINT8 GetAutoReturnRouteBelongVirCiId(const UINT16 autoReturnId);
/*
* 功能描述: 获取指定ID自动折返包含进路ID数组
@@ -97,6 +97,26 @@ UINT8 GetAutoRouteBelongCiId(const UINT16 autoRouteId)
}
return belongCiId;
}
/*
* 功能描述: 获取指定ID自动进路所属虚拟联锁ID
* 参数说明: const UINT16 autoRouteId, 自动进路ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
* add by mpt 20260107
*/
UINT8 GetAutoRouteBelongVirCiId(const UINT16 autoRouteId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 belongVirCiId = CI_ERROR;
bufIndex = GetAutoRouteBufIndex(autoRouteId); /*获取自动进路数组下标*/
if (bufIndex < AUTO_ROUTE_SUM_MAX)
{
belongVirCiId = AutoRouteConfigDataStru[bufIndex].BelongVirCiId;
}
return belongVirCiId;
}
/*
@@ -32,6 +32,7 @@ typedef struct S_AutoRouteConfigDataStruct
{
UINT16 AutoRouteId; /*自动进路ID (配置字段)*/
UINT8 BelongCiId; /*所属联锁ID*/
UINT8 BelongVirCiId; /*所属虚拟联锁ID*/
UINT8 RouteSum; /*自动进路包含进路数目 (配置字段)*/
UINT16 RouteIdBuf[AUTO_ROUTE_INCLROUTE_SUM_MAX]; /*自动进路进路ID数组 (配置字段)*/
UINT8 AutoRouteOpposedRouteIdSum; /*自动通过进路抵触自动通过进路数目 (配置字段)*/
@@ -89,6 +90,13 @@ UINT16 GetAutoRouteBufIndex(const UINT16 AutoRouteId);
* >0: 所属联锁ID
*/
UINT8 GetAutoRouteBelongCiId(const UINT16 autoRouteId);
/*
* 功能描述: 获取指定ID自动进路所属虚拟联锁ID
* 参数说明: const UINT16 autoRouteId, 自动进路ID
* 返回值 0: 获取数据失败
* >0: 所属联锁ID
*/
UINT8 GetAutoRouteBelongVirCiId(const UINT16 autoRouteId);
/*
* 功能描述: 获取指定ID自动进路包含进路数目
@@ -792,6 +792,7 @@ void SetCfpLocalOcCtData(const UINT16 wCfpId)
UINT8 chSendNum = 0u;
UINT8 chFunRtn = CI_ERROR;
struct_PathPoint strPoint = { 0u };
UINT8 dir = 0u;
wIndex = GetCfpBufIndex(wCfpId);
/* 输入合法 */
@@ -812,7 +813,9 @@ void SetCfpLocalOcCtData(const UINT16 wCfpId)
g_CutoffPointDataBuf[wIndex].szLocalCtTrain[chSendNum].dwDelay = GetTrainMsgDelayTime(szCtTrainId[chCtIndex]);
g_CutoffPointDataBuf[wIndex].szLocalCtTrain[chSendNum].wSpeed = GetTrainSpeed(szCtTrainId[chCtIndex]);
g_CutoffPointDataBuf[wIndex].szLocalCtTrain[chSendNum].chSpeedDir = GetTrainSpeedDir(szCtTrainId[chCtIndex]);
g_CutoffPointDataBuf[wIndex].szLocalCtTrain[chSendNum].chTrainDir = GetTrainDir(szCtTrainId[chCtIndex]);
dir = GetTrainDir(szCtTrainId[chCtIndex]); /*获取列车的逻辑方向*/
g_CutoffPointDataBuf[wIndex].szLocalCtTrain[chSendNum].chTrainDir = ConvertDirectionToLogic(dir); /*将逻辑方向转换为运营方向*/
g_CutoffPointDataBuf[wIndex].szLocalCtTrain[chSendNum].wMaxHeadLink = GetTrainMaxHeadLink(szCtTrainId[chCtIndex]);
g_CutoffPointDataBuf[wIndex].szLocalCtTrain[chSendNum].dwMaxHeadOff = GetTrainMaxHeadOffset(szCtTrainId[chCtIndex]);
g_CutoffPointDataBuf[wIndex].szLocalCtTrain[chSendNum].wMinHeadLink = GetTrainMinHeadLink(szCtTrainId[chCtIndex]);
@@ -1629,7 +1632,7 @@ void OtherCfpTrainInfoCal(UINT16 wLinkId,UINT32 dwOffSet,UINT32 dwLocalOffSet, C
{
chLinkTiocId = (UINT8)GetLinkManageTiocById(wLinkId);
strCfpInfo = GetCfpOtherOcTrainInfo(wCfpId);
chTransmitStat = GetCiTransmitState(CI_SYSTEM_TYPE_RCI, chLinkTiocId);
chTransmitStat = GetRcPbTacsTransmitState(chLinkTiocId);
if ((TRANSMIT_STATE_GOOD != chTransmitStat) || (UINT16_MAX == strCfpInfo.wTrainId))
{
;/*通信不良好,或者分界点列车信息获取失败*/
@@ -216,46 +216,6 @@ UINT8 GetLabourCancelLinShiXianState(void)
return LabourCancelLinShiXianState;
}
/*
setFlag
*/
void LabourCancelLSXianStaMoveProc(UINT8 setFlag)
{
UINT8 linShiXianState = 0u;
UINT8 wholelinShiXianState = 0u;
linShiXianState = GetLabourCancelLinShiXianState();
wholelinShiXianState = GetWholeLineLinShiXianSuFlag();
switch(setFlag)
{
case LINSHIXIANSU_COMM_GOOD_STATE:/*与ZC通信正常状态*/
if((LINSHIXIANSU_COMM_BAD_STATE == linShiXianState) ||
(LINSHIXIANSU_LABOURCANCLE_YES_STATE == linShiXianState))
{/*前一状态为: 通信故障且未进行人工取消 || 通信故障且进行了人工取消 则进行状态迁移*/
LabourCancelLinShiXianState = setFlag;
}
break;
case LINSHIXIANSU_COMM_BAD_STATE:/*与ZC通信故障状态*/
if((LINSHIXIANSU_COMM_GOOD_STATE == linShiXianState) && (WHOLE_LINE_LINSHIXIANSUSET_YES == wholelinShiXianState))
{/*前一状态为:通信正常状态且临时限速标志为设置 则进行状态迁移*/
LabourCancelLinShiXianState = setFlag;
}
break;
case LINSHIXIANSU_LABOURCANCLE_YES_STATE:/*已经进行了人工取消临时限速*/
if(LINSHIXIANSU_COMM_BAD_STATE == linShiXianState)
{/*前一状态为:通信故障状态 则进行状态迁移*/
LabourCancelLinShiXianState = setFlag;
}
break;
default:
/*不可达分支*/
break;
}
}
/*
setFlag ,UINT8 virCIid ID
@@ -1710,7 +1670,6 @@ void DriveSignalOpen(const UINT16 signalId, const UINT16 routeId)
UINT8 bCiSwitchShowGreenYellow = FUNC_SWITCH_OFF;/*ci显示绿黄开关,默认是关闭的*/
UINT8 belongVirCI= 0u;
UINT8 includeVirFlag= GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 sigalMaintainState = 0u;
UINT8 signalIsfushiFlag = 0u;
UINT8 signalCurDriveColor = 0u;
@@ -1804,27 +1763,23 @@ void DriveSignalOpen(const UINT16 signalId, const UINT16 routeId)
}
/*虚拟联锁兼容*/
if(FUNC_SWITCH_ON == includeVirFlag)
{
belongVirCI = GetSignalBelongVirCiId(signalId);
allSignalBrightFlag = GetVirCIAllSignalBrightState(belongVirCI);/*本虚拟联锁全站亮灯标志*/
}
else
{
allSignalBrightFlag = GetAllSignalBrightFlag(); /*全站亮灯标志*/
}
belongVirCI = GetSignalBelongVirCiId(signalId);
allSignalBrightFlag = GetVirCIAllSignalBrightState(belongVirCI);/*本虚拟联锁全站亮灯标志*/
lightExtinctState = GetSignalLightExtinctState(signalId);/*信号机亮灭状态*/
sigalMaintainState = GetSignalMaintainState(signalId);/*信号机维修点灯状态*/
chRoutelightFlag = GetSignalShine(signalId);
if (SIGNAL_LIGHT_CONFIG_CBTC_CLOSE == chRoutelightFlag)
chRoutelightFlag = GetSignalShineBit2(signalId);
if (SIGNAL_LIGHT_CONFIG_CBTC_LIGHT_BIT2 == chRoutelightFlag)
{
lightExtinctState = SIGNAL_LIGHT_EXTICT_STATE_YES;
}
else
{
/*数据配置常亮,CBTC接近时灭灯,驱动亮灯;配置其他依据亮灭灯状态*/
}
signalIsfushiFlag = GetSignalIsfushiFlag(signalId);
signalCurDriveColor = GetSignalCurDriveColor(signalId);
@@ -2085,7 +2040,6 @@ UINT8 DriveSignalClose(const UINT16 signalId)
UINT8 belongVirCIid = 0u;
UINT8 detainOpenRedBright = 0u;
UINT8 signalDetainFlag = 0u;
UINT8 includeVirFlag= GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 sigalMaintainState = 0u;
UINT8 signalIsfushiFlag = 0u;
UINT16 wSigInFirstPhyId = 0U;
@@ -2100,16 +2054,11 @@ UINT8 DriveSignalClose(const UINT16 signalId)
}
else
{
/*虚拟联锁兼容*/
if(FUNC_SWITCH_ON == includeVirFlag)
{
belongVirCIid = GetSignalBelongVirCiId(signalId);
allSignalBrightFlag = GetVirCIAllSignalBrightState(belongVirCIid); /*全站亮灯标志*/
}
else
{
allSignalBrightFlag = GetAllSignalBrightFlag(); /*全站亮灯标志*/
}
belongVirCIid = GetSignalBelongVirCiId(signalId);
allSignalBrightFlag = GetVirCIAllSignalBrightState(belongVirCIid); /*全站亮灯标志*/
/*无论什么时候,复示信号机关闭都驱动红灭*/
signalIsfushiFlag = GetSignalIsfushiFlag(signalId);
if (SIGNALTYPE_FUSHI_YES == signalIsfushiFlag)
@@ -2128,8 +2077,8 @@ UINT8 DriveSignalClose(const UINT16 signalId)
routeState = GetRouteState(routeId);/*获取进路状态*/
wStartSignalId = GetRouteStartSignalId(routeId);
chRoutelightFlag = GetSignalShine(signalId);
if (SIGNAL_LIGHT_CONFIG_CBTC_CLOSE == chRoutelightFlag)
chRoutelightFlag = GetSignalShineBit2(signalId);
if (SIGNAL_LIGHT_CONFIG_CBTC_LIGHT_BIT2 == chRoutelightFlag)
{
lightExtinctState = SIGNAL_LIGHT_EXTICT_STATE_YES;
}
@@ -4378,7 +4327,6 @@ void YLockSignalOpenManage(void)
UINT8 belongVirCI = 0u;
UINT8 flag = 0u;
UINT8 yLockState = 0u;
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
/*处理信号机*/
@@ -4390,15 +4338,12 @@ void YLockSignalOpenManage(void)
signalId = GetSignalId(ii); /*获取信号机ID*/
belongCiId = GetSignalBelongCiId(signalId); /*获取进路所属联锁ID*/
if(FUNC_SWITCH_ON == includeVirFlag)
{
belongVirCI = GetSignalBelongVirCiId(signalId); /*获取信号机所属虚拟联锁ID*/
yLockState = GetVirCIAllSwitchYLockState(belongVirCI);
}
else
{
yLockState = GetAllSwitchYLockFlag();
}
belongVirCI = GetSignalBelongVirCiId(signalId); /*获取信号机所属虚拟联锁ID*/
yLockState = GetVirCIAllSwitchYLockState(belongVirCI);
if ((0u == signalId) || (signalId >= SIGNAL_SUM_MAX))
{
@@ -8998,7 +8943,7 @@ void SetCtrlPower(const UINT8 virtualCiId, const UINT8 ctrlPowerFlag, const UINT
UINT8 i = 0u;
UINT8 cimode = 0u;
UINT8 virtualCiNum = 0u;
cimode = GetCiModeFlag();
cimode = GetVirCImode(virtualCiId);
virtualCiNum = GetVirtualCINum();
if (CI_MODE_ATS != cimode)
{
@@ -9105,7 +9050,6 @@ void SetSigleRouteAutoTriggerManage(UINT8 virCIid, UINT16 routeId, UINT8 setFlag
{
UINT8 chkFState = CI_ERROR;
UINT8 chkFloodState = CI_ERROR;
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 belongCiId = 0u; /*进路所属联锁ID*/
UINT8 localCiId = 0u; /*本地联锁ID*/
UINT8 belongVirCI = 0u;
@@ -9123,14 +9067,13 @@ void SetSigleRouteAutoTriggerManage(UINT8 virCIid, UINT16 routeId, UINT8 setFlag
belongCiId = GetRouteBelongCiId(routeId); /*获取进路所属联锁ID*/
if (ROUTE_TYPE_AUTO_TRIGGER == autoTriggerType)
{
if (FUNC_SWITCH_ON == includeVirFlag)
belongVirCI = GetRouteBelongVirCiId(routeId);
if (belongVirCI != virCIid)
{
belongVirCI = GetRouteBelongVirCiId(routeId);
if (belongVirCI != virCIid)
{
flag = 1u;
}
flag = 1u;
}
if ((0u == routeId) || (routeId >= ROUTE_SUM_MAX) || (belongCiId != localCiId) || (1u == flag))
{
@@ -9242,7 +9185,6 @@ void SetSigleRouteAutoTriggerManage(UINT8 virCIid, UINT16 routeId, UINT8 setFlag
*/
void CancelSigleRouteAutoTrigger(UINT8 virCIid, UINT16 routeId, UINT8 setFlag)
{
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 belongCiId = 0u; /*进路所属联锁ID*/
UINT8 localCiId = 0u; /*本地联锁ID*/
UINT8 belongVirCI = 0u;
@@ -9252,14 +9194,13 @@ void CancelSigleRouteAutoTrigger(UINT8 virCIid, UINT16 routeId, UINT8 setFlag)
localCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/
belongCiId = GetRouteBelongCiId(routeId); /*获取进路所属联锁ID*/
flag = 0u;
if (FUNC_SWITCH_ON == includeVirFlag)
belongVirCI = GetRouteBelongVirCiId(routeId);
if (belongVirCI != virCIid)
{
belongVirCI = GetRouteBelongVirCiId(routeId);
if (belongVirCI != virCIid)
{
flag = 1u;
}
flag = 1u;
}
if ((0u == routeId) || (routeId >= ROUTE_SUM_MAX) || (belongCiId != localCiId) || (1u == flag))
{
@@ -11623,4 +11564,31 @@ void SetLocalSnowModelCC(UINT8 setmodle)
{
; /*不处理*/
}
}
/*
*
* UINT8 chVirCiId ID
*
CI_TYPE_ZX ((UINT8)0x01) 线
CI_TYPE_CLD ((UINT8)0x04)
CI_TYPE_SCX ((UINT8)0x02) 线
add by mpt 20260104
*/
UINT8 GetLocalVirCiType(UINT8 chVirCiId)
{
UINT8 cLocalCiId = 0U;
UINT8 ret = 0U;
cLocalCiId = GetSystemParaLocalCiId();
if (chVirCiId == 200U + cLocalCiId)
{
ret = CI_TYPE_SCX;
}
else
{
ret = GetLocalCiType();
}
return ret;
}
@@ -295,13 +295,6 @@ void SetStartLockFlag(UINT8 setFlag);
LINSHIXIANSU_COMM_BAD_YES_LABOURCANCLE_STATE
*/
UINT8 GetLabourCancelLinShiXianState(void);
/*
功能描述:人工取消临时限速状态迁移处理
参数说明:setFlag 状态
返回值:无
*/
void LabourCancelLSXianStaMoveProc(UINT8 setFlag);
/*
功能描述:人工取消临时限速状态迁移处理
参数说明:setFlag 状态,UINT8 virCIid 虚拟联锁ID
@@ -1972,5 +1965,14 @@ UINT8 GetLocalSnowModelCC(void);
* Created By LQ 2025.11.06
*/
void SetLocalSnowModelCC(UINT8 setmodle);
/*
* 功能描述: 获取虚拟联锁类型
* 参数说明: UINT8 chVirCiId 虚拟联锁ID
* 返回值
CI_TYPE_ZX ((UINT8)0x01) 正线联锁
CI_TYPE_CLD ((UINT8)0x04) 车辆段联锁
CI_TYPE_SCX ((UINT8)0x02) 试车线
add by mpt 20260104
*/
UINT8 GetLocalVirCiType(UINT8 chVirCiId);
#endif
+3
View File
@@ -217,6 +217,8 @@
#define EFUNC_PARSE_LOCAL_CI2RC_DATA ((UINT8)0xD4U) /*函数:ParseCiToLocalRcDataFrame*/
#define EFUNC_PARSE_LOCAL_RC2CI_DATA ((UINT8)0xD5U) /*函数:ParseRcToLocalCiDataFrame*/
#define EFUNC_PARSE_LOCAL_CI2CI_DATA ((UINT8)0xD6U) /*函数:ParseCiToCiDataFrame*/
#define EFUNC_PARSE_LOCAL_OC2CI_DATA ((UINT8)0xD7U) /*函数:ParseOcToCiDataFrame*/
/*************************************************分界线******************************************************************************/
@@ -251,6 +253,7 @@
#define ETYPE_COMM_WITH_TMC ((UINT8)0x17) /*与TMC通信*/
#define ETYPE_COMM_WITH_RC ((UINT8)0x18U) /*与RC通信*/
#define ETYPE_COMM_WITH_OC ((UINT8)0x19U) /*与OC通信*/
/* 信号机故障类型编码 (UINT8)0x21-(UINT8)0x3f */
/* 设备类型 CI_DEVICE_TYPE_SIGNAL */
@@ -662,4 +662,55 @@ UINT8 CheckEsbBelSendRange(const UINT16 wCheckEsbId)
}
return retVal;
}
/*
* 功能描述:获取指定ID紧急停车按钮关联的同站紧急按钮数量
* 参数说明:const UINT16 esbId 紧急停车按钮ID
* 返 回 值:同站紧急按钮数量
* Created By LQ 2025.12.30
*/
UINT8 GetEsbRelOnePlatEsbNum(const UINT16 esbId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT8 reVal = 0U;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
reVal = EsbConfigDataStru[bufIndex].RelOnePlatEsbNum;
}
else
{
/*返回0*/
}
return reVal;
}
/*
* 功能描述:获取指定ID紧急停车按钮关联的同站紧急按钮ID数组
* 参数说明:const UINT16 esbId 紧急停车按钮ID
* 返 回 值:NULL 获取数据失败
* 其它 同站紧急按钮ID数组
* Created By LQ 2025.12.30
*/
UINT16* GetEsbRelOnePlatEsbId(const UINT16 esbId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT16* reVal = NULL;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
reVal = EsbConfigDataStru[bufIndex].RelOnePlatEsbId;
}
else
{
/*返回NULL*/
}
return reVal;
}
@@ -19,6 +19,7 @@
#include "CommonTypes.h"
#include "../System/CiSystemDefine.h"
#include "../System/SystemParameterManage.h"
#include "dquStructInit.h"
#ifdef __cplusplus
@@ -50,6 +51,8 @@ typedef struct S_EsbConfigDataStruct
UINT16 EsbCutoffBuzzRelayId; /*切除蜂鸣器报警继电器ID*/
UINT8 ConfigAtsCiEssSteadyMask; /*是否配置了ATS-CI稳灯状态码位0x55 配置;0xaa未配置*/
UINT8 ConfigAtsCiEssFlashMask; /*是否配置了ATS-CI闪灯状态码位0x55 配置;0xaa未配置*/
UINT8 RelOnePlatEsbNum; /*关联同站ESB数量*/
UINT16 RelOnePlatEsbId[ESB_PROTECT_LINK_NUM]; /*关联同站ESB ID数组*/
} EsbConfigDataStruct;
/*******************************全局变量声明*******************************/
@@ -293,6 +296,23 @@ UINT16 GetEsbCutoffBuzzRelayId(const UINT16 esbId);
*/
UINT8 CheckEsbBelSendRange(const UINT16 wCheckEsbId);
/*
* 功能描述:获取指定ID紧急停车按钮关联的同站紧急按钮数量
* 参数说明:const UINT16 esbId 紧急停车按钮ID
* 返 回 值:同站紧急按钮数量
* Created By LQ 2025.12.30
*/
UINT8 GetEsbRelOnePlatEsbNum(const UINT16 esbId);
/*
* 功能描述:获取指定ID紧急停车按钮关联的同站紧急按钮ID数组
* 参数说明:const UINT16 esbId 紧急停车按钮ID
* 返 回 值:NULL 获取数据失败
* 其它 同站紧急按钮ID数组
* Created By LQ 2025.12.30
*/
UINT16* GetEsbRelOnePlatEsbId(const UINT16 esbId);
#ifdef __cplusplus
}
#endif
+301
View File
@@ -171,6 +171,8 @@ UINT8 EsbDataManageInit(void)
EsbDataStru[esbId].EsbCutErrTriggerPressCycNum = 0U; /*紧急关闭旁路按钮误触发按下周期*/
EsbDataStru[esbId].EsbCutErrorFlag = ESB_ERROR_FLAG_NO; /*紧急关闭旁路按钮未故障*/
EsbDataStru[esbId].EsbCutRelayDownState = ESB_RELAY_ERROR_DOWN_YES; /*紧急关闭旁路按钮采集继电器落下状态初始化为通信异常落下*/
EsbDataStru[esbId].cOnePlatEsbState = ESB_STATE_VALID_NO; /*初始化同站紧急按钮未激活*/
EsbDataStru[esbId].cOnePlatEsbCutState = ESB_CUT_NO; /*初始化同站紧急旁路按钮未激活*/
}
rtn = CI_SUCCESS;
return rtn;
@@ -1072,4 +1074,303 @@ UINT8 GetEsbRelayDownState(const UINT16 esbId)
}
return reVal;
}
/*
* 功能描述: 获取指定ID紧急停车按钮状态(融合了旁路状态)
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮状态
*/
UINT8 GetEsbMergeState(const UINT16 esbId)
{
UINT8 reVal = CI_ERROR;
UINT8 chEsbState = 0U;
UINT8 chEsbCutState = 0U;
chEsbState = GetEsbState(esbId);
chEsbCutState = GetEsbCutState(esbId);
if (ESB_CUT_YES == chEsbCutState)
{
reVal = ESB_STATE_VALID_NO;/*未按下*/
}
else
{
if (ESB_STATE_VALID_NO == chEsbState)
{
reVal = ESB_STATE_VALID_NO;/*未按下*/
}
else
{
reVal = ESB_STATE_VALID_YES;
}
}
return reVal;
}
/*
* 功能描述:获取指定ID紧急按钮同站紧急按钮激活状态
* 参数说明:const UINT16 esbId 紧急停车按钮ID
* 返 回 值:0 获取数据失败
* 0x55 紧急未激活
* 0xAA 紧急激活
* Created By LQ 2025.12.29
*/
UINT8 GetOnePlatEsbState(const UINT16 esbId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
reVal = EsbDataStru[bufIndex].cOnePlatEsbState;
}
else
{
/*返回失败*/
}
return reVal;
}
/*
* 功能描述:设置指定ID紧急按钮同站紧急按钮激活状态
* 参数说明:const UINT16 esbId 紧急按钮ID
* const UINT8 esbState 紧急按钮状态
* 返 回 值:无
* Created By LQ 2025.12.29
*/
void SetOnePlatEsbState(const UINT16 esbId, const UINT8 esbState)
{
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
if ((ESB_STATE_VALID_NO == esbState) || (ESB_STATE_VALID_YES == esbState))
{
EsbDataStru[bufIndex].cOnePlatEsbState = esbState; /*同站紧急按钮激活状态*/
}
else
{
/*不处理*/
}
}
else
{
/*不处理*/
}
}
/*
* 功能描述:获取指定ID紧急按钮同站紧急旁路按钮激活状态
* 参数说明:const UINT16 esbId 紧急停车按钮ID
* 返 回 值:0 获取数据失败
* 0x55 旁路未激活
* 0xAA 旁路激活
* Created By LQ 2025.12.29
*/
UINT8 GetOnePlatEsbCutState(const UINT16 esbId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
reVal = EsbDataStru[bufIndex].cOnePlatEsbCutState;
}
else
{
/*返回失败*/
}
return reVal;
}
/*
* 功能描述:设置指定ID紧急按钮同站紧急旁路按钮激活状态
* 参数说明:const UINT16 esbId 紧急按钮ID
* const UINT8 esbCutState 紧急旁路按钮状态
* 返 回 值:无
* Created By LQ 2025.12.29
*/
void SetOnePlatEsbCutState(const UINT16 esbId, const UINT8 esbCutState)
{
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
if (ESB_SUM_MAX > bufIndex)
{
if ((ESB_CUT_NO == esbCutState) || (ESB_CUT_YES == esbCutState))
{
EsbDataStru[bufIndex].cOnePlatEsbCutState = esbCutState; /*同站紧急按钮激活状态*/
}
else
{
/*不处理*/
}
}
else
{
/*不处理*/
}
}
/*
* 功能描述:清除同站紧急按钮及旁路按钮激活状态
* 参数说明:无
* 返 回 值:无
* Created By LQ 2025.12.30
*/
void ClearOnePlatEsbAndCutState(void)
{
UINT16 wEsbTotalSum = 0U; /*ESB总数*/
UINT16 ii = 0U;
UINT16 wEsbId = 0U; /*ESB ID*/
wEsbTotalSum = GetTotalEsbCurNum();
/*重置所有紧急按钮的同站紧急按钮及旁路按钮为未激活状态*/
for (ii = 0U; ii < wEsbTotalSum; ii++)
{
wEsbId = GetEsbId(ii);
SetOnePlatEsbState(wEsbId, ESB_STATE_VALID_NO);
SetOnePlatEsbCutState(wEsbId, ESB_CUT_NO);
}
}
/*
* 功能描述:设置指定ID紧急按钮关联的其它同站紧急按钮激活状态
* 参数说明:const UINT16 esbId 紧急按钮ID
* const UINT8 esbState 紧急按钮状态
* 返 回 值:无
* Created By LQ 2025.12.29
*/
void SetRelOtherOnePlatEsbState(const UINT16 esbId, const UINT8 esbState)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT8 cRelOnePlatEsbNum = 0U; /*关联的其它同站紧急按钮数量*/
UINT16* pRelOnePlatEsbId = NULL; /*关联的其它同站紧急按钮ID*/
UINT8 ii = 0U;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
cRelOnePlatEsbNum = GetEsbRelOnePlatEsbNum(esbId);
pRelOnePlatEsbId = GetEsbRelOnePlatEsbId(esbId);
if ((ESB_SUM_MAX > bufIndex) && (0U < cRelOnePlatEsbNum) && (NULL != pRelOnePlatEsbId))
{
if ((ESB_STATE_VALID_NO == esbState) || (ESB_STATE_VALID_YES == esbState))
{
for (ii = 0U; ii < cRelOnePlatEsbNum; ii++)
{
SetOnePlatEsbState(pRelOnePlatEsbId[ii], esbState);
}
}
else
{
/*不处理*/
}
}
else
{
/*不处理*/
}
}
/*
* 功能描述:设置指定ID紧急按钮关联的其它同站紧急旁路按钮激活状态
* 参数说明:const UINT16 esbId 紧急按钮ID
* const UINT8 esbCutState 紧急旁路按钮状态
* 返 回 值:无
* Created By LQ 2025.12.29
*/
void SetRelOtherOnePlatEsbCutState(const UINT16 esbId, const UINT8 esbCutState)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT8 cRelOnePlatEsbNum = 0U; /*关联的其它同站紧急按钮数量*/
UINT16* pRelOnePlatEsbId = NULL; /*关联的其它同站紧急按钮ID*/
UINT8 ii = 0U;
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
cRelOnePlatEsbNum = GetEsbRelOnePlatEsbNum(esbId);
pRelOnePlatEsbId = GetEsbRelOnePlatEsbId(esbId);
if ((ESB_SUM_MAX > bufIndex) && (0U < cRelOnePlatEsbNum) && (NULL != pRelOnePlatEsbId))
{
if ((ESB_CUT_NO == esbCutState) || (ESB_CUT_YES == esbCutState))
{
for (ii = 0U; ii < cRelOnePlatEsbNum; ii++)
{
SetOnePlatEsbCutState(pRelOnePlatEsbId[ii], esbCutState);
}
}
else
{
/*不处理*/
}
}
else
{
/*不处理*/
}
}
/*
* 功能描述:检查指定ID紧急按钮关联的其它同站紧急按钮状态
* 参数说明:const UINT16 esbId 紧急按钮ID
* 返 回 值:1 紧急无效或旁路有效
* 0 紧急有效
* Created By LQ 2025.12.29
*/
UINT8 CheckRelOtherOnePlatEsbState(const UINT16 esbId)
{
UINT8 cRetVal = CI_ERROR;
UINT16 bufIndex = 0U; /*数组下标*/
UINT8 cRelOnePlatEsbNum = 0U; /*关联的其它同站紧急按钮数量*/
UINT16* pRelOnePlatEsbId = NULL; /*关联的其它同站紧急按钮ID*/
UINT8 ii = 0U;
UINT8 cEsbState = 0U; /*紧急按钮状态*/
UINT8 cEsbCutState = 0U; /*紧急按钮旁路状态*/
bufIndex = GetEsbConfigBufIndex(esbId); /*获取数组下标*/
cRelOnePlatEsbNum = GetEsbRelOnePlatEsbNum(esbId);
pRelOnePlatEsbId = GetEsbRelOnePlatEsbId(esbId);
if ((ESB_SUM_MAX > bufIndex) && (NULL != pRelOnePlatEsbId))
{
cRetVal = CI_SUCCESS;
for (ii = 0U; ii < cRelOnePlatEsbNum; ii++)
{
cEsbState = GetEsbState(pRelOnePlatEsbId[ii]);
cEsbCutState = GetEsbCutState(pRelOnePlatEsbId[ii]);
if ((ESB_STATE_VALID_NO == cEsbState) || (ESB_CUT_YES == cEsbCutState))
{
/*继续检查*/
}
else
{
cRetVal = CI_ERROR; /*存在一个ESB紧急有效且旁路无效,返回0*/
break;
}
}
}
else
{
cRetVal = CI_ERROR; /*入参非法,返回0*/
}
return cRetVal;
}
+82
View File
@@ -49,6 +49,8 @@ typedef struct S_EsbDataStruct
UINT32 EsbCutErrTriggerPressCycNum; /*紧急关闭旁路按钮误触发按下周期*/
UINT8 EsbCutErrorFlag; /*紧急关闭旁路按钮故障标志,0x55-未故障,0xaa-故障*/
UINT8 EsbCutRelayDownState; /*紧急关闭旁路按钮采集继电器落下状态,0x55-正常采集落下,0xaa-通信异常落下*/
UINT8 cOnePlatEsbState; /*同站紧急按钮激活状态:0x55-未激活,0xAA-激活*/
UINT8 cOnePlatEsbCutState; /*同站紧急旁路按钮激活状态:0x55-未激活,0xAA-激活*/
} EsbDataStruct;
/*******************************全局变量声明*******************************/
@@ -406,6 +408,86 @@ void SetEsbRelayDownState(const UINT16 esbId, const UINT8 cRelayDownState);
* Created By LQ 2025.04.01
*/
UINT8 GetEsbRelayDownState(const UINT16 esbId);
/*
* 功能描述: 获取指定ID紧急停车按钮状态(融合了旁路状态)
* 参数说明: const UINT16 esbId, 紧急停车按钮ID
* 返回值 0: 获取数据失败
* >0: 紧急停车按钮状态
*/
UINT8 GetEsbMergeState(const UINT16 esbId);
/*
* 功能描述:获取指定ID紧急按钮同站紧急按钮激活状态
* 参数说明:const UINT16 esbId 紧急停车按钮ID
* 返 回 值:0 获取数据失败
* 0x55 紧急未激活
* 0xAA 紧急激活
* Created By LQ 2025.12.29
*/
UINT8 GetOnePlatEsbState(const UINT16 esbId);
/*
* 功能描述:设置指定ID紧急按钮同站紧急按钮激活状态
* 参数说明:const UINT16 esbId 紧急按钮ID
* const UINT8 esbState 紧急按钮状态
* 返 回 值:无
* Created By LQ 2025.12.29
*/
void SetOnePlatEsbState(const UINT16 esbId, const UINT8 esbState);
/*
* 功能描述:获取指定ID紧急按钮同站紧急旁路按钮激活状态
* 参数说明:const UINT16 esbId 紧急停车按钮ID
* 返 回 值:0 获取数据失败
* 0x55 旁路未激活
* 0xAA 旁路激活
* Created By LQ 2025.12.29
*/
UINT8 GetOnePlatEsbCutState(const UINT16 esbId);
/*
* 功能描述:设置指定ID紧急按钮同站紧急旁路按钮激活状态
* 参数说明:const UINT16 esbId 紧急按钮ID
* const UINT8 esbCutState 紧急旁路按钮状态
* 返 回 值:无
* Created By LQ 2025.12.29
*/
void SetOnePlatEsbCutState(const UINT16 esbId, const UINT8 esbCutState);
/*
* 功能描述:清除同站紧急按钮及旁路按钮激活状态
* 参数说明:无
* 返 回 值:无
* Created By LQ 2025.12.30
*/
void ClearOnePlatEsbAndCutState(void);
/*
* 功能描述:设置指定ID紧急按钮关联的其它同站紧急按钮激活状态
* 参数说明:const UINT16 esbId 紧急按钮ID
* const UINT8 esbState 紧急按钮状态
* 返 回 值:无
* Created By LQ 2025.12.29
*/
void SetRelOtherOnePlatEsbState(const UINT16 esbId, const UINT8 esbState);
/*
* 功能描述:设置指定ID紧急按钮关联的其它同站紧急旁路按钮激活状态
* 参数说明:const UINT16 esbId 紧急按钮ID
* const UINT8 esbCutState 紧急旁路按钮状态
* 返 回 值:无
* Created By LQ 2025.12.29
*/
void SetRelOtherOnePlatEsbCutState(const UINT16 esbId, const UINT8 esbCutState);
/*
* 功能描述:检查指定ID紧急按钮关联的其它同站紧急按钮状态
* 参数说明:const UINT16 esbId 紧急按钮ID
* 返 回 值:1 紧急无效或旁路有效
* 0 紧急有效
* Created By LQ 2025.12.29
*/
UINT8 CheckRelOtherOnePlatEsbState(const UINT16 esbId);
#ifdef __cplusplus
}
@@ -1683,8 +1683,8 @@ UINT8 elm_PrepareOCCommStatus(UINT8 OCID)
UINT8 ret = ELM_COM_STATUS_ERROR;
UINT8 funRtn = TRANSMIT_STATE_BAD;
/** 获取OC通信状态 */
funRtn = GetCiTransmitState(CI_SYSTEM_TYPE_RCI,OCID);
/** 获取Rc通信状态 */
funRtn = GetRcPbTacsTransmitState(OCID);
/** 设置函数返回值 */
ASSERT_SETRET(TRANSMIT_STATE_GOOD == funRtn,ret,ELM_COM_STATUS_OK,ELM_COM_STATUS_ERROR)
@@ -156,6 +156,7 @@ UINT8 HLHTRecvCommonPacketHeadCheck(UINT16 LocalDevName, UINT16 RemoteDevName, U
if ((CI_SYSTEM_TYPE_CI == devType) || (CI_SYSTEM_TYPE_RC == devType))
{
/*修改:根据发送方类型获取电子地图校验*/
emapVer = GetCiTranCiDataCheckVer((UINT8)(RemoteDevName & 0x00FFU), LocalDevName);
emapCheckVer = CI_SUCCESS;
}
@@ -17,6 +17,8 @@
HLHTHeadContextStru ciHLHTHeadCtxs[CI_SUM_MAX]={0U};/*存放与本控区通信的相邻CI互联互通报文头上下文数据*/
HLHTHeadContextStru gSzRcHLHTHeadCtxs[CI_SUM_MAX] = { 0U }; /*存放与本控区通信的相邻RC互联互通报文头上下文数据*/
HLHTHeadContextStru ciHLHTHeadCtxsCiToRc[CI_SUM_MAX] = { 0U };/*存放本控区CI同步的相邻CI互联互通报文头上下文数据*/
HLHTHeadContextStru gSzRcHLHTHeadCtxsCiToRc[CI_SUM_MAX] = { 0U }; /*存放本控区CI同步的相邻RC互联互通报文头上下文数据*/
HLHTHeadContextStru vobcHLHTHeadCtxs[VOBC_SUM_MAX]={0U};/*存放与本CI通信的VOBC互联互通报文头上下文数据*/
HLHTHeadContextStru vobcBackupHLHTHeadCtxs[VOBC_BACKUP_SUM_MAX] = { 0U };/*存放与本CI通信的后备模式VOBC互联互通报文头上下文数据*/
HLHTHeadContextStru zcHLHTHeadCtxs[ZC_SUM_MAX]={0U};/*存放与本CI通信的ZC互联互通报文头上下文数据*/
@@ -576,7 +578,7 @@ static UINT8 GetHLHTHeadCtxTmepVars(const UINT8 devType, UINT16 *devMaxSum, HLHT
UINT8 retVal = CI_ERROR;
UINT16 maxDevSum = 0u;
HLHTHeadContextStru *tempHeadCtxPtr = NULL;
UINT8 chSystemWorkType = GetSystemWorkType();; /*系统工作类型*/
UINT8 chSystemWorkType = GetSystemWorkType();/*系统工作类型*/
UINT8 cRcWorkMode = 0U;/*本系统当前工作模式*/
cRcWorkMode = GetLocalRcWorkMode();
@@ -699,7 +701,7 @@ static void ProcHlhtHeadCtxTimeOutDiffSys(const UINT32 timeoutSnCount, const UIN
HLHTHeadContextStru tempHeadCtx = { 0u };
UINT8 headValid = 0u;
INT32 remainValidiy;/*剩余的时间*/
UINT8 chRcID = 0U;
if (NULL != headCtxs)
{
for (i = 0u;i < headCount;i++)
@@ -737,21 +739,9 @@ static void ProcHlhtHeadCtxTimeOutDiffSys(const UINT32 timeoutSnCount, const UIN
if (0u == headValid)
{
if ((headCtxs == axleHLHTHeadCtxs) || (headCtxs == gSzRcAxleHLHTHeadCtxs)) /*计轴系统中断时,GAL层对方序号,收到对方数据时本方序号,设置0xFFFFFFFF*/
{
headCtxs[i].logId = 0u;
headCtxs[i].sourceRecvOppMsgSN = 0u;
headCtxs[i].sourcePreOwnMsgSN = 0u;
headCtxs[i].sourceComPeriod = 0u;
headCtxs[i].sourceCrntOwnMsgSN = 0xFFFFFFFFu;
headCtxs[i].ciPreRecvOwnSn = 0xFFFFFFFFu;
}
else
{
(void)CommonMemSet(&(headCtxs[i]), (UINT32)sizeof(HLHTHeadContextStru), 0u, (UINT32)sizeof(HLHTHeadContextStru));
headCtxs[i].sourceCrntOwnMsgSN = 0xFFFFFFFFu;
headCtxs[i].ciPreRecvOwnSn = 0xFFFFFFFFu;
}
(void)CommonMemSet(&(headCtxs[i]), (UINT32)sizeof(HLHTHeadContextStru), 0u, (UINT32)sizeof(HLHTHeadContextStru));
headCtxs[i].sourceCrntOwnMsgSN = 0xFFFFFFFFu;
headCtxs[i].ciPreRecvOwnSn = 0xFFFFFFFFu;
}
else
{
@@ -1289,5 +1279,51 @@ HLHTHeadContextStru* GetCiToRcHLHTOcHeadCtx(const UINT8 ocId)
/*不处理*/
}
return pstrRetVal;
}
/*
* 功能描述:获取指定CI的CI-RC同步CI互联互通报文头上下文数据
* 参数说明:const UINT8 chDevId 设备ID
* 返 回 值:NULL 获取数据失败
* 非NULL 获取数据成功
* Created By fan 2025.12.31
*/
HLHTHeadContextStru* GetCiToRcWithCiHeadCtx(const UINT8 chDevId)
{
HLHTHeadContextStru* pstrRetVal = NULL;
if ((0U < chDevId) && (CI_SUM_MAX > chDevId))
{
pstrRetVal = &ciHLHTHeadCtxsCiToRc[chDevId];
}
else
{
/*不处理*/
}
return pstrRetVal;
}
/*
* 功能描述:获取指定CI的CI-RC同步RC互联互通报文头上下文数据
* 参数说明:const UINT8 chDevId 设备ID
* 返 回 值:NULL 获取数据失败
* 非NULL 获取数据成功
* Created By fan 2025.12.31
*/
HLHTHeadContextStru* GetCiToRcWithRcHeadCtx(const UINT8 chDevId)
{
HLHTHeadContextStru* pstrRetVal = NULL;
if ((0U < chDevId) && (CI_SUM_MAX > chDevId))
{
pstrRetVal = &gSzRcHLHTHeadCtxsCiToRc[chDevId];
}
else
{
/*不处理*/
}
return pstrRetVal;
}
@@ -40,6 +40,8 @@ extern "C" {
/*******************************全局变量声明*******************************/
extern HLHTHeadContextStru ciHLHTHeadCtxs[CI_SUM_MAX];/*存放与本控区通信的相邻CI互联互通报文头上下文数据*/
extern HLHTHeadContextStru gSzRcHLHTHeadCtxs[CI_SUM_MAX]; /*存放与本控区通信的相邻RC互联互通报文头上下文数据*/
extern HLHTHeadContextStru ciHLHTHeadCtxsCiToRc[CI_SUM_MAX];/*存放与本控区通信的相邻CI互联互通报文头上下文数据*/
extern HLHTHeadContextStru gSzRcHLHTHeadCtxsCiToRc[CI_SUM_MAX]; /*存放与本控区通信的相邻RC互联互通报文头上下文数据*/
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互联互通报文头上下文数据*/
@@ -298,6 +300,23 @@ extern "C" {
* Created By fan 2025.11.12
*/
HLHTHeadContextStru* GetCiToRcHLHTOcHeadCtx(const UINT8 ocId);
/*
* 功能描述:获取指定CI的CI-RC同步CI互联互通报文头上下文数据
* 参数说明:const UINT8 chDevId 设备ID
* 返 回 值:NULL 获取数据失败
* 非NULL 获取数据成功
* Created By fan 2025.12.31
*/
HLHTHeadContextStru* GetCiToRcWithCiHeadCtx(const UINT8 chDevId);
/*
* 功能描述:获取指定CI的CI-RC同步RC互联互通报文头上下文数据
* 参数说明:const UINT8 chDevId 设备ID
* 返 回 值:NULL 获取数据失败
* 非NULL 获取数据成功
* Created By fan 2025.12.31
*/
HLHTHeadContextStru* GetCiToRcWithRcHeadCtx(const UINT8 chDevId);
#ifdef __cplusplus
}
File diff suppressed because it is too large Load Diff
+146 -1
View File
@@ -137,12 +137,14 @@ void SwitchDeviceToRelayStateProc(void);
*/
void PhySecRelayToDeviceStateProc(void);
#if 0
/*
* 功能描述: 更新区段计轴复位继电器状态
* 参数说明: void
* 返回值 void
*/
void PhySecResetToRelayStateProc(void);
#endif
/*
* 功能描述: 更新区段计轴复位继电器状态
* 参数说明: void
@@ -803,7 +805,7 @@ UINT8 WashMachineWorkModeRelayProc(const UINT16 washMachineId);
* CI_SUCCESS: 更新成功
* by cgh 20231113
*/
UINT8 DownWashDevToRelayStaProc(const UINT16 washMachineId);
void DownWashDevToRelayStaProc(const UINT16 washMachineId);
/*
* 功能描述: 降级模式洗车线关联进路状态检查
@@ -991,6 +993,149 @@ UINT8 GetSndDetBtnCollTolerateRet(const UINT16 wSignalId);
*/
void SetAllSingleSwitchZzjState(UINT16 switchCurSum);
/*
* 功能描述: 指定洗车机ID降级模式洗车按钮状态更新
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachineButtonStateProc(const UINT16 washMachineId);
/*
* 功能描述: 指定洗车机ID降级模式请求信息处理
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachineApplyStateProc(const UINT16 washMachineId);
/*
* 功能描述: 指定洗车机ID降级模式洗车请求信息处理
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachineApplyProc(const UINT16 washMachineId);
/*
* 功能描述: 指定洗车机ID降级模式反向通过请求信息处理
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachinePassApplyProc(const UINT16 washMachineId);
/*
* 功能描述: 洗车线控制室更新洗车同意按钮逻辑
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachineButtonUpdate(const UINT16 washMachineId);
/*
* 功能描述: DCC更新洗车同意按钮逻辑
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachineDCCButtonUpdate(const UINT16 washMachineId);
/*
* 功能描述: 融合洗车同意状态
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void FusionWashMachineAllowState(const UINT16 washMachineId);
/*
* 功能描述: 洗车线控制室更新反向洗车同意按钮逻辑
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachinePassButtonUpdate(const UINT16 washMachineId);
/*
* 功能描述: DCC更新反向洗车同意按钮逻辑
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachineDCCPassButtonUpdate(const UINT16 washMachineId);
/*
* 功能描述: 融合反向通过同意按钮状态
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void FusionWashMachinePassAllowState(const UINT16 washMachineId);
/*
* 功能描述: 降级模式洗车线洗车请求指示灯
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachineApplyLight(const UINT16 washMachineId);
/*
* 功能描述: 降级模式DCC洗车请求指示灯
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachineDccApplyLight(const UINT16 washMachineId);
/*
* 功能描述: 降级模式洗车线洗车反向通过请求指示灯
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachinePassApplyLight(const UINT16 washMachineId);
/*
* 功能描述: 降级模式DCC洗车反向通过请求指示灯
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachineDccPassApplyLight(const UINT16 washMachineId);
/*
* 功能描述: 降级模式洗车同意指示灯
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachineAllowLight(const UINT16 washMachineId);
/*
* 功能描述: 降级模式DCC洗车同意指示灯
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachineDccAllowLight(const UINT16 washMachineId);
/*
* 功能描述: 降级模式洗车同意反向通过指示灯
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachinePassAllowLight(const UINT16 washMachineId);
/*
* 功能描述: 降级模式DCC洗车同意反向通过指示灯
* 参数说明: const UINT16 washMachineId 洗车机ID
* 返回值 void
*/
void WashMachineDccPassAllowLight(const UINT16 washMachineId);
/*
* 功能描述: 更新屏蔽门对应IBP盘发车按钮继电器状态
* 参数说明: const UINT16 wPsdId 屏蔽门ID
* 返回值 CI_ERROR: 更新失败
* CI_SUCCESS: 更新成功
*/
UINT8 PsdIbpRelToDevStaProc(const UINT16 wPsdId);
/*
* 功能描述:同站紧急按钮及旁路按钮状态处理
* 参数说明:void
* 返 回 值:无
* Created By LQ 2025.12.30
*/
void OnePlatEsbAndCutBtnProc(void);
#ifdef __cplusplus
}
#endif
File diff suppressed because it is too large Load Diff
+1 -9
View File
@@ -128,14 +128,6 @@ void ProcessPscToCiData(void);
*/
UINT8 ProcessAtsOrXianDiToCiData(void);
/*
* 功能描述: 处理车辆段的ATS或现地到CI数据
* 参数说明: void
* 返回值 0:处理失败
* 1:处理成功
*/
UINT8 ProcessAtsOrXianDiToCiDataCld(void);
/*
* 功能描述: 处理设备逻辑状态
* 参数说明: void
@@ -304,7 +296,7 @@ UINT8 CheckOrderWhetherDoing(UINT8 virCIid,UINT8 belongVirCIid,UINT8 orderType,U
* UINT8 MaskType 码位类型
* 返回值
*/
void DealAutoReturnMask_UseVirCI(UINT16 DeviceId,UINT16*maskBuf,UINT8 MaskType,UINT16 index);
void DealAutoReturnMask(UINT16 DeviceId,UINT8* pMaskBuf,UINT8 MaskType,UINT16 index);
/*
* 功能描述: 获取全站维修点灯状态
* 参数说明: UINT8 virCIid 虚拟联锁ID
File diff suppressed because it is too large Load Diff
+67 -6
View File
@@ -92,6 +92,7 @@ UINT8 CiToAtsBackInfoFunctionJudge(const UINT8 functionId,const UINT8 deviceType
*/
void IndicatorStateProc(void);
#if 0
/*
*
* void
@@ -99,6 +100,7 @@ void IndicatorStateProc(void);
*/
void IndicatorStateProc_UseVirCI(UINT8 virCIid);
#endif
/*
*
* void
@@ -147,12 +149,7 @@ void SignaDsBreakAlarmIndicator_Vir(UINT8 virCIid,UINT8 devId);
*/
void CiToCiOutputCmdProc(void);
/*
*
*
*
*/
static void AutoRtnIndictStatusProc_VirCI(void);
/*
* ID
* groupAutoRouteId ID
@@ -463,6 +460,70 @@ void RtnRealyAdhesionStatePro(void);
* by cgh 20250928
*/
UINT16 GetOverlapLaborUnlockBackTime(const UINT16 overlapId);
/*
* I系II系工作状态指示灯
* const UINT16 wFIndicatorId I系指示灯id
* const UINT16 wSIndicatorId II系指示灯id
*
* by lyj 20260105
*/
void SetWorkStatusIndicator(const UINT16 wFIndicatorId, const UINT16 wSIndicatorId);
/*
*
* const UINT16 wIndicatorId id
*
* by lyj 20260105
*/
void SetSigFaultCloseIndicator(const UINT16 wIndicatorId);
/*
*
* const UINT16 wIndicatorId id
*
* by lyj 20260105
*/
void SetSwitchJiChaIndicator(const UINT16 wIndicatorId);
/*
*
* const UINT16 wIndicatorId id
*
* by lyj 20260105
*/
void SetGDoorFaultIndicator(const UINT16 wIndicatorId);
/*
* 线
* const UINT16 wIndicatorId id
*
* by lyj 20260105
*/
void SetRealyHunXianIndicator(const UINT16 wIndicatorId);
/*
*
* const UINT16 wIndicatorId id
*
* by lyj 20260106
*/
void SetYjpIndicator(const UINT16 wIndicatorId);
/*
*
* const UINT16 wIndicatorId id
*
* by lyj 20260106
*/
void SetSCApplyIndicator(const UINT16 wIndicatorId);
/*
*
* const UINT16 wIndicatorId id
*
* by lyj 20260106
*/
void SetSCAllowIndicator(const UINT16 wIndicatorId);
/*
*
* const UINT16 wIndicatorId id
*
* by lyj 20260106
*/
void SetSCOverIndicator(const UINT16 wIndicatorId);
#ifdef __cplusplus
}
@@ -423,7 +423,7 @@ UINT8 GetIndicatorDevId(UINT16 indicatorId)
* >0u: ID
* by cgh 20240910
*/
UINT8 GetIndicatorRelNonReturnId(UINT16 indicatorId)
UINT16 GetIndicatorRelNonReturnId(UINT16 indicatorId)
{
UINT16 wRetVal = CI_ERROR;
@@ -456,4 +456,30 @@ UINT8 GetIndicatorRelNonReturnId(UINT16 indicatorId)
}
return wRetVal;
}
}
/*
* ID获取指示灯虚拟联锁ID
* UINT16 wIndicId ID
* 0u:
* >0u: ID
* BY:lyj 20260105
*/
UINT8 GetIndicBelongRtuId(UINT16 wIndicId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetIndicatorConfigBufIndex(wIndicId); /*获取指示器相关继电器数组下标*/
if (INDICATOR_SUM_MAX > bufIndex)
{
reVal = IndicatorConfigDataStru[bufIndex].chBelongVirCIid;
}
else
{
/*不处理*/
}
return reVal;
}
@@ -29,7 +29,8 @@ typedef struct S_IndicatorConfigDataStruct
UINT8 AvalibleFlag;/*指示灯有效标志位 0x55无效 0xAA进路相关 0xAA继电器相关*/
UINT8 IdSum; /*相关Id数量(配置字段)*/
UINT16 IdBuf[INDICATOR_RELAY_SUM_MAX]; /*相关ID (配置字段)*/
UINT8 BjdDeviceId; /*报警灯设备ID*/
UINT8 BjdDeviceId; /*报警灯设备ID*/
UINT8 chBelongVirCIid; /*所属虚拟联锁ID*/
} IndicatorConfigDataStruct;
/*cgh-合并ECI11.0:OC站表示灯 OC站指一级集中站(CI+OC)的现地工作站、二级集中站(OC)的有岔非集现地工作站,中央联锁工作站*/
@@ -183,7 +184,15 @@ UINT8 GetIndicatorDevId(UINT16 indicatorId);
* >0u: ID
* by cgh 20240910
*/
UINT8 GetIndicatorRelNonReturnId(UINT16 indicatorId);
UINT16 GetIndicatorRelNonReturnId(UINT16 indicatorId);
/*
* ID获取指示灯虚拟联锁ID
* UINT16 wIndicId ID
* 0u:
* >0u: ID
* BY:lyj 20260105
*/
UINT8 GetIndicBelongRtuId(UINT16 wIndicId);
#ifdef __cplusplus
}
@@ -64,7 +64,9 @@
#define INDICATOR_TYPE_SWITCH_JICHA ((UINT8)0x24) /* 道岔挤岔状态 */
#define INDICATOR_TYPE_GD_DAD ((UINT8)0x25) /* 车库门故障报警状态 */
#define INDICATOR_TYPE_XICHEJI_ALLOW_STATE ((UINT8)0x26) /* 非FAO线路同意洗车状态指示灯 */
#define INDICATOR_TYPE_DOWNWASH_ALLOW_PASS_STATE ((UINT8)0x29) /* 降级模式洗车同意通过指示灯 */
#define INDICATOR_TYPE_DOWNWASH_ALLOW_PASS ((UINT8)0x29) /* 降级模式洗车同意通过指示灯 */
#define INDICATOR_TYPE_DOWNWASH_APPLY ((UINT8)0x63) /* 降级模式洗车请求指示灯 */
#define INDICATOR_TYPE_DOWNWASH_PASS_APPLY ((UINT8)0x64) /* 降级模式反向通过请求指示灯 */
#define INDICATOR_TYPE_ATS_CONFIRM_RELAY_INTERFACE ((UINT8)0x27) /*相邻联锁继电接口确认状态指示灯*/
@@ -129,6 +129,9 @@ UINT8 InitAllStaticDataStr(void)
/*声光报警器配置数据结构体*/
chRtn &= CommonMemSet(SGBJConfigDataStru, (UINT32)(SGBJ_SUM_MAX * sizeof(SGBJConfigDataStruct)), 0u, (UINT32)(SGBJ_SUM_MAX * sizeof(SGBJConfigDataStruct)));
/*试灯数据配置结构体*/
chRtn &= CommonMemSet(LightTestButtonConfigDataStru, (UINT32)(LIGHTTESTBUTTON_BUTTON_MAX_NUM * sizeof(LightTestButtonConfigDataStruct)), 0u, (UINT32)(LIGHTTESTBUTTON_BUTTON_MAX_NUM * sizeof(LightTestButtonConfigDataStruct)));
return chRtn;
}
@@ -246,6 +249,7 @@ UINT8 ReadConfigureData(void)
{
; /*不处理*/
}
if (0u == rtnVal)
{
PhysicalSectionCurSum = ReadPhySicalSectionConfigData(LocalCiId, PhysicalSectionConfigDataStru);/*读物理区段配置数据*/
@@ -446,6 +450,13 @@ UINT8 ReadConfigureData(void)
if (0u == rtnVal)
{
IndicatorCurSum = ReadIndicatorConfigData(LocalCiId, IndicatorConfigDataStru); /*读指示灯报警灯配置数据*/
if (-1 == IndicatorCurSum)
{
rtnVal = 20u;/*读取指示灯报警灯配置数据失败*/
debug_infor_printf((const)"ReadIndicatorConfigData fail.");
}
#if 0
includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
if (FUNC_SWITCH_ON == includeVirFlag)
{
@@ -468,15 +479,7 @@ UINT8 ReadConfigureData(void)
}
}
else
{
IndicatorCurSum = ReadIndicatorConfigData(LocalCiId, IndicatorConfigDataStru); /*读指示灯报警灯配置数据*/
if (-1 == IndicatorCurSum)
{
rtnVal = 20u;/*读取指示灯报警灯配置数据失败*/
debug_infor_printf((const)"ReadIndicatorConfigData fail.");
}
}
#endif
}
else
{
@@ -552,7 +555,23 @@ UINT8 ReadConfigureData(void)
{
; /*不处理*/
}
if (0u == rtnVal)
{
LightTestButtonCurSum = ReadLightTestConfigData(LocalCiId, LightTestButtonConfigDataStru); /*读OC试灯按钮配置数据*/
if (-1 == LightTestButtonCurSum)
{
rtnVal = 44u;/*读取OC试灯按钮数据失败*/
debug_infor_printf((const)"\nReadLightTestConfigData fail.\n");
}
else
{
; /*不处理*/
}
}
else
{
; /*不处理*/
}
if (0u == rtnVal)
{
CiToAtsMaskCurSum = ReadCiToAtsMaskConfigData(LocalCiId, CiToAtsMaskConfigDataStru); /*读CI-ATS配置数据*/
@@ -1097,6 +1116,16 @@ UINT8 ReadConfigureData(void)
/*不处理*/
}
if (0u == rtnVal)
{
/*设置试车线与车辆段合设配置*/
g_ret = SetCldAndScxMergeConfig();
if (CI_ERROR == g_ret)
{
debug_infor_printf((const)"SetCldAndScxMergeConfig fail.\r\n");
}
}
}
@@ -1114,7 +1143,6 @@ UINT8 ReadConfigureData(void)
UINT8 DeviceDataManage(void)
{
UINT8 rtValue = 0u;
UINT8 includeVirFlag= GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 reval = CI_ERROR;
/*整理继电器数据*/
if (CI_ERROR == RelayConfigDataManage())
@@ -1238,6 +1266,7 @@ UINT8 DeviceDataManage(void)
{
rtValue = 0u;
}
#if 0
if(FUNC_SWITCH_ON == includeVirFlag)
{
reval = InitVirCIlocalCiIndicatorIdBuf();
@@ -1246,14 +1275,16 @@ UINT8 DeviceDataManage(void)
rtValue = 1u;
}
}
else
#endif
if (0U == rtValue)
{
reval = IndicatorConfigDataManage();
if(CI_ERROR == reval)
if (CI_ERROR == reval)
{
rtValue = 1u;
}
}
if (0U == rtValue)
{
@@ -2055,6 +2086,11 @@ INT8 OcConnectConfigDataToDevStruct(SignalConfigDataStruct* pSignalCfgData, Phys
{
pSwitchCfgData[j].ByPassRelayId = pConnectCfgData[i].OcConnetRelayDataBuf[k].RelayId;
}
/*IBP*/
else if(SWITCH_IBP_TYPE == pConnectCfgData[i].OcConnetRelayDataBuf[k].RelayType)
{
pSwitchCfgData[j].IbpDrvRelayId = pConnectCfgData[i].OcConnetRelayDataBuf[k].DrvRelayId;
}
else
{
/*不做处理*/
@@ -60,6 +60,7 @@
#include "../Route/LongRouteConfigDataManage.h"
#include "../SGBJ/SGBJConfigDataManage.h"
#include "../VirtualDevice/VirtualDevDataManage.h"
#include "LightTestButtonConfigDataManage.h"
extern INT16 trackCheckRes;
extern INT16 g_ret;
+131 -116
View File
@@ -480,6 +480,8 @@ UINT8 InitialProcess(void)
{/*初始化LEU数据*/
(void)InitLEUDataStru();
}
/*初始化设备打印数据*/
(void)RecordDeviceDataLog(CI_ERROR);
@@ -496,6 +498,7 @@ UINT8 InitialProcess(void)
TiocTransCtInit();
return ret;
}
@@ -514,10 +517,8 @@ UINT8 InitialSignalData(void)
UINT16 routeSum = 0u; /*进路总数*/
UINT16 routeId = 0u; /*进路ID*/
UINT8 belongCiId = 0u; /*信号机所属CI的id*/
UINT16 ciToLeuMaskSum = 0u; /*CI-LEU码位总数*/
UINT16 startSignalId = 0u; /*始端信号机ID*/
UINT8 ret = CI_SUCCESS;
UINT8 localCi = 0u;/*本CI编号*/
UINT8 sameLine = SAME_LINE_ERR;/*信号机与本CI是否属于同一线路*/
UINT16 outSecId = 0u;/*信号机外方物理区段*/
@@ -525,11 +526,8 @@ UINT8 InitialSignalData(void)
UINT8 outSecSameLine = SAME_LINE_ERR;/*信号机外方物理区段与本CI是否属于同一线路*/
UINT16 detainBtnRelayId = 0U; /*扣车按钮采集继电器1ID*/
UINT8 wRouteLeadProperty = 0U;
localCi = GetSystemParaLocalCiId();
signalDataSum = GetTotalSignalCurNum(); /*本联锁和相邻联锁发送给本联锁的信号机总数目*/
ciToLeuMaskSum = GetSendMaskSum(CI_SYSTEM_TYPE_LEU);
if (signalDataSum >= SIGNAL_SUM_MAX)
{/*配置数据总数错误*/
@@ -743,15 +741,33 @@ UINT8 InitialWashMachineData(void)
WashMachineDataStru[washMachinelId].PaseWashMachineRequesDrvtState = PASS_WASHMACHINE_DRVREQ_FALSE;
WashMachineDataStru[washMachinelId].WashMachineWorkModeDrvtState = WASHMACHINE_WORKMODE_INVALID_DRV;
WashMachineDataStru[washMachinelId].WashWorkModeRelayDrvCycle = 0U;
WashMachineDataStru[washMachinelId].WashmachineXTACurState = XTA_STATE_RAISE_UP;/*洗车同意按钮当前状态:初始化为抬起*/
WashMachineDataStru[washMachinelId].WashmachineXTAPreState = XTA_STATE_RAISE_UP;/*洗车同意按钮之前状态:初始化为抬起*/
WashMachineDataStru[washMachinelId].WashmachineXTALogicState = XTA_STATE_RAISE_UP;/*洗车同意按钮逻辑状态:初始化为抬起*/
WashMachineDataStru[washMachinelId].WashmachineXTAPressDownCycle = 0u;/*洗车同意按钮按下周期:初始化为0*/
WashMachineDataStru[washMachinelId].WashModeState = XTA_MODE_STATE_NO;/*洗车模式,初始化为OXFF*/
WashMachineDataStru[washMachinelId].chSetWashWorkModeBack = WASH_WORKMODE_BACK_DEFAULT;/*洗车机工作模式反馈,初始化为OX00*/
WashMachineDataStru[washMachinelId].chDownWashAllowState = WASH_COL_STATE_ALLOW_NO;/*降级模式洗车同意状态*/
WashMachineDataStru[washMachinelId].chDownWashAllowPassState = WASH_COL_STATE_ALLOW_PASS_NO;/*降级模式洗车同意通过状态*/
WashMachineDataStru[washMachinelId].chDownWashReqState = WASH_REQ_STATE_ALLOW_NO; /*降级模式洗车请求状态*/
WashMachineDataStru[washMachinelId].dwDownWashReqCycle = 0U; /*降级模式洗车请求周期*/
WashMachineDataStru[washMachinelId].chDownWashPassReqState = WASH_REQ_STATE_ALLOW_NO; /*降级模式反向洗车请求状态*/
WashMachineDataStru[washMachinelId].dwDownWashPassReqCycle = 0U; /*降级模式反向洗车请求周期*/
WashMachineDataStru[washMachinelId].chDownWashAllowColState = WASH_COL_STATE_ALLOW_NO; /*降级模式洗车线洗车同意状态(动态字段:采集)*/
WashMachineDataStru[washMachinelId].chDownDccWashAllowColState = WASH_COL_STATE_ALLOW_NO; /*降级模式DCC洗车同意状态(动态字段:采集)*/
WashMachineDataStru[washMachinelId].chDownWashAllowPassColState = WASH_COL_STATE_ALLOW_NO; /*降级模式洗车线洗车同意反向通过状态(动态字段:采集)*/
WashMachineDataStru[washMachinelId].chDownDccWashAllowPassColState = WASH_COL_STATE_ALLOW_NO; /*降级模式DCC洗车同意反向通过状态(动态字段:采集)*/
WashMachineDataStru[washMachinelId].dwDownWashAllowCycle = 0U; /*降级模式洗车线洗车同意按钮按下起始周期*/
WashMachineDataStru[washMachinelId].dwDownWashDccAllowCycle = 0U; /*降级模式DCC洗车同意按钮按下起始周期*/
WashMachineDataStru[washMachinelId].dwDownWashAllowPassCycle = 0U; /*降级模式洗车线反向通过洗车同意按钮按下起始周期*/
WashMachineDataStru[washMachinelId].dwDownWashDccAllowPassCycle = 0U; /*降级模式DCC反向通过洗车同意按钮按下起始周期*/
WashMachineDataStru[washMachinelId].chDownWashAllowErrState = WASH_BUTTON_STATE_ERR_NO; /*洗车线洗车同意按钮粘连状态*/
WashMachineDataStru[washMachinelId].chDownDccWashAllowErrState = WASH_BUTTON_STATE_ERR_NO; /*DCC洗车同意按钮粘连状态*/
WashMachineDataStru[washMachinelId].chDownWashAllowPassErrState = WASH_BUTTON_STATE_ERR_NO; /*洗车线反向通过同意按钮粘连状态*/
WashMachineDataStru[washMachinelId].chDownDccWashAllowPassErrState = WASH_BUTTON_STATE_ERR_NO; /*DCC反向通过同意按钮粘连状态*/
WashMachineDataStru[washMachinelId].dwDownWashBtVadCycle = 0U; /*降级模式洗车线洗车同意按钮有效周期*/
WashMachineDataStru[washMachinelId].dwDownWashDccBtVadCycle = 0U; /*降级模式DCC洗车同意按钮有效周期*/
WashMachineDataStru[washMachinelId].dwDownWashBtVadPassCycle = 0U; /*降级模式洗车线反向通过洗车同意按钮有效周期*/
WashMachineDataStru[washMachinelId].dwDownWashDccBtVadPassCycle = 0U; /*降级模式DCC反向通过洗车同意按钮有效周期*/
}
ret = CI_SUCCESS;
return ret;
@@ -1337,6 +1353,7 @@ UINT8 InitialPsdData(void)
UINT16 wCleFarePCBButRelayId = 0U;/*清客确认箱关门按钮继电器ID*/
UINT16 wPsdButtenRelayId2 = 0U;
psdDataSum = GetTotalPsdCurNum();/*本联锁和相邻联锁发送给本联锁的Psd总数目*/
UINT16 wibpButtonRelayId = 0U; /*IBP盘发车继电器ID*/
/*数值大于等于PSD_SUM_MAX会返回0*/
/*屏蔽门所属联锁ID?待处理?*/
@@ -1407,6 +1424,7 @@ UINT8 InitialPsdData(void)
PsdDataStru[psdId].StartDetectionCycNum = 0u;
PsdDataStru[psdId].StartDetectionState = JXTC_START_DETECTION_NO;
PsdDataStru[psdId].StopDetectionState = JXTC_STOP_DETECTION_YES;
PsdDataStru[psdId].StopDetectionCycNum = 0u;
PsdDataStru[psdId].VOBCDoorState = PSD_DOOR_CLOSEDANDLOCKED_INVALID;
PsdDataStru[psdId].PCBPressCycNum = 0u;
PsdDataStru[psdId].POBPressCycNum = 0u;
@@ -1424,6 +1442,7 @@ UINT8 InitialPsdData(void)
PsdDataStru[psdId].steadyLightFlag = QK_BUTTON_STEADY_LIGHT_NO;
PsdDataStru[psdId].dwCleFarePCBPressCycNum = 0U;
PsdDataStru[psdId].IBPPressCycNum = 0U;
/*清客确认箱PCB按钮状态初始化处理*/
wCleFarePCBButRelayId = GetCleFarePCBButRelayId(psdId);
if ((0u == wCleFarePCBButRelayId) || (UINT16_MAX == wCleFarePCBButRelayId))
@@ -1455,6 +1474,8 @@ UINT8 InitialPsdData(void)
PsdDataStru[psdId].cPsdExceptOpenState = PSD_EXCEPT_OPEN_YES; /*初始化为PSD异常打开*/
PsdDataStru[psdId].dwPsdRelayDownCycNum = 0U; /*PSD门关继电器落下起始周期*/
PsdDataStru[psdId].JXTCMutualLockFaultState = JXTC_MUTUALLOCKFAULT_NO;
PsdDataStru[psdId].JXTCMutualLockStartCycNum = 0u;
/*初始化车车结构体成员*/
PsdDataStruCC[psdId].PsdId = psdId;
@@ -1462,6 +1483,16 @@ UINT8 InitialPsdData(void)
PsdDataStruCC[psdId].SrcVobcId = 0U;
PsdDataStruCC[psdId].PsdCmd = PSD_DEFAULT_CONTROL_CMD;
PsdDataStruCC[psdId].CmdSetCycle = 0U;
wibpButtonRelayId = GetIbpConfmRelayId(psdId);
if ((0u == wibpButtonRelayId) || (UINT16_MAX == wibpButtonRelayId))
{
PsdDataStru[psdId].ibpButtonState = PLATFORM_DEPAR_BUTTON_STATE_INVALID;
}
else
{
PsdDataStru[psdId].ibpButtonState = PSD_RELATED_BUTTON_STATE_DEFAULT; /*IBP盘发车按钮状态初始化*/
}
}
reVal = CI_SUCCESS;
return reVal;
@@ -1569,6 +1600,7 @@ UINT8 InitialOverlapData(void)
OverlapDataStru[overlapId].cProSwitchCheckResultFlag = PROSWITCH_CHECK_RESULT_DEFAULT;
OverlapDataStru[overlapId].cProSwitchCheckStartFlag = PROSWITCH_CHECK_START_INVALID;
OverlapDataStru[overlapId].chPreLaborUnlockState = PRO_PRE_LABOR_UNLOCK_STATE_NO;
OverlapDataStru[overlapId].dwAtsLastTimeLockCyc = 0U;
}
}
@@ -1662,6 +1694,7 @@ UINT8 InitialRouteData(void)
RouteDataStru[routeId].chRoutCouplinkFlag = ROUTE_COUPLINK_FLAG_NO; /*初始化联挂标志无效*/
RouteDataStru[routeId].chCouplinkSuccessFlag = ROUTE_COUPLINK_RESULT_NOT; /*初始化联挂成功标志为未收到*/
RouteDataStru[routeId].chCouplinkErrorFlag = ROUTE_COUPLINK_RESULT_NOT; /*初始化联挂失败标志为未收到*/
RouteDataStru[routeId].dwRouteIdleCycNum = 0U; /*进路空闲起始周期号*/
/*初始化车车结构体成员*/
RouteDataStruCC[routeId].RouteId = routeId;
@@ -1886,46 +1919,23 @@ UINT8 InitialIndicatorStateData(void)
UINT8 j = 0u;
UINT8 virCINum = 0u;
UINT8 virCIid = 0u;
UINT8 includeVirFlag= GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
if(FUNC_SWITCH_ON == includeVirFlag)
{
/*虚拟联锁兼容*/
virCINum = GetVirtualCINum();
for(j=0u;(j < virCINum)&&(j<VIRTUAL_CI_MAX);j++)
{
virCIid = GetVirtualCIid(j);
configStruSum = (UINT8)GetVirCIIndicatorConfigDataNum(virCIid);
for(kk = 0u;kk<configStruSum;kk++)
{
indicatorId = (UINT8)GetVirCIlocalCiIndicatorId(virCIid,kk);
if((VIRTUAL_CI_INDICATOR_SUM_MAX > indicatorId))
{
g_VirtualCIStructData.virtualCi[j].IndicatorData[indicatorId].IndicatorId = indicatorId;
g_VirtualCIStructData.virtualCi[j].IndicatorData[indicatorId].IndicatorState = 0u;
}
}
}
configStruSum = GetIndicatorCurSum();
if (configStruSum >= INDICATOR_SUM_MAX)
{/*配置数据总数错误*/
reVal = CI_ERROR;
}
else
{
configStruSum = GetIndicatorCurSum();
if (configStruSum >= INDICATOR_SUM_MAX)
{/*配置数据总数错误*/
reVal = CI_ERROR;
}
else
for (ii = 0u; ii < configStruSum; ii++)
{
for (ii = 0u; ii < configStruSum; ii++)
{
indicatorId = GetIndicatorId(ii);
indicatorId = GetIndicatorId(ii);
IndicatorDataStru[indicatorId].IndicatorId = indicatorId;
IndicatorDataStru[indicatorId].IndicatorState = 0u;
}
IndicatorDataStru[indicatorId].IndicatorId = indicatorId;
IndicatorDataStru[indicatorId].IndicatorState = 0u;
}
}
return reVal;
@@ -2124,9 +2134,6 @@ void ResetDynamicState(const UINT8 ciId)
UINT8 funcSwitchSupportRelayInterface = GetCiFunctionSwitchConfig(FUNC_SWITCH_USE_RELAY_INTERFACE_BETWEEN_NEIGHBOURCI);
UINT8 localCi = GetSystemParaLocalCiId();/*本机联锁*/
UINT8 confirmRelayInterfaceFlag = GetCiCiRelayInterfConfirmFlag();/*继电接口确认状态*/
UINT16 wCfpSum = 0u;
UINT16 wCfpId = 0u;
UINT16 wCfpOtherCiid = 0U; /*分界点关联的相邻联锁ID*/
UINT8 chOverlapCiId = 0u;
UINT32 dwCurCyc = Get2oo2CurCycleNum();
UINT8 chSearchCiId = 0U;/*查询到的联锁ID*/
@@ -2207,7 +2214,6 @@ void ResetDynamicState(const UINT8 ciId)
PhysicalSectionDataStru[ii].chABLTrainFlag = PHYSICAL_SECTION_ABLOCCUPY_YES;
PhysicalSectionDataStru[ii].chPreABLTrainFlag = PHYSICAL_SECTION_ABLOCCUPY_NO;
PhysicalSectionDataStru[ii].dwAblTagSetCyc = dwCurCyc;
SetPhySecUTTrainFlag(PhysicalSectionDataStru[ii].PhysicalSectionId, PHYSICAL_AXIS_UT_YES); /*物理区段坏车占用标志设置*/
if ((localCi !=phyBelongCi) && (TRANSMIT_STATE_BAD == commState) &&
(localCi ==phySecRepGjBelongCi)&&
@@ -2289,12 +2295,6 @@ void ResetDynamicState(const UINT8 ciId)
LogicSectionDataStru[logicSectionId].LogLockState = LOG_SECTION_LOCK_EXCEPT;
}
}
if (LOG_SECTION_LOGLOCK_NORMAL == LogicSectionDataStruCC[logicSectionId].LogSecLogLockState)
{
LogicSectionDataStruCC[logicSectionId].LogSecLogLockState = LOG_SECTION_LOGLOCK_EXCEPT; /*与相邻联锁断通信,将相邻联锁逻辑正常锁闭的逻辑区段置为逻辑异常锁闭*/
}
if ((localCi !=phyBelongCi) && (TRANSMIT_STATE_BAD == commState) &&
(localCi ==phySecRepGjBelongCi)&&
(CICI_RELAY_INTERFACE_CONFIRM_YES == confirmRelayInterfaceFlag)&&
@@ -2518,6 +2518,7 @@ void ResetDynamicState(const UINT8 ciId)
}
}
/*重置非本联锁spks动态数据*/
for (ii = 1u; ii < SPKS_SUM_MAX; ii ++)
{
devId = (ii);
@@ -2583,6 +2584,7 @@ void ResetDynamicState(const UINT8 ciId)
OverlapDataStru[devId].cProSwitchCheckResultFlag = PROSWITCH_CHECK_RESULT_INVALID;
OverlapDataStru[devId].cProSwitchCheckStartFlag = PROSWITCH_CHECK_START_INVALID;
OverlapDataStru[devId].chPreLaborUnlockState = PRO_PRE_LABOR_UNLOCK_STATE_NO;
OverlapDataStru[devId].dwAtsLastTimeLockCyc = 0U;
}
else if ((chOverlapCiId == localCi) && (devId > 0U) && (devId < OVERLAP_SUM_MAX))
{
@@ -2624,6 +2626,81 @@ void ResetDynamicState(const UINT8 ciId)
}
}
/*重置自动通过进路数据*/
/*cgh-合并CID-2539-7*/
for (ii = 1u; ii < AUTO_ROUTE_SUM_MAX; ii++)
{
devId = ii;
belongCiId = GetAutoRouteBelongCiId(devId);
if (belongCiId == ciId)
{
/*非本联锁重置状态*/
AutoRouteDataStru[devId].AutoRouteSetFlag = AUTO_ROUTE_SET_NO; /*自动进路未办理*/
}
}
}
/*
* Rc通信中断动态数据
* const UINT8 ciId, ID
* void
*/
void ResetDynamicRcState(const UINT8 ciId)
{
UINT16 ii = 0u;
UINT16 logicSectionDataSum = 0u; /*逻辑区段总数*/
UINT16 logicSectionId = 0u; /*逻辑区段ID*/
UINT8 belongCiId = 0u;
/*相邻联锁是否支持继电接口*/
UINT16 wCfpSum = 0u;
UINT16 wCfpId = 0u;
UINT16 wCfpOtherCiid = 0U; /*分界点关联的相邻联锁ID*/
UINT8 cPhySecCurMerOccState = 0U; /*物理区段融合占用状态*/
/*重置非本联锁物理区段动态数据*/
for (ii = 1U; ii < PHYSICAL_SECTION_SUM_MAX; ii++)
{
belongCiId = GetPhySecBelongCiId(ii);
if (belongCiId == ciId)
{
cPhySecCurMerOccState = GetPhySecCurMergeState(ii);
if (SECTION_OCCUPY_YES == cPhySecCurMerOccState)
{
SetPhySecUTTrainFlag(PhysicalSectionDataStru[ii].PhysicalSectionId, PHYSICAL_AXIS_UT_YES); /*物理区段坏车占用标志设置*/
}
else
{
/*当前空闲,不设置坏车占用*/
}
}
else
{
/* 不是指定联锁,则不处理 */
}
}
logicSectionDataSum = GetTotalLogSecCurNum();/*本联锁和相邻联锁发送给本联锁的逻辑区段总数目*/
/*重置非本联锁逻辑区段动态数据*/
for (ii = 0u; ii < logicSectionDataSum; ii++)
{
logicSectionId = GetLogicSecId(ii);/*获取配置文件中该索引下的逻辑区段ID*/
belongCiId = GetLogSecBelongCiId(logicSectionId);
/*与相邻联锁断通信,将相邻联锁逻辑正常锁闭的逻辑区段置为逻辑异常锁闭*/
if (belongCiId == ciId)
{
if (LOG_SECTION_LOGLOCK_NORMAL == LogicSectionDataStruCC[logicSectionId].LogSecLogLockState)
{
LogicSectionDataStruCC[logicSectionId].LogSecLogLockState = LOG_SECTION_LOGLOCK_EXCEPT;
}
}
else
{
/*不做处理*/
}
}
/* 重置相邻联锁发来的包络信息 */
wCfpSum = GetCfpSum();
for (ii = 0u; ii < wCfpSum; ii++)
@@ -2639,20 +2716,7 @@ void ResetDynamicState(const UINT8 ciId)
;
}
}
/*重置自动通过进路数据*/
/*cgh-合并CID-2539-7*/
for (ii = 1u; ii < AUTO_ROUTE_SUM_MAX; ii++)
{
devId = ii;
belongCiId = GetAutoRouteBelongCiId(devId);
if (belongCiId == ciId)
{
/*非本联锁重置状态*/
AutoRouteDataStru[devId].AutoRouteSetFlag = AUTO_ROUTE_SET_NO; /*自动进路未办理*/
}
}
}
/*
* ID关联
* void
@@ -3292,56 +3356,6 @@ UINT8 InitialRtnIndicStaData(void)
; /*返回失败*/
}
if (CI_SUCCESS == chReval)
{
for (jj = 0; jj < g_VirtualCIStructData.virtualCiNum; jj++)
{
/*给虚拟联锁的指示灯设备ID赋值*/
for (kk = 0U; kk < g_VirtualCIStructData.virtualCi[jj].IndicatorConfigDataNum; kk++)
{
indicatorType = g_VirtualCIStructData.virtualCi[jj].IndicatorConfigData[kk].IndicatorType;
if ((INDICATOR_TYPE_EXPRESS_RETURN == indicatorType) && (RTNINDICATOR_SUM_MAX > rtnIndicatorSum))
{
g_VirtualCIStructData.virtualCi[jj].VirCIRtnIndicatorStaData[rtnIndicatorSum].VirCiIndicatorDevId = g_VirtualCIStructData.virtualCi[jj].IndicatorConfigData[kk].BjdDeviceId;
rtnIndicatorSum++;
}
else
{
;
}
if (RTNINDICATOR_SUM_MAX <= rtnIndicatorSum)
{
/*一个虚拟联锁集中区最大只有两个无人折返指示灯ID*/
break;
}
else
{
;
}
}
/*将每个虚拟联锁包含的无人折返指示灯状态初始化为无效*/
for (kk = 0U; kk < RTNINDICATOR_SUM_MAX; kk++)
{
if (RTNINDICATOR_SUM_MAX > rtnIndicatorSum)
{/*当本集中区没有无人折返指示灯设备只有一个时,其余数据初始化为0*/
g_VirtualCIStructData.virtualCi[jj].VirCIRtnIndicatorStaData[rtnIndicatorSum].VirCiIndicatorDevId = 0U;
rtnIndicatorSum++;
}
else
{
;
}
g_VirtualCIStructData.virtualCi[jj].VirCIRtnIndicatorStaData[kk].VirCiFlashState = VOBCTOCIAUTORTN_INDICT_MASK_INVALID;
g_VirtualCIStructData.virtualCi[jj].VirCIRtnIndicatorStaData[kk].VirCiSteadyState = VOBCTOCIAUTORTN_INDICT_MASK_INVALID;
}
}
}
else
{
;
}
return chReval;
}
@@ -3410,7 +3424,7 @@ void ResetLocalRcDynamicState(void)
for (jj = 0U; jj < wAxisSecNum; jj++)
{
wAxisSecId = GetAxisSecId(jj);
cBelongCiId = GetAxisBelongTioc(wAxisSecId);
cBelongCiId = (UINT8)GetAxisBelongTioc(wAxisSecId);
if (cBelongCiId == cLocalCiId)
{
SetAxisSecArbStateCC(wAxisSecId, AXIS_SECTION_ARB_NO); /*设置RC计轴区段ARB状态为未ARB*/
@@ -3609,4 +3623,5 @@ void ResetDevStateProcess(void)
(void)InitLEUDataStru();
TiocTransCtInit();
}
}
+8 -1
View File
@@ -243,7 +243,12 @@ UINT8 InitialPhySecIdBufOfOtherCi(void);
* void
*/
void ResetDynamicState(const UINT8 ciId);
/*
* Rc通信中断动态数据
* const UINT8 ciId, ID
* void
*/
void ResetDynamicRcState(const UINT8 ciId);
/*
*
@@ -346,6 +351,8 @@ void ResetLocalRcDynamicState(void);
*/
void ResetDevStateProcess(void);
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,129 @@
/********************************************************
*
* LightTestButtonConfigDataManage.c
*
* 2025-12-09
*
*
*
*
********************************************************/
#include "LightTestButtonConfigDataManage.h"
LightTestButtonConfigDataStruct LightTestButtonConfigDataStru[LIGHTTESTBUTTON_BUTTON_MAX_NUM] = {0}; /*定义试灯按钮数据配置结构体*/
INT16 LightTestButtonCurSum = 0; /*试灯按钮当前总数*/
/*
*
* void
* 0:
* >0:
*/
UINT16 GetLightTestButtonCurSum(void)
{
UINT16 retVal = 0u;
if (LIGHTTESTBUTTON_BUTTON_MAX_NUM <= ((UINT16)LightTestButtonCurSum))
{
retVal = LIGHTTESTBUTTON_BUTTON_MAX_NUM;
}
else
{
retVal = (UINT16)LightTestButtonCurSum;
}
return retVal;
}
/*
* ID
* UINT16 index
* UINT16 retVal ID
*/
UINT16 GetLightTestButtonId(UINT16 index)
{
UINT16 retVal = 0u;
UINT16 lightTestButtonCurSum = GetLightTestButtonCurSum();
if (index < lightTestButtonCurSum)
{
retVal = LightTestButtonConfigDataStru[index].LightTestButtonId;
}
else
{
}
return retVal;
}
/*
* ID对应的继电器数据
* UINT16 lightTestButtonId ID
*
LightTestButtonConfigDataStruct *
*/
LightTestButtonConfigDataStruct *GetLightTestButtonConfigData(UINT16 lightTestButtonId)
{
LightTestButtonConfigDataStruct *retVal = NULL;
UINT16 i = 0u;
UINT16 lightTestButtonCurSum = GetLightTestButtonCurSum();
for (i = 0u; i < lightTestButtonCurSum; i++)
{
if (lightTestButtonId == LightTestButtonConfigDataStru[i].LightTestButtonId)
{
retVal = &LightTestButtonConfigDataStru[i];
break;
}
else
{
}
}
return retVal;
}
/*
* ID对应继电器的总数量
* UINT16 lightTestButtonId ID
* UINT16 lightTestButtonRelayNum
*/
UINT16 GetLightTestButtonRelayNum(UINT16 lightTestButtonId)
{
UINT16 lightTestButtonRelayNum = 0u;
LightTestButtonConfigDataStruct *lightTestButtonConfigData = GetLightTestButtonConfigData(lightTestButtonId);
if (NULL != lightTestButtonConfigData)
{
lightTestButtonRelayNum = lightTestButtonConfigData->LightTestButtonRelayNum;
}
else
{
; /* 不处理 */
}
return lightTestButtonRelayNum;
}
/*
* ID对应继电器ID
* UINT16 lightTestButtonId ID
* UINT16 index
* UINT16 lightTestButtonRelayId ID
*/
UINT16 GetLightTestButtonRelayId(UINT16 lightTestButtonId, UINT16 index)
{
UINT16 lightTestButtonRelayId = 0u;
LightTestButtonConfigDataStruct *lightTestButtonConfigData = GetLightTestButtonConfigData(lightTestButtonId);
if (NULL != lightTestButtonConfigData)
{
if (index < lightTestButtonConfigData->LightTestButtonRelayNum)
{
lightTestButtonRelayId = lightTestButtonConfigData->LightRelayId[index];
}
else
{
; /* 不处理 */
}
}
else
{
; /* 不处理 */
}
return lightTestButtonRelayId;
}
@@ -0,0 +1,80 @@
/********************************************************
*
* LightTestButtonConfigDataManage.h
*
* 2025-12-09
*
*
*
* 使
*
*
********************************************************/
#ifndef _LIGHTTESTBUTTON_CONFIG_DATA_MANAGE_H_
#define _LIGHTTESTBUTTON_CONFIG_DATA_MANAGE_H_
#include "LightTestButtonDefine.h"
typedef struct S_LightTestButtonConfigDataStruct
{
UINT16 LightTestButtonId; /* 试灯按钮ID (配置字段) */
UINT16 BelongOcId; /* 所属OC ID (配置字段) */
UINT8 LightTestButtonType; /* 试灯按钮类型 (配置字段) */
UINT16 LightTestButtonRelayNum; /* 试灯表示灯继电器数量 */
UINT16 LightRelayId[LIGHTTESTBUTTON_LIGHT_SUPPORT_MAX_NUM]; /* 试灯表示灯继电器ID数组 */
}LightTestButtonConfigDataStruct;
extern LightTestButtonConfigDataStruct LightTestButtonConfigDataStru[LIGHTTESTBUTTON_BUTTON_MAX_NUM]; /*定义试灯按钮数据配置结构体*/
extern INT16 LightTestButtonCurSum; /*试灯按钮当前总数*/
#ifdef __cplusplus
extern "C" {
#endif
/*
*
* void
* 0:
* >0:
*/
UINT16 GetLightTestButtonCurSum(void);
/*
* ID
* UINT16 index
* UINT16 retVal ID
*/
UINT16 GetLightTestButtonId(UINT16 index);
/*
* ID对应的继电器数据
* UINT16 lightTestButtonId ID
*
LightTestButtonConfigDataStruct *
*/
LightTestButtonConfigDataStruct *GetLightTestButtonConfigData(UINT16 lightTestButtonId);
/*
* ID对应继电器的总数量
* UINT16 lightTestButtonId ID
* UINT16 lightTestButtonRelayNum
*/
UINT16 GetLightTestButtonRelayNum(UINT16 lightTestButtonId);
/*
* ID对应继电器ID
* UINT16 lightTestButtonId ID
* UINT16 index
* UINT16 lightTestButtonRelayId ID
*/
UINT16 GetLightTestButtonRelayId(UINT16 lightTestButtonId, UINT16 index);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,63 @@
/********************************************************
*
* LightTestButtonDataManage.c
*
* 2025-12-09
*
*
*
*
********************************************************/
#include "LightTestButtonDataManage.h"
/*
*
* void
* void
*/
void LightTestButtonDataManageProc(void)
{
UINT16 i = 0u; /*循环变量*/
UINT16 j = 0u; /*循环变量*/
UINT16 lightTestButtonId = 0u; /* 试灯按钮ID */
UINT16 lightTestButtonRelayNum = 0u; /* 试灯按钮ID数量 */
UINT16 lightRelayId = 0u; /* 试灯表示灯继电器ID */
UINT16 ligthtRelatNum = 0u; /* 试灯表示灯继电器数量 */
UINT8 lightTestButtonState = RELAY_STATE_DOWN; /*试灯按钮状态*/
lightTestButtonRelayNum = GetLightTestButtonCurSum(); /*获取试灯按钮总数量*/
for(i = 0u; i < lightTestButtonRelayNum; i++)
{
/* 获取对应试灯按钮ID*/
lightTestButtonId = GetLightTestButtonId(i);
/*获取试灯按钮继电器采集状态*/
lightTestButtonState = GetRelayCollState(lightTestButtonId);
if(RELAY_STATE_UP == lightTestButtonState) /*试灯按钮按下*/
{
/* 试灯表示灯继电器数量*/
ligthtRelatNum = GetLightTestButtonRelayNum(lightTestButtonId);
for(j = 0u; j < ligthtRelatNum; j++)
{
/* 获取对应试灯表示灯继电器ID*/
lightRelayId = GetLightTestButtonRelayId(lightTestButtonId,j);
/*设置试灯表示灯继电器吸起*/
(void)SetRelayDriveState(lightRelayId, RELAY_DRIVE_STATE_UP);
}
}
else if(RELAY_STATE_DOWN == lightTestButtonState) /*试灯按钮未按下*/
{
/* 不处理即可 */
}
else
{
/* 不处理 */
}
}
}
@@ -0,0 +1,42 @@
/********************************************************
* LightTestButtonDataManage.h
*
* 2025-12-09
*
*
*
* 使
*
*
********************************************************/
#ifndef _LIGHTTEST_BUTTON_DATA_MANAGE_H_
#define _LIGHTTEST_BUTTON_DATA_MANAGE_H_
#include "LightTestButtonDefine.h"
#include "LightTestButtonConfigDataManage.h"
#include "RelayDefine.h"
#include "RelayDataManage.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
*
* void
* void
*/
void LightTestButtonDataManageProc(void);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,33 @@
/********************************************************
*
* LightTestButtonDefine.h
*
* 2025-12-09
*
*
*
* 使
*
*
********************************************************/
#ifndef _LIGHTTESTBUTTON_DEFINE_H_
#define _LIGHTTESTBUTTON_DEFINE_H_
#include "CommonTypes.h"
/* 试灯表示灯最大数量 */
#define LIGHTTESTBUTTON_LIGHT_MAX_NUM ((UINT8)13U)
/* 试灯表示灯支持最大数 */
#define LIGHTTESTBUTTON_LIGHT_SUPPORT_MAX_NUM ((UINT8)39U)
/* 试灯按钮可配置最大数量 */
#define LIGHTTESTBUTTON_BUTTON_MAX_NUM ((UINT16)70U)
/* 武汉新港OC采集试灯按钮类型 */
#define LIGHTTESTBUTTON_TYPE_XINGANG ((UINT8)0xaaU)
#endif
+63 -23
View File
@@ -833,6 +833,11 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
outStringLength += 4u;
LongToChar(pNewEsbData[deviceId].EsbCutErrTriggerPressCycNum, &outString[outStringLength]); /*紧急关闭旁路按钮误触发按下周期*/
outStringLength += 4U;
outString[outStringLength] = pNewEsbData[deviceId].cOnePlatEsbState;/*同站紧急按钮激活状态:0x55-未激活,0xAA-激活*/
outStringLength++;
outString[outStringLength] = pNewEsbData[deviceId].cOnePlatEsbCutState;/*同站紧急旁路按钮激活状态:0x55-未激活,0xAA-激活*/
outStringLength++;
}
}
else
@@ -1490,18 +1495,46 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
outString[outStringLength++] = newWashMachineData[deviceId].PauseTrainWashRequestDrvState;/*暂停洗车请求驱动状态(动态字段:驱动)*/
outString[outStringLength++] = newWashMachineData[deviceId].PaseWashMachineRequesDrvtState;/*通过洗车机请求驱动状态(动态字段:驱动)*/
outString[outStringLength++] = newWashMachineData[deviceId].WashmachineXTACurState;/*洗车同意按钮当前状态*/
outString[outStringLength++] = newWashMachineData[deviceId].WashmachineXTAPreState;/*洗车同意按钮上周期状态*/
outString[outStringLength++] = newWashMachineData[deviceId].WashmachineXTALogicState;/*洗车机按钮逻辑状态*/
LongToChar(newWashMachineData[deviceId].WashmachineXTAPressDownCycle,&outString[outStringLength]);/*洗车机洗车同意按钮按下起始周期*/
outStringLength += 4u;
outString[outStringLength++] = newWashMachineData[deviceId].WashMachineWorkModeDrvtState;/*洗车机洗车模式驱动状态(动态字段:驱动)*/
outString[outStringLength++] = newWashMachineData[deviceId].WashModeState;/*洗车机洗车模式采集状态*/
outString[outStringLength++] = newWashMachineData[deviceId].chSetWashWorkModeBack;/*设置洗车机工作模式反馈*/
outString[outStringLength++] = newWashMachineData[deviceId].chDownWashAllowState;/*降级模式洗车同意状态*/
outString[outStringLength++] = newWashMachineData[deviceId].chDownWashAllowPassState;/*降级模式洗车同意通过状态*/
LongToChar(newWashMachineData[deviceId].WashWorkModeRelayDrvCycle, &outString[outStringLength]);/*洗车模式继电器驱动起始周期号*/
outStringLength += 4u;
outString[outStringLength++] = newWashMachineData[deviceId].chDownWashAllowState;/**降级模式洗车同意状态(动态字段:融合)*/
outString[outStringLength++] = newWashMachineData[deviceId].chDownWashAllowPassState;/*降级模式洗车同意通过状态(动态字段:融合)*/
outString[outStringLength++] = newWashMachineData[deviceId].chDownWashReqState;/*降级模式洗车请求状态*/
LongToChar(newWashMachineData[deviceId].dwDownWashReqCycle, &outString[outStringLength]);/*降级模式洗车请求周期*/
outStringLength += 4u;
outString[outStringLength++] = newWashMachineData[deviceId].chDownWashPassReqState;/*降级模式反向洗车请求状态*/
LongToChar(newWashMachineData[deviceId].dwDownWashPassReqCycle, &outString[outStringLength]);/*降级模式反向洗车请求周期*/
outStringLength += 4u;
outString[outStringLength++] = newWashMachineData[deviceId].chDownWashAllowColState;/*降级模式洗车线洗车同意状态*/
LongToChar(newWashMachineData[deviceId].dwDownWashAllowCycle, &outString[outStringLength]);/*降级模式洗车线洗车同意按钮按下起始周期*/
outStringLength += 4u;
LongToChar(newWashMachineData[deviceId].dwDownWashBtVadCycle, &outString[outStringLength]);/*降级模式洗车线洗车同意按钮有效周期*/
outStringLength += 4u;
outString[outStringLength++] = newWashMachineData[deviceId].chDownDccWashAllowColState;/*降级模式DCC洗车同意状态*/
LongToChar(newWashMachineData[deviceId].dwDownWashDccAllowCycle, &outString[outStringLength]);/*降级模式DCC洗车同意按钮按下起始周期*/
outStringLength += 4u;
LongToChar(newWashMachineData[deviceId].dwDownWashDccBtVadCycle, &outString[outStringLength]);/*降级模式DCC洗车同意按钮有效周期*/
outStringLength += 4u;
outString[outStringLength++] = newWashMachineData[deviceId].chDownWashAllowErrState;/*降级模式洗车线洗车同意粘连状态*/
outString[outStringLength++] = newWashMachineData[deviceId].chDownDccWashAllowErrState;/*降级模式DCC洗车同意粘连状态*/
outString[outStringLength++] = newWashMachineData[deviceId].chDownWashAllowPassColState;/*降级模式洗车线洗车同意反向通过状态*/
LongToChar(newWashMachineData[deviceId].dwDownWashAllowPassCycle, &outString[outStringLength]);/*降级模式洗车线反向通过洗车同意按钮按下起始周期*/
outStringLength += 4u;
LongToChar(newWashMachineData[deviceId].dwDownWashBtVadPassCycle, &outString[outStringLength]);/*降级模式洗车线反向通过洗车同意按钮有效周期*/
outStringLength += 4u;
outString[outStringLength++] = newWashMachineData[deviceId].chDownDccWashAllowPassColState;/*降级模式DCC洗车同意反向通过状态*/
LongToChar(newWashMachineData[deviceId].dwDownWashDccAllowPassCycle, &outString[outStringLength]);/*降级模式DCC反向通过洗车同意按钮按下起始周期*/
outStringLength += 4u;
LongToChar(newWashMachineData[deviceId].dwDownWashDccBtVadPassCycle, &outString[outStringLength]);/*降级模式DCC反向通过洗车同意按钮有效周期*/
outStringLength += 4u;
outString[outStringLength++] = newWashMachineData[deviceId].chDownWashAllowPassErrState;/*降级模式洗车线洗车同意反向通过粘连状态*/
outString[outStringLength++] = newWashMachineData[deviceId].chDownDccWashAllowPassErrState;/*降级模式DCC洗车同意反向通过粘连状态*/
}
}
@@ -1595,6 +1628,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
outStringLength += 4u;
outString[outStringLength++] = newPsdData[deviceId].StartDetectionState;/*启动探测状态*/
outString[outStringLength++] = newPsdData[deviceId].StopDetectionState; /*停止探测状态*/
LongToChar(newPsdData[deviceId].StopDetectionCycNum,&outString[outStringLength]);/*停止探测周期*/
outStringLength += 4u;
outString[outStringLength++] = newPsdData[deviceId].VOBCDoorState; /*VOBC车门状态*/
LongToChar(newPsdData[deviceId].PCBPressCycNum,&outString[outStringLength]);/*PCB按下起始周期*/
outStringLength += 4u;
@@ -1624,6 +1659,14 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
outStringLength++;
LongToChar(newPsdData[deviceId].dwPsdRelayDownCycNum, &outString[outStringLength]); /*PSD门关继电器落下起始周期*/
outStringLength += 4U;
outString[outStringLength] = newPsdData[deviceId].JXTCMutualLockFaultState; /*间隙探测旁路按钮故障状态*/
outStringLength++;
LongToChar(newPsdData[deviceId].JXTCMutualLockStartCycNum, &outString[outStringLength]); /*间隙探测旁路按钮按压起始周期*/
outStringLength += 4U;
outString[outStringLength++] = newPsdData[deviceId].ibpButtonState;/*IBP盘发车按钮状态*/
LongToChar(newPsdData[deviceId].IBPPressCycNum, &outString[outStringLength]); /*IBP盘发车按钮按下周期*/
outStringLength += 4U;
}
}
else
@@ -1667,14 +1710,14 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
deviceId = GetGaragedoorId(ii);
comparaResult = DeviceCompara((UINT8*)(&Record_GaragedoorDataStru[deviceId]), (UINT16)sizeof(GaragedoorDataStruct),
(UINT8*)(&newGaragedoorData[deviceId]), (UINT16)sizeof(GaragedoorDataStruct));
comparaResult += DeviceCompara((UINT8*)(&Record_GaragedoorDataStruCC[deviceId]), (UINT16)sizeof(GaragedoorDataStructCC),
comparaResultCC = DeviceCompara((UINT8*)(&Record_GaragedoorDataStruCC[deviceId]), (UINT16)sizeof(GaragedoorDataStructCC),
(UINT8*)(&pGaragedoorDataCC[deviceId]), (UINT16)sizeof(GaragedoorDataStructCC));
if (0u==comparaResult)
if ((0U == comparaResult) && (0U == comparaResultCC))
{/*比较数据一致*/
}
else if (1u==comparaResult )
else if ((1U == comparaResult) || (1U == comparaResultCC))
{/*比较数据不一致*/
if (CI_ERROR==Flag)
@@ -1746,14 +1789,14 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
deviceId = GetFloodGateId(ii);
comparaResult = DeviceCompara((UINT8*)(&Record_FloodGateDataStru[deviceId]), (UINT16)sizeof(FloodGateDataStruct),
(UINT8*)(&pNewFloodGateData[deviceId]), (UINT16)sizeof(FloodGateDataStruct));
comparaResult += DeviceCompara((UINT8*)(&Record_FloodGateDataStruCC[deviceId]), (UINT16)sizeof(FloodGateDataStructCC),
comparaResultCC = DeviceCompara((UINT8*)(&Record_FloodGateDataStruCC[deviceId]), (UINT16)sizeof(FloodGateDataStructCC),
(UINT8*)(&pNewFloodGateDataCC[deviceId]), (UINT16)sizeof(FloodGateDataStructCC));
if (0u==comparaResult )
if ((0U == comparaResult) && (0U == comparaResultCC))
{/*比较数据一致*/
}
else if (1u==comparaResult )
else if ((1U == comparaResult) || (1U == comparaResultCC))
{/*比较数据不一致*/
if (CI_ERROR==Flag )
@@ -1829,14 +1872,14 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
deviceId = GetOverlapId(ii);
comparaResult = DeviceCompara((UINT8*)(&Record_OverlapDataStru[deviceId]), (UINT16)sizeof(OverlapDataStruct),
(UINT8*)(&newOverlapData[deviceId]), (UINT16)sizeof(OverlapDataStruct));
comparaResult += DeviceCompara((UINT8*)(&Record_OverlapDataStruCC[deviceId]), (UINT16)sizeof(OverlapDataStructCC),
comparaResultCC = DeviceCompara((UINT8*)(&Record_OverlapDataStruCC[deviceId]), (UINT16)sizeof(OverlapDataStructCC),
(UINT8*)(&pOverlapDataCC[deviceId]), (UINT16)sizeof(OverlapDataStructCC));
if (0u==comparaResult)
if ((0U == comparaResult) && (0U == comparaResultCC))
{/*比较数据一致*/
}
else if (1u==comparaResult )
else if ((1U == comparaResult) || (1U == comparaResultCC))
{/*比较数据不一致*/
if (CI_ERROR != Flag)
@@ -1851,6 +1894,9 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
outStringLength += 4u;
LongToChar(newOverlapData[deviceId].XuanPaiStartCycNum,&outString[outStringLength]);/*保护区段选排开始周期号*/
outStringLength += 4u;
LongToChar(newOverlapData[deviceId].dwAtsLastTimeLockCyc, &outString[outStringLength]);/*最近一次ATS锁闭保护区段周期号*/
outStringLength += 4u;
outString[outStringLength++] = newOverlapData[deviceId].OverlapFromSetRouteCmdFlag; /*保护区段由进路办理时连带的标志*/
outString[outStringLength++] = newOverlapData[deviceId].chPreLaborUnlockState; /*之前人工解锁状态*/
outString[outStringLength++] = newOverlapData[deviceId].OverlapUnlockApplyFlag;/*向ZC申请解锁保护区段解锁标志*/
outString[outStringLength++] = newOverlapData[deviceId].OverlapCanLaborUnlockFlag;/*保护区段可以人工解锁标志*/
@@ -3003,7 +3049,7 @@ UINT8 DeviceCompara(UINT8* deviceStruAddr1, const UINT16 deviceStruLen1,
void GetVirCIKeyDataStru(void)
{
UINT8 ii = 0u;
UINT8 jj = 0U;
for(ii=0u;ii<g_VirtualCIStructData.virtualCiNum;ii++)
{
@@ -3022,12 +3068,6 @@ void GetVirCIKeyDataStru(void)
newVirCIKeyDataStru[ii].ZfwValidCycNum = g_VirtualCIStructData.virtualCi[ii].ZfwValidCycNum;
for (jj = 0U; jj < RTNINDICATOR_SUM_MAX; jj++)
{
newVirCIKeyDataStru[ii].RtnIndicatorKeyData[jj].PrintVirCiIndicatorDevId = g_VirtualCIStructData.virtualCi[ii].VirCIRtnIndicatorStaData[jj].VirCiIndicatorDevId;
newVirCIKeyDataStru[ii].RtnIndicatorKeyData[jj].PrintVirCiFlashState = g_VirtualCIStructData.virtualCi[ii].VirCIRtnIndicatorStaData[jj].VirCiFlashState;
newVirCIKeyDataStru[ii].RtnIndicatorKeyData[jj].PrintVirCiSteadyState = g_VirtualCIStructData.virtualCi[ii].VirCIRtnIndicatorStaData[jj].VirCiSteadyState;
}
newVirCIKeyDataStru[ii].ZfwjHunXianFLag = g_VirtualCIStructData.virtualCi[ii].ZfwjHunXianFLag;
}
}
@@ -16,6 +16,7 @@
#include "../Section/LogicSectionDataManage.h"
#include "LogicalRouteDataManage.h"
#include "../LogicProcess/LogicalRouteLogicCheck.h"
#include "../Overlap/OverlapDataManage.h"
/* C01_进路监督级别确认 */
/*
@@ -801,7 +802,6 @@ void PhySecFaultUnlockLogicManage(const UINT16 phySectionId,const UINT8 virCIid)
UINT8 goExec = CI_ERROR;
UINT8 autoTriggerType = 0U;
UINT8 belongvirCIid = 0U;
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 chPhyIncLogSum = 0U; /*包含逻辑区段数目*/
UINT16* pPhyIncLogId = NULL; /*物理区段包含逻辑区段ID数组*/
UINT16 wLogLockBelongRouteId = 0U; /*逻辑区段锁闭所属进路ID*/
@@ -1038,21 +1038,13 @@ void PhySecFaultUnlockLogicManage(const UINT16 phySectionId,const UINT8 virCIid)
}
}
else if((phyBelongCi == localCiId)&&(TRANSMIT_STATE_GOOD == commState))
{
if(FUNC_SWITCH_ON == includeVirFlag)
{
belongvirCIid = GetPhySecBelongVirCiId(phySectionId);
if((belongvirCIid == virCIid)&&(0u != virCIid))/*区故解可以由相邻虚拟联锁现地操作,不相邻不能操作*/
{
/*进路属于相邻联锁,且区段属于本联锁时,传递区段故障解锁命令 */
AddCiSendToCiCmdInfo(CI_CMD_SECTION_FAULT_UNLOCK,phySectionId,0u,routeBelongCi);
}
}
else
{
belongvirCIid = GetPhySecBelongVirCiId(phySectionId);
if((belongvirCIid == virCIid)&&(0u != virCIid))/*区故解可以由相邻虚拟联锁现地操作,不相邻不能操作*/
{
/*进路属于相邻联锁,且区段属于本联锁时,传递区段故障解锁命令 */
AddCiSendToCiCmdInfo(CI_CMD_SECTION_FAULT_UNLOCK,phySectionId,0u,routeBelongCi);
}
}
}
else
{
@@ -1392,6 +1384,12 @@ void RouteRecoverOpenProc(const UINT16 routeId)
UINT8 errType = CI_ERROR;
UINT8 localCiType = GetLocalCiType();/*获得联锁类型*/
UINT16 wStartSignalId = 0U; /*进路始端信号机ID*/
UINT8 chVirCiId = 0U;/*虚拟联锁*/
UINT8 chLocalVirCiType = 0U;
chVirCiId = GetRouteBelongVirCiId(routeId);
chLocalVirCiType = GetLocalVirCiType(chVirCiId);
routeState = GetRouteState(routeId);
recoverState = GetRouteRecoverOpenFlag(routeId);
@@ -1400,7 +1398,7 @@ void RouteRecoverOpenProc(const UINT16 routeId)
{
if (ROUTE_RECOVER_STA_WAIT == recoverState)
{
if ((CI_TYPE_ZX == localCiType) || (CI_TYPE_SCX == localCiType))
if ((CI_TYPE_ZX == chLocalVirCiType) || (CI_TYPE_SCX == chLocalVirCiType))
{
errType = RecoverOpenRouteCheck(routeId);
}
@@ -1445,7 +1443,6 @@ void SetAtsExpectLockOverlapIdProc(const UINT16 expLkOverlapId,const UINT8 lockT
UINT16 ii = 0u;
UINT16 routeOverlapSum = 0u; /*进路保护区段数目*/
UINT16 routeId = 0u; /*进路ID*/
UINT16 routedLockOverlapId = 0u; /*进路锁闭过OverlapId*/
UINT8 retVal = CI_SUCCESS; /*执行检查*/
UINT8 routeState = 0u; /*进路状态*/
UINT16 preOverlepId = 0u;
@@ -1455,9 +1452,9 @@ void SetAtsExpectLockOverlapIdProc(const UINT16 expLkOverlapId,const UINT8 lockT
UINT8 flag = 0u;
UINT8 belongCiId = 0u;
UINT8 localCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 virCIid = 0u;
UINT8 ciCtrModeFlag = 0u;
UINT32 dwCurCycNum = Get2oo2CurCycleNum();
if ((0u == expLkOverlapId) || (UINT16_MAX == expLkOverlapId))
{/*判断输入参数有效性*/
@@ -1498,9 +1495,9 @@ void SetAtsExpectLockOverlapIdProc(const UINT16 expLkOverlapId,const UINT8 lockT
if (routeOverlapSum >= 1u)
{/*只有当进路的保护区段数目大于等于1个时,ATS或现地才发送期望锁闭保护区段ID*/
/*输入参数保护区段ID是否属于当前进路 且进路保护区段未锁闭过*/
if (1u == checkExpOverlapBelongToRtOrNot(routeId,expLkOverlapId))
if (1u == checkExpOverlapBelongToRtOrNot(routeId, expLkOverlapId))
{/*期望锁闭的保护区段ID属于进路的保护区段ID*/
flag = 1u;/*有任意一条匹配到了,则置为1*/
flag = 1u;/*有任意一条匹配到了,则置为1*/
retVal = CI_SUCCESS;
}
else
@@ -1525,79 +1522,62 @@ void SetAtsExpectLockOverlapIdProc(const UINT16 expLkOverlapId,const UINT8 lockT
/*判断当前保护区段所属联锁控制模式是否可以响应锁闭保护区段命令*/
if (CI_SUCCESS == retVal)
{
virCIid= GetOverlapBelongVirCiId(expLkOverlapId);
if(FUNC_SWITCH_ON == includeVirFlag)
{
ciCtrModeFlag = GetVirCImode(virCIid);/*获取联锁控制模式*/
}
else
{
ciCtrModeFlag = GetCiModeFlag(); /*获取联锁控制模式*/
}
virCIid = GetOverlapBelongVirCiId(expLkOverlapId);
if((CI_MODE_CI_LOCAL ==ciCtrModeFlag)||(0u ==ciCtrModeFlag))/*处于联锁控或者获取错误,发送现地不能响应人工锁闭命令*/
ciCtrModeFlag = GetVirCImode(virCIid);/*获取联锁控制模式*/
if ((CI_MODE_CI_LOCAL == ciCtrModeFlag) || (0u == ciCtrModeFlag))/*处于联锁控或者获取错误,发送现地不能响应人工锁闭命令*/
{
retVal = CI_ERROR;
}
}
/*add by shl*/
if (CI_SUCCESS == retVal)
{
/*判断进路状态,是否满足锁闭保护区段条件,若满足则设置期望锁闭保护区段*/
routeState = GetRouteState(routeId);
routedLockOverlapId = GetRouteOverlapLockedId(routeId); /*获取进路锁闭过保护区段ID*/
if (0u == routedLockOverlapId)
{
/*判断进路状态,是否满足锁闭保护区段条件,若满足则设置期望锁闭保护区段*/
routeState = GetRouteState(routeId);
if ((routeState == ROUTE_STATE_FIRST_XUANPAI) ||
(routeState == ROUTE_STATE_XUANPAI) ||
(routeState == ROUTE_STATE_FIRST_LOCK) ||
(routeState == ROUTE_STATE_FIRST_LOCKERR) ||
(routeState == ROUTE_STATE_YUXIAN_OPEN) ||
(routeState == ROUTE_STATE_YUXIAN_LOCK) ||
(routeState == ROUTE_STATE_NEAR_OPEN) ||
(routeState == ROUTE_STATE_NEAR_LOCK) ||
(routeState == ROUTE_STATE_NEAR_LOCKERR) ||
(routeState == ROUTE_STATE_AUTO_UNLOCK) ||
(routeState == ROUTE_STATE_HALF_UNLOCK)
)
{/*设置指定ID进路的期望锁闭保护区段ID*/
if(LABOR_LOCK_OVERLAP == lockType)/*人工锁闭*/
if ((routeState == ROUTE_STATE_FIRST_XUANPAI) ||
(routeState == ROUTE_STATE_XUANPAI) ||
(routeState == ROUTE_STATE_FIRST_LOCK) ||
(routeState == ROUTE_STATE_FIRST_LOCKERR) ||
(routeState == ROUTE_STATE_YUXIAN_OPEN) ||
(routeState == ROUTE_STATE_YUXIAN_LOCK) ||
(routeState == ROUTE_STATE_NEAR_OPEN) ||
(routeState == ROUTE_STATE_NEAR_LOCK) ||
(routeState == ROUTE_STATE_NEAR_LOCKERR) ||
(routeState == ROUTE_STATE_AUTO_UNLOCK) ||
(routeState == ROUTE_STATE_HALF_UNLOCK)
)
{/*设置指定ID进路的期望锁闭保护区段ID*/
if (LABOR_LOCK_OVERLAP == lockType)/*人工锁闭*/
{
SetOverlapAtsOrlaborLockCmdFlag(expLkOverlapId, LOCK_OVERLAP_CMD_YES);/*设置保护区段锁闭命令标志,用于保护区段解锁倒计时计算*/
SetOverlaplaborLockCmdFlag(expLkOverlapId, LOCK_OVERLAP_CMD_YES);/*设置人工锁闭标志,用于人工命令一次有效处理*/
ClearPreLoaborUnlockState(expLkOverlapId);
}
else if (ATS_LOCK_OVERLAP == lockType)/*ATS锁闭*/
{
phySectionId = GetRouteLastPhySectionId(routeId);
phySectionSta = GetPhySecCurMergeState(phySectionId);
if (SECTION_OCCUPY_YES == phySectionSta)
{
SetOverlapAtsOrlaborLockCmdFlag(expLkOverlapId,LOCK_OVERLAP_CMD_YES);/*设置保护区段锁闭命令标志,用于保护区段解锁倒计时计算*/
SetOverlaplaborLockCmdFlag(expLkOverlapId,LOCK_OVERLAP_CMD_YES);/*设置人工锁闭标志,用于人工命令一次有效处理*/
SetOverlapAtsOrlaborLockCmdFlag(expLkOverlapId, LOCK_OVERLAP_CMD_YES);/*设置保护区段锁闭命令标志*/
}
else if(ATS_LOCK_OVERLAP == lockType)/*ATS锁闭*/
{
phySectionId = GetRouteLastPhySectionId(routeId);
phySectionSta = GetPhySecCurMergeState(phySectionId);
if(SECTION_OCCUPY_YES==phySectionSta)
{
SetOverlapAtsOrlaborLockCmdFlag(expLkOverlapId,LOCK_OVERLAP_CMD_YES);/*设置保护区段锁闭命令标志*/
}
}
else
{
/*什么也不做*/
}
SetRouteAtsExpLkOverlapId(routeId,expLkOverlapId);
SetOverlapFromSetRouteCmdFlag(expLkOverlapId, OVERLAP_ROUTE_FLAG_NO);/*清除标志*/
retVal = CI_SUCCESS;
}
else
{
retVal = CI_ERROR;
/*什么也不做*/
}
SetRouteAtsExpLkOverlapId(routeId, expLkOverlapId);
SetOverlapFromSetRouteCmdFlag(expLkOverlapId, OVERLAP_ROUTE_FLAG_NO);/*清除标志*/
SetOverlapAtsLastTimeLockCyc(expLkOverlapId, dwCurCycNum);
retVal = CI_SUCCESS;
}
else
{
retVal = CI_ERROR;
}
}
}
}
}
@@ -1621,7 +1601,6 @@ UINT8 CheckPhySecFaultUnlockCanDo(const UINT16 phySectionId,const UINT8 virCIid)
UINT16 lockBelongRouteId = 0u; /*区段锁闭所属进路ID*/
UINT8 reVal = CI_ERROR;
UINT8 belongvirCIid = 0u;
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 isErrLock = CI_ERROR;
UINT8 phyLockState = 0U;
@@ -1647,38 +1626,33 @@ UINT8 CheckPhySecFaultUnlockCanDo(const UINT16 phySectionId,const UINT8 virCIid)
}
if(CI_SUCCESS == reVal)
{
if(FUNC_SWITCH_ON == includeVirFlag)
belongvirCIid = GetRouteBelongVirCiId(lockBelongRouteId);
if(0u < virCIid)
{
belongvirCIid = GetRouteBelongVirCiId(lockBelongRouteId);
if(0u < virCIid)
{
if(virCIid == belongvirCIid)
{
reVal = CI_SUCCESS; /*本Rtu(虚拟联锁现地)可以操作属于本虚拟联锁的进路锁闭的物理区段区故解,无论该物理区段是否属于该Rtu*/
}
else
{
belongvirCIid = GetPhySecBelongVirCiId(phySectionId);
if(belongvirCIid == virCIid)
{
reVal = CI_SUCCESS;/*本虚拟联锁物理区段由相邻虚拟联锁进路锁闭的,可以在该物理区段所属Rtu上操作区故解*/
}
else
{
reVal = CI_ERROR;
}
}
if(virCIid == belongvirCIid)
{
reVal = CI_SUCCESS; /*本Rtu(虚拟联锁现地)可以操作属于本虚拟联锁的进路锁闭的物理区段区故解,无论该物理区段是否属于该Rtu*/
}
else
{
reVal = CI_ERROR;
belongvirCIid = GetPhySecBelongVirCiId(phySectionId);
if(belongvirCIid == virCIid)
{
reVal = CI_SUCCESS;/*本虚拟联锁物理区段由相邻虚拟联锁进路锁闭的,可以在该物理区段所属Rtu上操作区故解*/
}
else
{
reVal = CI_ERROR;
}
}
}
else
else
{
reVal = CI_SUCCESS;
reVal = CI_ERROR;
}
}
/*按顺序解锁进路异常锁闭*/
@@ -3424,14 +3398,12 @@ void OtherCiLogSecFaultUnlockProcess(const UINT16 wLogSectionId, const UINT8 chV
UINT8 chLogFaultUnLockRes = 0U;/*逻辑区段故障解锁条件检查结果*/
UINT8 chLogSecBelongRouteDir = 0U;/*逻辑区段锁闭所属进路方向*/
UINT8 chRouteLogSecHaveUnLock = 0u;/*进路逻辑区段是否已解锁*/
UINT8 chIncludeVirFlag = 0U;/*是否支持虚拟联锁*/
UINT8 chBelongVirCiId = 0U;/*逻辑区段所属虚拟联锁ID*/
UINT16 wLogSecBelongPhySecId = 0U;/*逻辑区段所属物理区段ID*/
chLocalCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/
wLogLockBelongRouteId = GetLogSecLockBelongRoute(wLogSectionId);
chFuncSwitch = GetCiFunctionSwitchConfig(FUNC_SWITCH_USE_RELAY_INTERFACE_BETWEEN_NEIGHBOURCI);
chIncludeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
chConfirmRelayInterfaceFlag = GetCiCiRelayInterfConfirmFlag();/*继电接口确认状态*/
if ((0U < wLogLockBelongRouteId) && (ROUTE_SUM_MAX > wLogLockBelongRouteId))
@@ -3465,21 +3437,15 @@ void OtherCiLogSecFaultUnlockProcess(const UINT16 wLogSectionId, const UINT8 chV
else if ((chLocalCiId == chLogSecBelongCiId) && (TRANSMIT_STATE_GOOD == chCommState))
{
wLogSecBelongPhySecId = GetLgcSecRelativePhySecId(wLogSectionId);
if (FUNC_SWITCH_ON == chIncludeVirFlag)
{
chBelongVirCiId = GetLogSecBelongVirCiId(wLogSectionId);
if ((chVirCIid == chBelongVirCiId) && (0U != chVirCIid))
{
/*进路属于相邻联锁,且区段属于本联锁时,传递区段故障解锁命令 */
AddCiSendToCiCmdInfo(CI_CMD_SECTION_FAULT_UNLOCK, wLogSecBelongPhySecId, 0U, chRouteBelongCiId);
}
}
else
chBelongVirCiId = GetLogSecBelongVirCiId(wLogSectionId);
if ((chVirCIid == chBelongVirCiId) && (0U != chVirCIid))
{
/*进路属于相邻联锁,且区段属于本联锁时,传递区段故障解锁命令 */
AddCiSendToCiCmdInfo(CI_CMD_SECTION_FAULT_UNLOCK, wLogSecBelongPhySecId, 0U, chRouteBelongCiId);
}
}
else
{
@@ -3500,7 +3466,6 @@ UINT8 CheckLogSecFaultUnlockCanDo(const UINT16 wLogSectionId, const UINT8 chVirC
UINT16 wLockBelongRouteId = 0U; /*区段锁闭所属进路ID*/
UINT8 reVal = CI_ERROR;
UINT8 chBelongvirCIid = 0U;
UINT8 chIncludeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
if ((0u == wLogSectionId) || (LOGIC_SECTION_SUM_MAX <= wLogSectionId))
{
@@ -3523,38 +3488,32 @@ UINT8 CheckLogSecFaultUnlockCanDo(const UINT16 wLogSectionId, const UINT8 chVirC
}
if (CI_SUCCESS == reVal)
{
if (FUNC_SWITCH_ON == chIncludeVirFlag)
chBelongvirCIid = GetRouteBelongVirCiId(wLockBelongRouteId);
if (0U < chVirCIid)
{
chBelongvirCIid = GetRouteBelongVirCiId(wLockBelongRouteId);
if (0U < chVirCIid)
if (chVirCIid == chBelongvirCIid)
{
if (chVirCIid == chBelongvirCIid)
{
reVal = CI_SUCCESS; /*本Rtu(虚拟联锁现地)可以操作属于本虚拟联锁的进路锁闭的逻辑区段区故解,无论该逻辑区段是否属于该Rtu*/
}
else
{
chBelongvirCIid = GetLogSecBelongVirCiId(wLogSectionId);
if (chVirCIid == chBelongvirCIid)
{
reVal = CI_SUCCESS;/*本虚拟联锁逻辑区段由相邻虚拟联锁进路锁闭的,可以在该逻辑区段所属Rtu上操作区故解*/
}
else
{
reVal = CI_ERROR;
}
}
reVal = CI_SUCCESS; /*本Rtu(虚拟联锁现地)可以操作属于本虚拟联锁的进路锁闭的逻辑区段区故解,无论该逻辑区段是否属于该Rtu*/
}
else
{
reVal = CI_ERROR;
chBelongvirCIid = GetLogSecBelongVirCiId(wLogSectionId);
if (chVirCIid == chBelongvirCIid)
{
reVal = CI_SUCCESS;/*本虚拟联锁逻辑区段由相邻虚拟联锁进路锁闭的,可以在该逻辑区段所属Rtu上操作区故解*/
}
else
{
reVal = CI_ERROR;
}
}
}
else
{
reVal = CI_SUCCESS;
reVal = CI_ERROR;
}
}
return reVal;
@@ -4512,7 +4471,6 @@ void DriveLogRouteSignalClose(const UINT16 wLogSignalId)
UINT8 sigalMaintainState = 0u;
UINT8 detainOpenRedBright = 0u;
UINT8 signalDetainFlag = 0u;
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
if ((0u == wLogSignalId) || (SIGNAL_SUM_MAX <= wLogSignalId))
{
/*不做处理*/
@@ -4520,15 +4478,11 @@ void DriveLogRouteSignalClose(const UINT16 wLogSignalId)
else
{
/*虚拟联锁兼容*/
if (FUNC_SWITCH_ON == includeVirFlag)
{
belongVirCIid = GetSignalBelongVirCiId(wLogSignalId);
allSignalBrightFlag = GetVirCIAllSignalBrightState(belongVirCIid); /*全站亮灯标志*/
}
else
{
allSignalBrightFlag = GetAllSignalBrightFlag(); /*全站亮灯标志*/
}
belongVirCIid = GetSignalBelongVirCiId(wLogSignalId);
allSignalBrightFlag = GetVirCIAllSignalBrightState(belongVirCIid); /*全站亮灯标志*/
/*无论什么时候,复示信号机关闭都驱动红灭*/
signalIsfushiFlag = GetSignalIsfushiFlag(wLogSignalId);
@@ -5127,7 +5081,6 @@ void LogRouteErrLockFaultManage(const UINT16 wPhySectionId)
void SetAtsLockOverlapHaveRouteId(const UINT16 expLkOverlapId, const UINT16 routeId)
{
UINT16 routeOverlapSum = 0U; /*进路保护区段数目*/
UINT16 routedLockOverlapId = 0U; /*进路锁闭过OverlapId*/
UINT8 retVal = CI_SUCCESS; /*返回值*/
UINT8 routeState = 0U; /*进路状态*/
UINT16 preOverlepId = 0U;
@@ -5136,11 +5089,11 @@ void SetAtsLockOverlapHaveRouteId(const UINT16 expLkOverlapId, const UINT16 rout
UINT8 phySectionSta = 0U;
UINT8 belongCiId = 0U;
UINT8 localCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 virCIid = 0U;
UINT8 ciCtrModeFlag = 0U;
UINT8 routeStateFlag = 0U;
UINT8 flag = 0U;
UINT32 dwCurCycNum = Get2oo2CurCycleNum();
routeStateFlag = GetRouteStateFlag(routeId);
@@ -5203,14 +5156,8 @@ void SetAtsLockOverlapHaveRouteId(const UINT16 expLkOverlapId, const UINT16 rout
if (CI_SUCCESS == retVal)
{
virCIid = GetOverlapBelongVirCiId(expLkOverlapId);
if (FUNC_SWITCH_ON == includeVirFlag)
{
ciCtrModeFlag = GetVirCImode(virCIid);/*获取联锁控制模式*/
}
else
{
ciCtrModeFlag = GetCiModeFlag(); /*获取联锁控制模式*/
}
ciCtrModeFlag = GetVirCImode(virCIid);/*获取联锁控制模式*/
if ((CI_MODE_CI_LOCAL == ciCtrModeFlag) || (0U == ciCtrModeFlag))/*处于联锁控或者获取错误,发送现地不能响应人工锁闭命令*/
{
@@ -5220,54 +5167,50 @@ void SetAtsLockOverlapHaveRouteId(const UINT16 expLkOverlapId, const UINT16 rout
if (CI_SUCCESS == retVal)
{
routedLockOverlapId = GetRouteOverlapLockedId(routeId); /*获取进路锁闭保护区段ID*/
/*判断进路状态,是否满足锁闭保护区段条件,若满足则设置期望锁闭保护区段*/
routeState = GetRouteState(routeId);
if (0U == routedLockOverlapId)
if ((ROUTE_STATE_FIRST_XUANPAI == routeState)
|| (ROUTE_STATE_XUANPAI == routeState)
|| (ROUTE_STATE_FIRST_LOCK == routeState)
|| (ROUTE_STATE_FIRST_LOCKERR == routeState)
|| (ROUTE_STATE_YUXIAN_OPEN == routeState)
|| (ROUTE_STATE_YUXIAN_LOCK == routeState)
|| (ROUTE_STATE_NEAR_OPEN == routeState)
|| (ROUTE_STATE_NEAR_LOCK == routeState)
|| (ROUTE_STATE_NEAR_LOCKERR == routeState)
|| ((ROUTE_STATE_AUTO_UNLOCK == routeState) && (ROUTE_STATE_FLAG_YES == routeStateFlag))
)
{
/*判断进路状态,是否满足锁闭保护区段条件,若满足则设置期望锁闭保护区段*/
routeState = GetRouteState(routeId);
if ((ROUTE_STATE_FIRST_XUANPAI == routeState)
|| (ROUTE_STATE_XUANPAI == routeState)
|| (ROUTE_STATE_FIRST_LOCK == routeState)
|| (ROUTE_STATE_FIRST_LOCKERR == routeState)
|| (ROUTE_STATE_YUXIAN_OPEN == routeState)
|| (ROUTE_STATE_YUXIAN_LOCK == routeState)
|| (ROUTE_STATE_NEAR_OPEN == routeState)
|| (ROUTE_STATE_NEAR_LOCK == routeState)
|| (ROUTE_STATE_NEAR_LOCKERR == routeState)
|| ((ROUTE_STATE_AUTO_UNLOCK == routeState) && (ROUTE_STATE_FLAG_YES == routeStateFlag))
)
{/*设置指定ID进路的期望锁闭保护区段ID*/
/*仅处理ATS办理保护区段,不处理人工办理保护区段*/
phySectionId = GetRouteLastPhySectionId(routeId);
phySectionSta = GetPhySecCurMergeState(phySectionId);
if (SECTION_OCCUPY_YES == phySectionSta)
{
SetOverlapAtsOrlaborLockCmdFlag(expLkOverlapId, LOCK_OVERLAP_CMD_YES);/*设置保护区段锁闭命令标志,用于保护区段解锁倒计时计算*/
}
else
{
/*nothing do*/
}
SetRouteAtsExpLkOverlapId(routeId, expLkOverlapId);/*设置期望锁闭保护区段*/
SetOverlapFromSetRouteCmdFlag(expLkOverlapId, OVERLAP_ROUTE_FLAG_YES);/*设置保护区段由进路连带标识*/
retVal = CI_SUCCESS;
/*设置指定ID进路的期望锁闭保护区段ID*/
/*仅处理ATS办理保护区段,不处理人工办理保护区段*/
phySectionId = GetRouteLastPhySectionId(routeId);
phySectionSta = GetPhySecCurMergeState(phySectionId);
if (SECTION_OCCUPY_YES == phySectionSta)
{
SetOverlapAtsOrlaborLockCmdFlag(expLkOverlapId, LOCK_OVERLAP_CMD_YES);/*设置保护区段锁闭命令标志,用于保护区段解锁倒计时计算*/
}
else
{
retVal = CI_ERROR;
/*nothing do*/
}
SetRouteAtsExpLkOverlapId(routeId, expLkOverlapId);/*设置期望锁闭保护区段*/
SetOverlapFromSetRouteCmdFlag(expLkOverlapId, OVERLAP_ROUTE_FLAG_YES);/*设置保护区段由进路连带标识*/
SetOverlapAtsLastTimeLockCyc(expLkOverlapId, dwCurCycNum);
retVal = CI_SUCCESS;
}
else
{
; /*当前进路保护区段已锁,不处理*/
retVal = CI_ERROR;
}
}
else
{
; /*当前进路保护区段已锁,不处理*/
}
}
if (0U == flag)
@@ -150,6 +150,10 @@ void InterlockLogicMainProc(void)
cost[0] = MSCP_GetTick();
if (SYSTEM_WORK_MODE_MAIN == cControlState)
{
/*试车线状态机处理*/
CiTrainTestLogicManage();
if ((CI_TYPE_ZX == localCiType) || (CI_TYPE_SCX == localCiType))
{
/*全自动折返进路逻辑处理*/
@@ -162,10 +166,6 @@ void InterlockLogicMainProc(void)
NearCIRouteNeedCloseProce();
/*cgh-合并CID-2341-8:清除保护区段的选排起始周期号, 进路空闲状态,清除进路保护区段选排起始周期*/
ClearOverlapXuanPaiStartCycNum();
if (CI_TYPE_SCX == localCiType)
{
CiTrainTestLogicManage();
}
#if 0
/*指示灯逻辑管理*/
IndicatorLogicManage();
@@ -205,8 +205,6 @@ void InterlockLogicMainProc(void)
/*保护区段状态更新管理*/
OverlapStateUpdateManage();
cost[2] = MSCP_GetTick();
/*进路其它联锁道岔管理*/
@@ -294,20 +292,9 @@ void RouteLogicManage(void)
if (CI_SUCCESS == rtVal)
{
if ((CI_TYPE_ZX == localCiType) || (CI_TYPE_SCX == localCiType))
{/*正线和试车线既检查上电解锁,又检查全站解封*/
if ((CI_START_LOCK_NO != startLockState) || (CI_START_FLOCK_NO != startFlockFlag))
{/*未全站解封且未上电解锁*/
rtVal = CI_ERROR;
}
}
else
{/*车辆段仅检查上电解锁*/
if (GetStartLockFlag() != CI_START_LOCK_NO)
{ /*未上电解锁*/
rtVal = CI_ERROR;
}
if ((CI_START_LOCK_NO != startLockState) || (CI_START_FLOCK_NO != startFlockFlag))
{/*未全站解封且未上电解锁*/
rtVal = CI_ERROR;
}
}
@@ -736,7 +723,6 @@ void RouteAutoManage(const UINT16 routeId)
UINT8 phySectionUseState = 0u;
UINT16 routeAutoReturnId = 0u;
UINT8 virCIid = 0u;
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
checkDSBreakLoseEfficacyFlag = GetCiFunctionSwitchConfig(FUNC_DS_BREAK_AUTOSIG_LOSE_EFFICACY_FLAG);
@@ -1658,6 +1644,7 @@ void RouteNearLockErrManage(const UINT16 routeId)
UINT8 routeRepeatStat = 0U;
UINT8 routeTrainNear = 0U;
UINT8 cFuncRetVal = CI_ERROR;
UINT8 cFuncSwitch = 0U;
/*获取进路始端信号机ID*/
startSignalId = GetRouteStartSignalId(routeId);
@@ -1685,18 +1672,28 @@ void RouteNearLockErrManage(const UINT16 routeId)
{/*之前驱动开放*/
if ((CI_SUCCESS == autoSignalValid) || (ROUTE_REPEATOPEN_SET_YES == routeRepeatStat))
{ /*自动信号或者重开*/
if (CI_SUCCESS == routeTrainNear)
{/*进路有车接近*/
cFuncSwitch = GetCiFunctionSwitchConfig(FUNC_REOPRN_SET_NEAR);
if (FUNC_SWITCH_ON == cFuncSwitch)
{
/*“重开信号是否记忆进路接近锁闭状态开关”配置为0xAA时,默认设置进路接近*/
SetRouteStateManage(routeId, ROUTE_STATE_NEAR_OPEN); /*-->设置接近开放*/
RouteNearOpenManage(routeId); /*-->进路接近开放管理*/
}
else
{/*进路无车接近*/
SetRouteStateManage(routeId, ROUTE_STATE_YUXIAN_OPEN); /*-->设置预先开放*/
{
/*“重开信号是否记忆进路接近锁闭状态开关”配置为0x55时,根据接近区段占用状态设置进路接近/未接近*/
if (CI_SUCCESS == routeTrainNear)
{/*进路有车接近*/
SetRouteStateManage(routeId, ROUTE_STATE_NEAR_OPEN); /*-->设置接近开放*/
RouteYuXianOpenManage(routeId); /*进路预先开放管理*/
RouteNearOpenManage(routeId); /*-->进路接近开放管理*/
}
else
{/*进路无车接近*/
SetRouteStateManage(routeId, ROUTE_STATE_YUXIAN_OPEN); /*-->设置预先开放*/
RouteYuXianOpenManage(routeId); /*进路预先开放管理*/
}
}
}
else
@@ -2458,7 +2455,7 @@ void RoutePhySecAutoUnlockManage(const UINT16 routeId)
{
UINT16 phySectionId = 0u; /*物理区段ID*/
UINT8 returnValue = 0u; /*函数返回值*/
UINT8 localCiType = 0u;
UINT16 sectionSum = 0u; /*区段总数*/
UINT16 sectionId = 0u; /*区段ID*/
UINT8 sectionState = 0u; /*设备状态*/
@@ -2469,6 +2466,9 @@ void RoutePhySecAutoUnlockManage(const UINT16 routeId)
UINT8 kk = 0;
NonRouteDataStruct* pNonData = NULL;
UINT8 interfaceType = GetCiFunctionSwitchConfig(SCX_CLD_INTERFACE_TYPE);/*获取试车线与车辆段接口方式类型*/
UINT8 chVirCiId = 0U;
UINT8 chLocalVirCiType = 0U;
UINT8 chPhySecBelongVirCiId = 0U;
/*进路区段自动解锁处理*/
returnValue = RouteOtherSecAutoUnlockProcess(routeId, &phySectionId);
@@ -2491,8 +2491,10 @@ void RoutePhySecAutoUnlockManage(const UINT16 routeId)
else if (RETURN_AUTOLOCK_ERR_EXCEPT == returnValue)
{
/*解锁异常*/
localCiType = GetLocalCiType();
if (CI_TYPE_SCX == localCiType)
chVirCiId = GetRouteBelongVirCiId(routeId);
chLocalVirCiType = GetLocalVirCiType(chVirCiId);/*获取进路所属虚拟联锁对应的联锁类型*/
if (CI_TYPE_SCX == chLocalVirCiType)
{
/*获取非进路id*/
@@ -2531,12 +2533,16 @@ void RoutePhySecAutoUnlockManage(const UINT16 routeId)
sectionSum = GetPhySecCurSum();
for (ii = 0u; ii < sectionSum; ii++)
{
sectionId = GetPhySecId(ii); /*获取物理区段ID*/
sectionState = GetPhySecCurMergeState(sectionId);
if (SECTION_OCCUPY_NO != sectionState)
{
break;
sectionId = GetPhySecId(ii);/*获取物理区段ID*/
chPhySecBelongVirCiId = GetPhySecBelongVirCiId(sectionId);
chLocalVirCiType = GetLocalVirCiType(chPhySecBelongVirCiId);
if (CI_TYPE_SCX == chLocalVirCiType)
{/*区段属于试车线*/
sectionState = GetPhySecCurMergeState(sectionId);
if (SECTION_OCCUPY_NO != sectionState)
{
break;
}
}
}
@@ -2889,20 +2895,23 @@ UINT8 SetRouteProc(const UINT16 routeId)
UINT8 routeType = 0U; /*进路类型*/
UINT8 routeLevel = 0U; /*进路监督级别*/
UINT8 returnValue = CI_ERROR; /*返回值定义*/
UINT8 chLocalCiType = 0U; /*本地联锁类型*/
UINT8 chStopCheckState = 0U;/*停止检查标志*/
UINT8 chRouteState = 0U;/*进路状态*/
UINT8 chVirCiId = 0U;
UINT8 chLocalVirCiType = 0U;
routeType = GetRouteType(routeId); /*获取进路类型*/
routeLevel = GetRouteLevel(routeId); /*获取进路监督级别*/
chLocalCiType = GetLocalCiType(); /*获取本地联锁类型*/
chRouteState = GetRouteState(routeId);
chVirCiId = GetRouteBelongVirCiId(routeId);
chLocalVirCiType= GetLocalVirCiType(chVirCiId);/*获取进路所属虚拟联锁对应的联锁类型*/
/*by cgh 20230720 合并车辆段与正线进路办理处理*/
if (ROUTE_TYPE_LIECHE == routeType)
{
/*列车进路*/
if ((CI_TYPE_ZX == chLocalCiType) || (CI_TYPE_SCX == chLocalCiType))
if ((CI_TYPE_ZX == chLocalVirCiType) || (CI_TYPE_SCX == chLocalVirCiType))
{
if (ROUTE_REVERSE_PROPERTY_YES == GetRouteReverseProperty(routeId))
{
@@ -2924,7 +2933,7 @@ UINT8 SetRouteProc(const UINT16 routeId)
}
}
}
else if (CI_TYPE_CLD == chLocalCiType)
else if (CI_TYPE_CLD == chLocalVirCiType)
{
returnValue = SetLTrainRouteP(routeId);
}
@@ -3117,19 +3126,22 @@ UINT8 LockRouteProc(const UINT16 routeId)
UINT8 routeType = 0U; /*进路类型*/
UINT8 routeLevel = 0U; /*进路监督级别*/
UINT8 returnValue = CI_ERROR; /*返回值定义*/
UINT8 chLocalCIType = 0U;/*联锁类型*/
UINT8 chLocalVirCiType = 0U;/*联锁类型*/
UINT8 chVirCiId = 0U;
routeType = GetRouteType(routeId); /*获取进路类型*/
routeLevel = GetRouteLevel(routeId); /*获取进路监督级别*/
chLocalCIType = GetLocalCiType();
chVirCiId = GetRouteBelongVirCiId(routeId);
chLocalVirCiType = GetLocalVirCiType(chVirCiId);/*获取进路所属虚拟联锁对应的联锁类型*/
if (ROUTE_TYPE_LIECHE == routeType)
{ /*列车进路*/
if ((CI_TYPE_ZX == chLocalCIType) || (CI_TYPE_SCX == chLocalCIType))
if ((CI_TYPE_ZX == chLocalVirCiType) || (CI_TYPE_SCX == chLocalVirCiType))
{
if (ROUTE_LEVEL_CBTC == routeLevel)
{ /*CBTC*/
/*锁闭CBTC列车进路逻辑处理*/
returnValue = LockCbtcLTrainRouteLogicProcess(routeId);
}
@@ -3139,7 +3151,7 @@ UINT8 LockRouteProc(const UINT16 routeId)
returnValue = LockBlocLTrainRouteLogicProcess(routeId);
}
}
else if (CI_TYPE_CLD == chLocalCIType)
else if (CI_TYPE_CLD == chLocalVirCiType)
{
returnValue = LockLTrainRouteP(routeId);
}
@@ -5444,11 +5456,9 @@ void SetOverlapLockState(const UINT16 overlapId, const UINT8 lockState, const UI
SetOverlapUnlockApplyFlag(overlapId, UNLOCK_OVERLAP_APPLY_NO);
/*取消保护区段关联防护道岔的防护锁闭*/
SetOverlapRelateProtSwLockSta(overlapId, SWITCH_LOCK_PROTECT_CANCEL);
#if 0
/*设置防护区段解锁起始周期为0*/
SetOverlapUnlockStartCycNum(overlapId, 0);
#endif
SetRouteAtsExpLkOverlapId(routeId, 0u);
/*清除保护区段个别状态*/
CleanOverlapSpecificFlag(routeId, overlapId);
/*设置为不可以人工解锁保护区段*/
SetOverlapCanLaborUnlockFlag(overlapId, CANNOT_LABOR_UNLOCK_OVERLAP);
@@ -5456,8 +5466,10 @@ void SetOverlapLockState(const UINT16 overlapId, const UINT8 lockState, const UI
SetlaborUnlockStartCycNum(overlapId, 0u);
/*人工解锁保护区段命令清除*/
SetOverlapLaborUnlockSetState(overlapId, LABOR_UNLOCK_OVERLAP_NO);
/*清除保护区段锁闭命令*/
CleanOverlapAtsOrlaborLockFlag(routeId, overlapId);
/*设置防护区段解锁起始周期为0*/
(void)SetOverlapUnlockStartCycNum(overlapId, 0U);
/*设置锁闭起始周期0*/
SetOverlaplockSucessStartCycNum(overlapId, 0u);
@@ -5467,8 +5479,6 @@ void SetOverlapLockState(const UINT16 overlapId, const UINT8 lockState, const UI
/*设置保护区段向车申请解锁起始周期为0*/
SetReqIvocUnlockStartCycNum(overlapId, 0U);
SetOverlapFromSetRouteCmdFlag(overlapId, OVERLAP_ROUTE_FLAG_NO);/*清除保护区段建立命令由进路命令连带下发标志*/
/*设置保护区段列车不同意解锁*/
SetOverlapIvocAllowUnlockFlag(overlapId, IVOC_ALLOW_UNLOCK_OVERLAP_NO);
@@ -5561,7 +5571,6 @@ void SetCommonRouteLogicManage(const UINT16 routeId,const UINT8 chSendLevel)
UINT8 cRcWorkMode = 0u;
UINT8 cKeepWorkFlag = CI_ERROR;
UINT8 firstLogicOccuState = 0u;
UINT8 chLocalCiType = 0U;/*本地联锁类型*/
UINT8 chSignalReOpenFunc = 0U;
UINT8 chReadyEnterRouteTrainSum = 0U;
UINT16 wszReadyEtRouteTrainId[LOGIC_SECTION_RES_SUM_MAX] = { 0U };
@@ -5571,13 +5580,18 @@ void SetCommonRouteLogicManage(const UINT16 routeId,const UINT8 chSendLevel)
UINT16 wRouteInLastLogSecId = 0U;
UINT16 wLogLockRouteId = 0U;
UINT8 chAutoFlagCheck = 0U;
UINT8 chVirCiId = 0U;
UINT8 chLocalVirCiType = 0U;
chHitSoftWallSwitch = GetHitSoftWallSwitch();
/*进路信号异常关闭,收到进路办理命令后执行信号重开开关 0xaa执行 0x55不执行*/
chSignalReOpenFunc = GetCiFunctionSwitchConfig(FUNC_ROUTELOCK_OPEN_SIGNAL);
/* RC工作模式 */
cRcWorkMode = GetLocalRcWorkMode();
chLocalCiType = GetLocalCiType(); /*获取本地联锁类型*/
chVirCiId = GetRouteBelongVirCiId(routeId);
chLocalVirCiType = GetLocalVirCiType(chVirCiId);/*获取进路所属虚拟联锁对应的联锁类型*/
if ((0u == routeId) || (routeId >= ROUTE_SUM_MAX))
{
@@ -5645,7 +5659,7 @@ void SetCommonRouteLogicManage(const UINT16 routeId,const UINT8 chSendLevel)
checkResult = SetRouteProc(routeId);/*检查办理条件是否满足*/
if (CI_ERROR == checkResult)
{
if ((CI_TYPE_ZX == chLocalCiType) || (CI_TYPE_SCX == chLocalCiType))
if ((CI_TYPE_ZX == chLocalVirCiType) || (CI_TYPE_SCX == chLocalVirCiType))
{
if ((ROUTE_TYPE_LIECHE == routeType) && (ROUTE_REVERSE_PROPERTY_NO == GetRouteReverseProperty(routeId))
&& (ROUTE_LEVEL_CBTC == routeLevel) && (ROUTE_STATE_NEAR_LOCK == routeState))
@@ -6054,7 +6068,6 @@ void RouteZongQuXiaoLogicManage(const UINT16 routeId)
UINT16* overlapIdBuf = NULL;
UINT8 ii = 0u;
UINT8 virCIid = 0u;
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
if ((0u == routeId) || (routeId >= ROUTE_SUM_MAX))
{
@@ -6122,7 +6135,6 @@ void RouteZongRenJieLogicManage(const UINT16 routeId)
UINT16* overlapIdBuf = NULL;
UINT8 ii = 0u;
UINT8 virCIid = 0u;
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
if ((0u == routeId) || (routeId >= ROUTE_SUM_MAX))
{
@@ -7080,7 +7092,6 @@ void SetRouteStateManage(const UINT16 routeId, UINT8 routeState)
{
UINT8 setStateResult = 0u;
UINT8 virCIid = 0u;
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 trainIdSum = 0u; /*列车ID总数量*/
UINT8 i = 0u; /*索引*/
UINT16* ptrainIdBuff = NULL; /*列车ID BUFF*/
@@ -7857,7 +7868,6 @@ void UpdateZhaoChaStateManage(const UINT16 routeId, UINT8 routeState)
void SetAutoRouteLogicManage(const UINT16 autoRouteId, const UINT8 virCIid)
{
UINT8 chkStatus = 0u;/*临时变量,检查结果*/
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 chFunctionId = EFUNC_SET_AUTOROUTE;/*函数ID*/
UINT8 chSendLevel = ESEND_LEVEL_ATS;/*报警等级初始化为向ATS发送*/
UINT8 routeSum = 0u; /*自动进路包含进路数目 (配置字段)*/
@@ -7878,11 +7888,11 @@ void SetAutoRouteLogicManage(const UINT16 autoRouteId, const UINT8 virCIid)
if (CI_SUCCESS == chkStatus)
{
if (FUNC_SWITCH_ON == includeVirFlag)
{
/*检查自动进路包含进路是否都属于输入虚拟联锁,不属于则返回失败*/
chkStatus = CheckAutoRouteBelongVirCI(autoRouteId, virCIid);
}
/*检查自动进路包含进路是否都属于输入虚拟联锁,不属于则返回失败*/
chkStatus = CheckAutoRouteBelongVirCI(autoRouteId, virCIid);
}
if (CI_SUCCESS == chkStatus)
@@ -7939,7 +7949,6 @@ void SetAutoRouteLogicManage(const UINT16 autoRouteId, const UINT8 virCIid)
void CancelAutoRouteLogicManage(const UINT16 autoRouteId, const UINT8 virCIid)
{
UINT8 reVal = CI_ERROR;
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
if ((0u == autoRouteId) || (autoRouteId >= AUTO_ROUTE_SUM_MAX))
{
reVal = CI_ERROR;
@@ -7951,11 +7960,7 @@ void CancelAutoRouteLogicManage(const UINT16 autoRouteId, const UINT8 virCIid)
if (CI_SUCCESS == reVal)
{
if (FUNC_SWITCH_ON == includeVirFlag)
{
reVal = CheckAutoRouteBelongVirCI(autoRouteId, virCIid);
}
reVal = CheckAutoRouteBelongVirCI(autoRouteId, virCIid);
}
if (CI_SUCCESS == reVal)
@@ -7973,7 +7978,6 @@ void CancelAutoRouteLogicManage(const UINT16 autoRouteId, const UINT8 virCIid)
void SetAutoReturnLogicManage(const UINT16 autoReturnId, const UINT8 virCIid)
{
UINT8 chkStatus = 0u;/*临时变量,检查结果*/
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 chFunctionId = EFUNC_SET_AUTORETURN;/*函数ID*/
UINT8 chSendLevel = ESEND_LEVEL_ATS;/*报警等级初始化为向ATS发送*/
@@ -7987,10 +7991,7 @@ void SetAutoReturnLogicManage(const UINT16 autoReturnId, const UINT8 virCIid)
}
if (CI_SUCCESS == chkStatus)
{
if (FUNC_SWITCH_ON == includeVirFlag)
{
chkStatus = CheckAutoReturnBelongVirCI(autoReturnId, virCIid);
}
chkStatus = CheckAutoReturnBelongVirCI(autoReturnId, virCIid);
}
if (CI_SUCCESS == chkStatus)
{/*自动折返进路是否有抵触自动进路已办理检查*/
@@ -8038,7 +8039,6 @@ void SetAutoReturnLogicManage(const UINT16 autoReturnId, const UINT8 virCIid)
void CancelAutoReturnLogicManage(const UINT16 autoReturnId, const UINT8 virCIid)
{
UINT8 reVal = CI_ERROR;
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
if ((1U > autoReturnId) || (autoReturnId >= AUTO_RETURN_SUM_MAX))
{
reVal = CI_ERROR;
@@ -8049,10 +8049,7 @@ void CancelAutoReturnLogicManage(const UINT16 autoReturnId, const UINT8 virCIid)
}
if (CI_SUCCESS == reVal)
{
if (FUNC_SWITCH_ON == includeVirFlag)
{
reVal = CheckAutoReturnBelongVirCI(autoReturnId, virCIid);
}
reVal = CheckAutoReturnBelongVirCI(autoReturnId, virCIid);
}
if (CI_SUCCESS == reVal)
{
@@ -8078,7 +8075,6 @@ void LockOverlapLogicManage(const UINT16 routeId)
UINT8 triggerFlag = 0u; /*进路自动触发设置标志*/
UINT8 autoSignalOrRouteValid = 0u;
UINT8 virCIid = 0u;
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 routeOverlapNum = 0u;
UINT16* pRouteOverlapIdbuf = NULL;
UINT8 routeOverlapNeedCIlockFlag = 0u;
@@ -8107,21 +8103,17 @@ void LockOverlapLogicManage(const UINT16 routeId)
{
rtOverlapSum = GetRouteOverlapSum(routeId); /*获取进路保护区段数目*/
atsCmdLkOverlapId = GetRouteAtsExpLkOverlapId(routeId); /*获取进路的ATS期望锁闭保护区段Id*/
if (FUNC_SWITCH_ON == includeVirFlag)
/*cgh-合并CID-2539-10*/
routeOverlapNum = GetRouteOverlapSum(routeId);
pRouteOverlapIdbuf = GetRouteOverlapIdBuf(routeId);
if ((0u < routeOverlapNum) && (NULL != pRouteOverlapIdbuf))
{
/*cgh-合并CID-2539-10*/
routeOverlapNum = GetRouteOverlapSum(routeId);
pRouteOverlapIdbuf = GetRouteOverlapIdBuf(routeId);
if ((0u < routeOverlapNum) && (NULL != pRouteOverlapIdbuf))
{
virCIid = GetOverlapBelongVirCiId(pRouteOverlapIdbuf[0]);
ciCtrModeFlag = GetVirCImode(virCIid);/*获取联锁控制模式*/
}
}
else
{
ciCtrModeFlag = GetCiModeFlag(); /*获取联锁控制模式*/
virCIid = GetOverlapBelongVirCiId(pRouteOverlapIdbuf[0]);
ciCtrModeFlag = GetVirCImode(virCIid);/*获取联锁控制模式*/
}
lockOverlapType = GetOverlapLockTypeSwitch(); /*获取锁闭保护区段方式 0x02:联锁自行锁闭保护区段 0x01:根据ATS命令锁闭保护区段*/
autoSignalOrRouteValid = AutoSignalOrRouteValid(routeId);
@@ -8590,7 +8582,6 @@ void SetYLockSignalOpenStateManage(UINT8 virCIid, UINT16 signalId)
UINT8 belongVirCIid = 0u;
UINT8 allSwitchYLockState = 0u;
UINT8 reVal = CI_ERROR;
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
if ((0u == signalId) || (SIGNAL_SUM_MAX <= signalId))
{
@@ -8612,26 +8603,18 @@ void SetYLockSignalOpenStateManage(UINT8 virCIid, UINT16 signalId)
}
if (CI_SUCCESS == reVal)
{
if (FUNC_SWITCH_ON == includeVirFlag)
belongVirCIid = GetSignalBelongVirCiId(signalId);
if ((belongVirCIid == virCIid) && (0u != virCIid))
{
belongVirCIid = GetSignalBelongVirCiId(signalId);
if ((belongVirCIid == virCIid) && (0u != virCIid))
{
allSwitchYLockState = GetVirCIAllSwitchYLockState(virCIid);
if (CI_ALL_SWITCH_YLOCK_YES == allSwitchYLockState)
{
SetSignalYLockOpenState(signalId, SIGNAL_OPEN);
}
}
}
else
{
allSwitchYLockState = GetAllSwitchYLockFlag();
allSwitchYLockState = GetVirCIAllSwitchYLockState(virCIid);
if (CI_ALL_SWITCH_YLOCK_YES == allSwitchYLockState)
{
SetSignalYLockOpenState(signalId, SIGNAL_OPEN);
}
}
}
}
/*
@@ -8920,7 +8903,6 @@ void DetainLogicManage(const UINT16 signalId, const UINT8 setState)
void SetAllAutoReturnLogicManage(const UINT16 allAutoReturnId, const UINT8 virCIid)
{
UINT8 chkStatus = 0u;/*临时变量,检查结果*/
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 chFunctionId = EFUNC_SET_ALLAUTORETURN;/*函数ID*/
UINT8 chSendLevel = ESEND_LEVEL_ATS;/*报警等级初始化为向ATS发送*/
@@ -8934,10 +8916,7 @@ void SetAllAutoReturnLogicManage(const UINT16 allAutoReturnId, const UINT8 virCI
}
if (CI_SUCCESS == chkStatus)
{
if (FUNC_SWITCH_ON == includeVirFlag)
{
chkStatus = CheckALLAutoReturnBelongVirCI(allAutoReturnId, virCIid);
}
chkStatus = CheckALLAutoReturnBelongVirCI(allAutoReturnId, virCIid);
}
if (CI_SUCCESS == chkStatus)
@@ -8984,7 +8963,6 @@ void SetAllAutoReturnLogicManage(const UINT16 allAutoReturnId, const UINT8 virCI
void CancelAllAutoReturnLogicManage(const UINT16 allAutoReturnId, const UINT8 virCIid)
{
UINT8 reVal = CI_ERROR;
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
if ((allAutoReturnId < 1u) || (allAutoReturnId >= ALL_AUTO_RETURN_SUM_MAX))
{
reVal = CI_ERROR;
@@ -8995,10 +8973,7 @@ void CancelAllAutoReturnLogicManage(const UINT16 allAutoReturnId, const UINT8 vi
}
if (CI_SUCCESS == reVal)
{
if (FUNC_SWITCH_ON == includeVirFlag)
{
reVal = CheckALLAutoReturnBelongVirCI(allAutoReturnId, virCIid);
}
reVal = CheckALLAutoReturnBelongVirCI(allAutoReturnId, virCIid);
}
if (CI_SUCCESS == reVal)
{
@@ -9367,10 +9342,9 @@ void AllAutoReturnManage(const UINT16 routeId)
*/
void StartTrianTestManage(void)
{
UINT8 localCiType = GetLocalCiType();
UINT8 trainTestStatus = GetCiTrainTestStatus();
/* 当本联锁是试车线同时本联锁未开始试车作业下,才处理试车请求命令 */
if ((CI_TYPE_SCX == localCiType) && (CI_TRAIN_TEST_OFF == trainTestStatus))
if (CI_TRAIN_TEST_OFF == trainTestStatus)
{
SetCiTrainTestStatus(CI_TRAIN_TEST_START);
@@ -9386,95 +9360,22 @@ void StartTrianTestManage(void)
*/
void StopTrianTestManage(void)
{
UINT8 localCiType = GetLocalCiType();
UINT8 trainTestStatus = GetCiTrainTestStatus();
/* 当本联锁是试车线同时本联锁未开始试车作业下,才处理试车请求命令 */
if ((CI_TYPE_SCX == localCiType))
if (CI_TRAIN_TEST_ON == trainTestStatus)
{
if (CI_TRAIN_TEST_ON == trainTestStatus)
{
SetCiTrainTestStatus(CI_TRAIN_TEST_STOP);
}
else if (CI_TRAIN_TEST_START == trainTestStatus)
{
SetCiTrainTestStatus(CI_TRAIN_TEST_OFF);
}
else
{
/* 不处理 */
}
SetCiTrainTestStatus(CI_TRAIN_TEST_STOP);
}
}
/*
*
*
*
CI_ERROR
CI_SUCCESS
*/
UINT8 CancleLinShiXianSuManage(void)
{
UINT16 ii;
UINT16 logSecId = 0u;
UINT8 state = 0u;
UINT8 retVal = 0u;
/*通信状态*/
UINT8 comunicationState = 0u;
UINT8 zcCommState = 0u;
UINT8 localCi = 0u;
UINT8* pSourceIdBuf = NULL;
UINT8 dianshiLinshixiansuFlag = 0U;/*是否支持点式临时限速*/
dianshiLinshixiansuFlag = GetCiFunctionSwitchConfig(FUNC_DIANSHI_LINSHIXIANSU_FLAG);
localCi = GetSystemParaLocalCiId(); /*获取本机联锁ID*/
pSourceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_ZC);/*获取与本联锁通信的ZC的ID*/
if (pSourceIdBuf != NULL)
else if (CI_TRAIN_TEST_START == trainTestStatus)
{
/*更新与ZC通信状态*/
(void)UpdateCiTransmitState(localCi, CI_SYSTEM_TYPE_ZC, pSourceIdBuf[0]);
zcCommState = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_ZC, pSourceIdBuf[0]);
/*通信异常*/
if (CI_ERROR == zcCommState)
{
comunicationState = TRANSMIT_STATE_BAD;
}
else
{
comunicationState = TRANSMIT_STATE_GOOD;
}
}
if ((TRANSMIT_STATE_GOOD != comunicationState) && (HAVE_DIANSHILINSHIXIANSU == dianshiLinshixiansuFlag))
{/*和ZC通信故障时,才允许人工取消临时限速*/
for (ii = 0u; ii < GetLogicSecCurSum(); ii++)
{
logSecId = GetLogicSecId(ii); /*获取逻辑区段ID*/
state = GetLogSecLinShiXianSuSetState(logSecId); /*获取逻辑区段临时限速设置状态*/
if (LOGSEC_LSXS_SET_STATE_INVALID != state)
{/*具有临时限速属性*/
SetLogSecLinShiXianSuState(logSecId, LOGSEC_LSXS_SET_STATE_NO); /*取消临时限速*/
SetLogSecLinShiXianSuStateZc(logSecId, LOGSEC_LSXS_SET_STATE_NO); /*同时取消ZC的临时限速*/
/*备注:TMC尚不具备,限速清除先仅考虑和ZC通信*/
}
}
retVal = CI_SUCCESS;
SetCiTrainTestStatus(CI_TRAIN_TEST_OFF);
}
else
{
/*记录和发送故障码*/
SetErrorData(EFUNC_CHECK_LABOUR_CANCEL_VALID,
CI_DEVICE_TYPE_LOGICSEC,
0,
ETYPE_LOGSEC_LINSHIXIANSU_CANCLE_STATE,
GetLabourCancelLinShiXianState(), ESEND_LEVEL_ATS);
retVal = CI_ERROR;
/* 不处理 */
}
LabourCancelLSXianStaMoveProc(LINSHIXIANSU_LABOURCANCLE_YES_STATE); /*人工取消临时限速状态迁移*/
return retVal;
}
/*
*
@@ -9524,6 +9425,8 @@ void CancleLinShiXianSuManage_Vir(const UINT8 virCIid)
if ((LOGSEC_LSXS_SET_STATE_INVALID != state) && (belongVirCIid == virCIid))
{/*具有临时限速属性*/
SetLogSecLinShiXianSuState(logSecId, LOGSEC_LSXS_SET_STATE_NO); /*取消临时限速*/
SetLogSecLinShiXianSuStateZc(logSecId, LOGSEC_LSXS_SET_STATE_NO); /*同时取消ZC的临时限速*/
/*备注:TMC尚不具备,限速清除先仅考虑和ZC通信*/
}
}
}
@@ -9563,100 +9466,127 @@ void CiTrainTestLogicManage(void)
NonRouteDataStruct* pNonRoute = NULL;
UINT16 wCollAgreeTryTrainRelayId = 0U;/*试车线采集同意试车继电器ID*/
UINT8 chRelayCollState = 0U;/*采集继电器状态*/
UINT8 ii = 0;
for (; ii < NONROUTE_ID_NUM_MAX; ii++)
{
pNonRoute = GetNonRouteDataPtr() + ii;
wCollAgreeTryTrainRelayId = GetSCXColAgreeTryRelayIdById(pNonRoute->NonRouteId);
chRelayCollState = GetRelayCollState(wCollAgreeTryTrainRelayId);
switch (trainTestStatus)
{
case CI_TRAIN_TEST_START: /* 试车请求按下 */
{
if (SCX_CLD_INTERFACE_RELAY == interfaceType)
{/*试车线与车辆段使用继电器接口*/
/* 试车请求按钮按下后,采集到同意试车,则进入到试车状态 */
if (RELAY_STATE_UP == chRelayCollState)
{
SetCiTrainTestStatus(CI_TRAIN_TEST_ON);
}
}
else if ((SCX_CLD_INTERFACE_COMM == interfaceType) || (SCX_CLD_SERIAL_PORT_COMM == interfaceType))
{/*试车线与车辆段使用通信接口*/
if (COMM_TRAIN_TEST_DEV_STATE_VALID == GetCommTrainTestSCXYSKJStatus())
{
SetCiTrainTestStatus(CI_TRAIN_TEST_ON);
}
}
else if (SCX_NONELOCAL_MODE == interfaceType)
{
SetCommTrainTestSCXYSKJStatus(COMM_TRAIN_TEST_DEV_STATE_VALID);
SetCommTrainTestSCXSQAJStatus(COMM_TRAIN_TEST_DEV_STATE_VALID);
SetCiTrainTestStatus(CI_TRAIN_TEST_ON);
}
else
{
/*不存在的接口方式*/
}
}
break;
case CI_TRAIN_TEST_STOP: /* 试车请求按钮取消 */
if (SCX_CLD_INTERFACE_RELAY == interfaceType)
{/*试车线与车辆段使用继电器接口*/
if (RELAY_STATE_DOWN == chRelayCollState)
{
SetCiTrainTestStatus(CI_TRAIN_TEST_OFF);
}
}
else if ((SCX_CLD_INTERFACE_COMM == interfaceType) || (SCX_CLD_SERIAL_PORT_COMM == interfaceType))
{/*试车线与车辆段使用通信接口*/
if (COMM_TRAIN_TEST_DEV_STATE_INVALID == GetCommTrainTestSCXYSKJStatus())
{
SetCiTrainTestStatus(CI_TRAIN_TEST_OFF);
}
}
else if (SCX_NONELOCAL_MODE == interfaceType)
{
SetCommTrainTestSCXYSKJStatus(COMM_TRAIN_TEST_DEV_STATE_INVALID);
SetCommTrainTestSCXSQAJStatus(COMM_TRAIN_TEST_DEV_STATE_INVALID);
SetCiTrainTestStatus(CI_TRAIN_TEST_OFF);
}
else
{
/*不存在的接口方式*/
}
break;
case CI_TRAIN_TEST_ON:
if (SCX_CLD_INTERFACE_RELAY == interfaceType)
{/*试车线与车辆段使用继电器接口*/
/* 试车中,未采集到同意试车,则为退回试车请求 */
if (RELAY_STATE_DOWN == chRelayCollState)
{
SetCiTrainTestStatus(CI_TRAIN_TEST_START);
}
}
else if ((SCX_CLD_INTERFACE_COMM == interfaceType) || (SCX_CLD_SERIAL_PORT_COMM == interfaceType))
{/*试车线与车辆段使用通信接口*/
if (COMM_TRAIN_TEST_DEV_STATE_INVALID == GetCommTrainTestSCXYSKJStatus())
{
SetCiTrainTestStatus(CI_TRAIN_TEST_START);
}
}
else
{
/*不存在的接口方式*/
}
break;
default:
/*不可达分支*/
break;
}
UINT8 ii = 0U;
UINT8 flag = 0U;
UINT8 chCldAndScxMergeFlag = GetCldAndScxMergeFlag();
UINT8 localCiType = GetLocalCiType();
if (CI_TRAIN_TEST_ON != GetCiTrainTestStatus())
{
DriveAllSignaleRedClose();
if (CI_TYPE_SCX == localCiType)
{
flag = 1U;
}
else if (CI_TYPE_CLD == localCiType)
{
if (CLD_SCX_MERGE_ON == chCldAndScxMergeFlag)
{/*是车辆段,且车辆段与试车线合设*/
flag = 1U;
}
}
else
{
/*无处理*/
}
if (1U == flag)
{
for (; ii < NONROUTE_ID_NUM_MAX; ii++)
{
pNonRoute = GetNonRouteDataPtr() + ii;
wCollAgreeTryTrainRelayId = GetSCXColAgreeTryRelayIdById(pNonRoute->NonRouteId);
chRelayCollState = GetRelayCollState(wCollAgreeTryTrainRelayId);
switch (trainTestStatus)
{
case CI_TRAIN_TEST_START: /* 试车请求按下 */
{
if (SCX_CLD_INTERFACE_RELAY == interfaceType)
{/*试车线与车辆段使用继电器接口*/
/* 试车请求按钮按下后,采集到同意试车,则进入到试车状态 */
if (RELAY_STATE_UP == chRelayCollState)
{
SetCiTrainTestStatus(CI_TRAIN_TEST_ON);
}
}
else if ((SCX_CLD_INTERFACE_COMM == interfaceType) || (SCX_CLD_SERIAL_PORT_COMM == interfaceType))
{/*试车线与车辆段使用通信接口*/
if (COMM_TRAIN_TEST_DEV_STATE_VALID == GetCommTrainTestSCXYSKJStatus())
{
SetCiTrainTestStatus(CI_TRAIN_TEST_ON);
}
}
else if (SCX_NONELOCAL_MODE == interfaceType)
{
SetCommTrainTestSCXYSKJStatus(COMM_TRAIN_TEST_DEV_STATE_VALID);
SetCommTrainTestSCXSQAJStatus(COMM_TRAIN_TEST_DEV_STATE_VALID);
SetCiTrainTestStatus(CI_TRAIN_TEST_ON);
}
else
{
/*不存在的接口方式*/
}
}
break;
case CI_TRAIN_TEST_STOP: /* 试车请求按钮取消 */
if (SCX_CLD_INTERFACE_RELAY == interfaceType)
{/*试车线与车辆段使用继电器接口*/
if (RELAY_STATE_DOWN == chRelayCollState)
{
SetCiTrainTestStatus(CI_TRAIN_TEST_OFF);
}
}
else if ((SCX_CLD_INTERFACE_COMM == interfaceType) || (SCX_CLD_SERIAL_PORT_COMM == interfaceType))
{/*试车线与车辆段使用通信接口*/
if (COMM_TRAIN_TEST_DEV_STATE_INVALID == GetCommTrainTestSCXYSKJStatus())
{
SetCiTrainTestStatus(CI_TRAIN_TEST_OFF);
}
}
else if (SCX_NONELOCAL_MODE == interfaceType)
{
SetCommTrainTestSCXYSKJStatus(COMM_TRAIN_TEST_DEV_STATE_INVALID);
SetCommTrainTestSCXSQAJStatus(COMM_TRAIN_TEST_DEV_STATE_INVALID);
SetCiTrainTestStatus(CI_TRAIN_TEST_OFF);
}
else
{
/*不存在的接口方式*/
}
break;
case CI_TRAIN_TEST_ON:
if (SCX_CLD_INTERFACE_RELAY == interfaceType)
{/*试车线与车辆段使用继电器接口*/
/* 试车中,未采集到同意试车,则为退回试车请求 */
if (RELAY_STATE_DOWN == chRelayCollState)
{
SetCiTrainTestStatus(CI_TRAIN_TEST_START);
}
}
else if ((SCX_CLD_INTERFACE_COMM == interfaceType) || (SCX_CLD_SERIAL_PORT_COMM == interfaceType))
{/*试车线与车辆段使用通信接口*/
if (COMM_TRAIN_TEST_DEV_STATE_INVALID == GetCommTrainTestSCXYSKJStatus())
{
SetCiTrainTestStatus(CI_TRAIN_TEST_START);
}
}
else
{
/*不存在的接口方式*/
}
break;
default:
/*不可达分支*/
break;
}
if (CI_TRAIN_TEST_ON != GetCiTrainTestStatus())
{
DriveAllSignaleRedClose();
}
}
}
else
{
/*无处理*/
}
}
/*
@@ -9668,14 +9598,20 @@ void DriveAllSignaleRedClose(void)
{
UINT16 signalSum = GetSignalCurSum();
UINT16 ii = 0u;
UINT8 virCIid = 0u;
UINT16 signalId = 0U;
UINT8 chLocalVirCiType = 0u;
for (ii = 0u; ii < signalSum; ii++)
{
UINT16 signalId = GetSignalId(ii);
/* 本机 */
if (GetSignalBelongCiId(signalId) == GetSystemParaLocalCiId())
{
signalId = GetSignalId(ii);
virCIid = GetSignalBelongVirCiId(signalId);
chLocalVirCiType = GetLocalVirCiType(virCIid);/*获取虚拟联锁类型*/
if (CI_TYPE_SCX == chLocalVirCiType)
{
SetSignalCurDriveColor(signalId, SIGNAL_DRIVECOLOUR_REDCLOSE);
}
}
}
}
@@ -14397,7 +14333,6 @@ void SetRouteOverlapNeedCIlockM(const UINT16 routeId)
{
UINT8 routeBelongCIid = GetRouteBelongCiId(routeId);
UINT8 localCIid = GetSystemParaLocalCiId();
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 virCIid = 0u;
UINT8 ciCtrModeFlag = 0u;
UINT8 setflag = 0u;
@@ -14409,15 +14344,10 @@ void SetRouteOverlapNeedCIlockM(const UINT16 routeId)
if (localCIid == routeBelongCIid)
{
/*获取相关标志*/
if (FUNC_SWITCH_ON == includeVirFlag)
{
virCIid = GetRouteBelongVirCiId(routeId);
ciCtrModeFlag = GetVirCImode(virCIid);/*获取联锁控制模式*/
}
else
{
ciCtrModeFlag = GetCiModeFlag();
}
virCIid = GetRouteBelongVirCiId(routeId);
ciCtrModeFlag = GetVirCImode(virCIid);/*获取联锁控制模式*/
triggerFlag = GetRouteAutoTriggerFlag(routeId); /*获取进路的自动触发标志*/
/*进路所属联锁紧急站控下,需要保护区段由联锁锁闭,设置该标志*/
if (CI_MODE_CI_LOCAL == ciCtrModeFlag)/*是联锁控制*/
@@ -16499,6 +16429,7 @@ void OverlapStateUpdateManage(void)
if (CI_SUCCESS == chTempCheckFlag)
{
SetOverlapPreLoaborUnlockState(wOverlapId, PRO_PRE_LABOR_UNLOCK_STATE_NO);
SetOverlapAtsLastTimeLockCyc(wOverlapId, 0U);
}
else
{
@@ -628,14 +628,6 @@ void StartTrianTestManage(void);
*/
void StopTrianTestManage(void);
/*
*
*
*
CI_ERROR
CI_SUCCESS
*/
UINT8 CancleLinShiXianSuManage(void);
/*
*
*
@@ -3107,6 +3107,7 @@ static UINT8 OtherCiValidErrCheck(UINT16 const routeId)
UINT8 toOpenCheckFlag = 0u;/*恢复可重开信号的条件标志*/
UINT8 otherResult = 0u;/*其他联锁检查条件返回值*/
UINT8 cFuncSwitchSpks = 0U; /*SPKS信号重开检查进路级别开关*/
UINT8 cPsdExceptOpenState = 0U; /*PSD异常打开状态*/
if (routeLevel == ROUTE_LEVEL_BLOC)
{
@@ -3132,7 +3133,7 @@ static UINT8 OtherCiValidErrCheck(UINT16 const routeId)
psdSum = GetSignalRelatedPsdSum(rtStartSigId);/*获得进路始端信号机关联的PSD数量*/
psdIdBuf = GetSignalRelatedPsdBuf(rtStartSigId);/*获得进路始端信号机关联的PSD ID数组*/
/*开始检查*/
/*开始检查*/
for (i = 0u; i < checkSum; i++)
{
tmpOtherCiDevInfo = &dataOtherCiDevBuf[i];
@@ -3160,8 +3161,16 @@ static UINT8 OtherCiValidErrCheck(UINT16 const routeId)
{
if (psdIdBuf[j] == tmpOtherCiDevInfo->DevId)
{
toOpenCheckFlag = 1u;
break;
cPsdExceptOpenState = GePsdExceptOpenState(tmpOtherCiDevInfo->DevId);
if (PSD_EXCEPT_OPEN_NO == cPsdExceptOpenState)
{
toOpenCheckFlag = 1U; /*PSD未异常打开,设置可自动重开*/
}
else
{
toOpenCheckFlag = 0U; /*存在PSD异常打开,停止遍历,设置不可自动重开*/
break;
}
}
}
}
@@ -3670,7 +3679,7 @@ static UINT8 OpenBlocRouteOverlapErrCheck(const UINT16 routeId)
}
}
if(CI_TRADITION_RAILWAY == lineIdentity)
if (CI_TRADITION_RAILWAY == lineIdentity)
{
/*保护区段道岔【位置正确】*/
if (CI_SUCCESS == reResult)
@@ -3731,46 +3740,39 @@ static UINT8 OpenBlocRouteOverlapErrCheck(const UINT16 routeId)
}
}
if (FUNC_SWITCH_ON == cSndSideProFuncSwitch)
/*保护区段关联防护道岔【位置正确】*/
if (CI_SUCCESS == reResult)
{
/*二级侧防开关配置为支持二级侧防时,可不检查保护区段防护道岔位置及可动性,通过检查侧防条件防护*/
}
else
{
/*保护区段关联防护道岔【位置正确】*/
if (CI_SUCCESS == reResult)
devId = 0u;
devState = 0u;
checkResult = OvlpRelatedProtSwitchPosCheck(overlapId, &devId, &devState);
if (checkResult == CI_SUCCESS)
{
devId = 0u;
devState = 0u;
checkResult = OvlpRelatedProtSwitchPosCheck(overlapId, &devId, &devState);
if (checkResult == CI_SUCCESS)
{
/* 通过检查 */
reResult = CI_SUCCESS;
}
else
{
/* 失败返回 */
reResult = CI_ERROR;
}
/* 通过检查 */
reResult = CI_SUCCESS;
}
/*保护区段关联防护道岔【防护锁闭】或【单锁且防护锁闭】*/
if (CI_SUCCESS == reResult)
else
{
devId = 0u;
devState = 0u;
checkResult = OvlpRelatedProtSwitchLockCheck(overlapId, &devId, &devState);
if (checkResult == CI_SUCCESS)
{
/* 通过检查 */
reResult = CI_SUCCESS;
}
else
{
/* 失败返回 */
reResult = CI_ERROR;
}
/* 失败返回 */
reResult = CI_ERROR;
}
}
/*保护区段关联防护道岔【防护锁闭】或【单锁且防护锁闭】*/
if (CI_SUCCESS == reResult)
{
devId = 0u;
devState = 0u;
checkResult = OvlpRelatedProtSwitchLockCheck(overlapId, &devId, &devState);
if (checkResult == CI_SUCCESS)
{
/* 通过检查 */
reResult = CI_SUCCESS;
}
else
{
/* 失败返回 */
reResult = CI_ERROR;
}
}
@@ -3792,7 +3794,7 @@ static UINT8 OpenBlocRouteOverlapErrCheck(const UINT16 routeId)
if (FUNC_SWITCH_ON == cSndSideProFuncSwitch)
{
/*仅在二级侧防开关配置为支持二级侧防时才进行侧防条件检查*/
/*检查保护区段侧防道岔区段状态*/
/*检查保护区段侧防道岔区段状态*/
devId = 0u;
devState = 0u;
checkResult = OlapSideProtectConditionCheck(overlapId, 0U, 0U);
@@ -3823,7 +3825,7 @@ static UINT8 OpenBlocRouteOverlapErrCheck(const UINT16 routeId)
{
devId = 0u;
devState = 0u;
checkResult = OverlapAllSecJumpLockStateCheck(overlapId,&devId,&devState);
checkResult = OverlapAllSecJumpLockStateCheck(overlapId, &devId, &devState);
if (CI_ERROR == checkResult)
{
reResult = checkResult;
@@ -3844,7 +3846,7 @@ static UINT8 OpenBlocRouteOverlapErrCheck(const UINT16 routeId)
{
devId = 0u;
devState = 0u;
checkResult = OverlapFloodGateStateCheck(overlapId,&devId,&devStateType,&devState);
checkResult = OverlapFloodGateStateCheck(overlapId, &devId, &devStateType, &devState);
if (CI_ERROR == checkResult)
{
reResult = checkResult;
@@ -3863,11 +3865,11 @@ static UINT8 OpenBlocRouteOverlapErrCheck(const UINT16 routeId)
}
else
{
;
}
}
}
else
{
@@ -7100,23 +7100,187 @@ UINT8 CLDPhySectionFaultUnlockDeal(const UINT16 phySectionId,const UINT16 lockBe
}
/*
*
* void
*
*
* void
by hh 20251208
*/
void CancelWashWorkLogicM(void)
{/*取消洗车命令*/
UINT16 washMachineId = 0u;
washMachineId = GetWashMachineId(0u);
#if 0
SetCancelWashMachineFlag(washMachineId,CANCEL_WASH_FLAG_SET_YES);
#endif
if (washMachineId >0u)
{/*收到现地取消洗车命令,直接把洗车同意按钮状逻辑态置为抬起*/
(void)SetWashmachineXTALogicState(washMachineId,XTA_STATE_RAISE_UP);
{
UINT16 washMachineId = 0U; /*洗车机ID*/
UINT16 wDownWashRelateRouteFirstId = 0U; /*降级模式洗车线控制台表示灯1关联进路ID*/
UINT8 chRouteState = 0U;/*进路状态*/
UINT8 downWashAllowState = 0U;/*降级模式洗车同意状态(融合)*/
UINT8 washMachineButtonType = GetCiFunctionSwitchConfig(FUNC_WDOWNWASH_ZIFUSHI_BUTTON); /*降级模式洗车同意按钮自复式类型*/
washMachineId = GetWashMachineId(0U);
if ((FUNC_SWITCH_ON == washMachineButtonType) && (washMachineId > 0u) && (washMachineId < WASHMACHINE_SUM_MAX))
{
downWashAllowState = GetDownWashAllowState(washMachineId);
if (WASH_COL_STATE_ALLOW_YES == downWashAllowState)
{
wDownWashRelateRouteFirstId = GetDownWashRelateRoute1Id(washMachineId);
chRouteState = GetRouteState(wDownWashRelateRouteFirstId);
if (ROUTE_STATE_IDLE == chRouteState)
{
/*设置降级模式洗车线和DCC的洗车同意按钮状态无效*/
SetDownWashAllowColState(washMachineId, WASH_COL_STATE_ALLOW_NO);
/*清除洗车线洗车同意按钮有效周期*/
SetDownWashBtVadCycle(washMachineId, 0U);
SetDownDccWashAllowColState(washMachineId, WASH_COL_STATE_ALLOW_NO);
/*清除DCC洗车同意按钮有效周期*/
SetDownWashDccBtVadCycle(washMachineId, 0U);
SetDownWashReqState(washMachineId, WASH_REQ_STATE_ALLOW_NO);
SetDownWashReqCycle(washMachineId, 0U);
}
else
{
/*向ATS报警进路未取消,请先取消进路 0XB5*/
SetCiSendCmdBackInfoData(CI_BACK_ROUTE_IDLE_NOT, CI_DEVICE_TYPE_ROUTE, wDownWashRelateRouteFirstId, 0U, 0U);
}
}
else
{
/*向ATS报警"当前洗车机洗车同意按钮未按下,不需要取消 0XB6"*/
SetCiSendCmdBackInfoData(CI_BACK_WASH_BUTTON_PRESS_NOT, CI_DEVICE_TYPE_WASHMACHINE, washMachineId, 0U, 0U);
}
}
else
{
/*其他情况不处理*/
}
}
/*
*
*
* void
*by hh 20251208
*/
void ReqWashWorkLogicM(void)
{
UINT32 curCycle = Get2oo2CurCycleNum(); /*当前周期号*/
UINT8 downWashReqState = WASH_REQ_STATE_ALLOW_NO; /*洗车机洗车请求状态*/
UINT16 wMachineId = 0U; /*洗车机ID*/
UINT8 washMachineButtonType = GetCiFunctionSwitchConfig(FUNC_WDOWNWASH_ZIFUSHI_BUTTON); /*降级模式洗车同意按钮自复式类型*/
wMachineId = GetWashMachineId(0U);
if((FUNC_SWITCH_ON == washMachineButtonType) && (wMachineId >0u) && (wMachineId < WASHMACHINE_SUM_MAX))
{
downWashReqState = GetDownWashReqState(wMachineId);
if (WASH_REQ_STATE_ALLOW_NO == downWashReqState)
{
/*设置降级模式洗车请求有效*/
SetDownWashReqState(wMachineId, WASH_REQ_STATE_ALLOW_YES);
/*设置降级模式洗车请求周期号有效*/
SetDownWashReqCycle(wMachineId, curCycle);
}
else
{
/*向ATS报警当前洗车机洗车请求有效,请勿重复操作 0xB3*/
SetCiSendCmdBackInfoData(CI_BACK_WASH_APPLY_NOT, CI_DEVICE_TYPE_WASHMACHINE, wMachineId, 0U, 0U);
}
}
else
{
/*不处理*/
}
}
/*
*
*
* void
*by hh 20251208
*/
void ReqPassWashWorkLogicM(void)
{
UINT32 curCycle = Get2oo2CurCycleNum(); /*当前周期号*/
UINT8 downWashPassReqState = WASH_REQ_STATE_ALLOW_NO; /*反向洗车请求状态*/
UINT16 wMachineId = 0U; /*洗车机ID*/
UINT8 washMachineButtonType = GetCiFunctionSwitchConfig(FUNC_WDOWNWASH_ZIFUSHI_BUTTON); /*降级模式洗车同意按钮自复式类型*/
wMachineId = GetWashMachineId(0U);
if ((FUNC_SWITCH_ON == washMachineButtonType) && (wMachineId > 0u) && (wMachineId < WASHMACHINE_SUM_MAX))
{
downWashPassReqState = GetDownWashPassReqState(wMachineId);
if (WASH_REQ_STATE_ALLOW_NO == downWashPassReqState)
{
/*设置降级模式反向洗车请求有效*/
SetDownWashPassReqState(wMachineId, WASH_REQ_STATE_ALLOW_YES);
/*设置降级模式反向洗车请求周期号有效*/
SetDownWashPassReqCycle(wMachineId, curCycle);
}
else
{
SetCiSendCmdBackInfoData(CI_BACK_WASH_PASSAPPLY_NOT, CI_DEVICE_TYPE_WASHMACHINE, wMachineId, 0U, 0U);
}
}
else
{
/*不处理*/
}
}
/*
*
*
* void
*by hh 20251208
*/
void CancelPassWashWorkLogicM(void)
{
UINT16 wDownWashRelateRouteSecId = 0U; /*降级模式洗车线控制台表示灯2关联进路ID*/
UINT8 chRouteState = 0U;/*进路状态*/
UINT8 downWashAllowPassState = 0U;/*降级模式反向通过洗车同意状态(融合)*/
UINT16 wMachineId = 0U; /*洗车机ID*/
UINT8 washMachineButtonType = GetCiFunctionSwitchConfig(FUNC_WDOWNWASH_ZIFUSHI_BUTTON); /*降级模式洗车同意按钮自复式类型*/
wMachineId = GetWashMachineId(0U);
if ((FUNC_SWITCH_ON == washMachineButtonType) && (wMachineId > 0u && wMachineId < WASHMACHINE_SUM_MAX))
{
downWashAllowPassState = GetDownWashAllowPassState(wMachineId);
if (WASH_COL_STATE_ALLOW_YES == downWashAllowPassState)
{
wDownWashRelateRouteSecId = GetDownWashRelateRoute2Id(wMachineId);
chRouteState = GetRouteState(wDownWashRelateRouteSecId);
if (ROUTE_STATE_IDLE == chRouteState)
{
/*设置降级模式洗车线和DCC的反向洗车同意按钮状态无效*/
SetDownWashAllowPassColState(wMachineId, WASH_COL_STATE_ALLOW_NO);
/*清除洗车线反向通过同意按钮有效周期*/
SetDownWashBtVadPassCycle(wMachineId, 0U);
SetDownDccWashAllowPassColState(wMachineId, WASH_COL_STATE_ALLOW_NO);
/*清除DCC反向通过同意按钮有效周期*/
SetDownWashDccBtVadPassCycle(wMachineId, 0U);
SetDownWashPassReqState(wMachineId, WASH_REQ_STATE_ALLOW_NO);
SetDownWashPassReqCycle(wMachineId, 0U);
}
else
{
/*向ATS报警进路未取消,请先取消进路 0XB5*/
SetCiSendCmdBackInfoData(CI_BACK_ROUTE_IDLE_NOT, CI_DEVICE_TYPE_ROUTE, wDownWashRelateRouteSecId, 0U, 0U);
}
}
else
{
/*向ATS报警"洗车机XXX反向通过同意按钮未按下,不需要取消 0XB7"*/
SetCiSendCmdBackInfoData(CI_BACK_WASH_PASSBUTTON_PRESS_NOT, CI_DEVICE_TYPE_WASHMACHINE, wMachineId, 0U, 0U);
}
}
else
{
/*其他情况不处理*/
}
}
/*
*
* void
@@ -766,12 +766,37 @@ UINT16 GetReturnId(const UINT16 routeId);
void DTrainRtnUnlockRemoteRAllLockP(const UINT16 routeId);
/*
*
* void
* void
*
*
* void
by hh 20251208
*/
void CancelWashWorkLogicM(void);
/*
*
*
* void
*by hh 20251208
*/
void ReqWashWorkLogicM(void);
/*
*
*
* void
*by hh 20251208
*/
void ReqPassWashWorkLogicM(void);
/*
*
* const UINT16 wMachineId ID
* void
*by hh 20251208
*/
void CancelPassWashWorkLogicM(void);
/*
*
* void
@@ -184,7 +184,6 @@ UINT8 RouteSignalEnemyVainCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *pDevS
/*相邻联锁是否支持继电接口*/
UINT8 funcSwitchSupportRelayInterface = GetCiFunctionSwitchConfig(FUNC_SWITCH_USE_RELAY_INTERFACE_BETWEEN_NEIGHBOURCI);
UINT8 confirmRelayInterfaceFlag = GetCiCiRelayInterfConfirmFlag();/*继电接口确认状态*/
routeInitEnemyState = GetRouteInitEnemyStatus(routeId);/*获取进路初始化敌对*/
/*指针防空*/
@@ -272,9 +271,7 @@ UINT8 RouteSignalEnemyVainCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *pDevS
if (localCiID != sigBelongCiId)
{/*不属于本联锁的信号机*/
/*更新与CI通信状态*/
(void)UpdateCiTransmitState(localCiID, CI_SYSTEM_TYPE_RCI, sigBelongCiId);
commNeiborCiState = GetCiTransmitState(CI_SYSTEM_TYPE_RCI,sigBelongCiId);
commNeiborCiState = GetLocalCiAndOtherCiTransSta(sigBelongCiId);
if (TRANSMIT_STATE_GOOD != commNeiborCiState)
{/*与相邻联锁通信中断,认为敌对条件成立*/
if ((CICI_RELAY_INTERFACE_CONFIRM_YES == confirmRelayInterfaceFlag)&&
@@ -447,9 +444,8 @@ UINT8 ReverseRouteSigEnemyVainCheck(UINT16 const routeId,UINT16 *pDevId,UINT8 *p
if (localCiID != sigBelongCiId)
{/*不属于本联锁的信号机*/
/*更新与CI通信状态*/
(void)UpdateCiTransmitState(localCiID, CI_SYSTEM_TYPE_RCI, sigBelongCiId);
commNeiborCiState = GetCiTransmitState(CI_SYSTEM_TYPE_RCI,sigBelongCiId);
commNeiborCiState = GetLocalCiAndOtherCiTransSta(sigBelongCiId);
if (TRANSMIT_STATE_GOOD != commNeiborCiState)
{/*与相邻联锁通信中断,认为敌对条件成立*/
*pDevId = devId;
@@ -3691,6 +3687,9 @@ UINT8 OvlpRelatedProtSwiMovValCheck(UINT16 const overlapId, UINT16 *pDevId, UINT
UINT8 cSwitchBelongCiId = 0U; /*道岔所属控区*/
UINT8 cAlarmType = FLAG_UNSET; /*报警类型:0xAA-报警道岔位置错误,0x55-报警道岔可动性检查错误*/
UINT8 cProSwCheckResultFlag = 0U; /*防护道岔检查结果标志*/
UINT8 cSndSideProFuncSwitch = 0U; /*二级侧防功能开关*/
cSndSideProFuncSwitch = GetSndSideProtectFuncSwitch(); /*二级侧防功能开关*/
/* 检查封锁状态 */
if (0u == checkSum)
@@ -3711,43 +3710,50 @@ UINT8 OvlpRelatedProtSwiMovValCheck(UINT16 const overlapId, UINT16 *pDevId, UINT
cSwitchBelongCiId = GetSwitchBelongCiId(devId);
if (cLocalCiId == cSwitchBelongCiId)
{
devState = GetSwitchCurPosition(devId);
switchPos = dataIdBuf[i].ProtectPosition;
if (devState == switchPos)
if ((FUNC_SWITCH_ON == cSndSideProFuncSwitch) && (SWITCH_POSITION_DINGWEI == switchPos))
{
/*道岔位置正确*/
/*如果最近一次产生的有效驱动仍在延续,则返回失败*/
checkResult = checkSwtLastValDrvPosStayorNot(devId, switchPos);
if (CI_SUCCESS == checkResult)
{
}
else
{
reVal = CI_ERROR;
}
}
else if (SWITCH_POSITION_SIKAI == devState)
{
/*四开*/
reVal = CI_ERROR;
}
else if (SWITCH_POSITION_JICHA == devState)
{
/*挤岔*/
reVal = CI_ERROR;
/*支持二级侧防且防护道岔防护位置为定位时,不检查防护道岔位置和可动性*/
}
else
{
/* 道岔位置不正确 */
switchMoveState = GetSwitchMoveValidState(devId, SWITCH_OPER_NO_DANCAO, sendLevel);
if (CI_SUCCESS == switchMoveState)
devState = GetSwitchCurPosition(devId);
if (devState == switchPos)
{
/*道岔可动*/
/*道岔位置正确*/
/*如果最近一次产生的有效驱动仍在延续,则返回失败*/
checkResult = checkSwtLastValDrvPosStayorNot(devId, switchPos);
if (CI_SUCCESS == checkResult)
{
}
else
{
reVal = CI_ERROR;
}
}
else if (SWITCH_POSITION_SIKAI == devState)
{
/*四开*/
reVal = CI_ERROR;
}
else if (SWITCH_POSITION_JICHA == devState)
{
/*挤岔*/
reVal = CI_ERROR;
}
else
{
/*道岔位置不正确 且 道岔不可动作*/
reVal = CI_ERROR;
/* 道岔位置不正确 */
switchMoveState = GetSwitchMoveValidState(devId, SWITCH_OPER_NO_DANCAO, sendLevel);
if (CI_SUCCESS == switchMoveState)
{
/*道岔可动*/
}
else
{
/*道岔位置不正确 且 道岔不可动作*/
reVal = CI_ERROR;
}
}
}
}
@@ -3868,6 +3874,9 @@ UINT8 OvlpRelatedProtSwitchPosCheck(UINT16 const overlapId,UINT16 *pDevId,UINT8
UINT8 devState = 0u;
UINT8 switchPos = 0u;
UINT8 reVal = CI_SUCCESS;
UINT8 cSndSideProFuncSwitch = 0U; /*二级侧防功能开关*/
cSndSideProFuncSwitch = GetSndSideProtectFuncSwitch(); /*二级侧防功能开关*/
/* 检查封锁状态 */
if (0u == checkSum)
@@ -3886,18 +3895,24 @@ UINT8 OvlpRelatedProtSwitchPosCheck(UINT16 const overlapId,UINT16 *pDevId,UINT8
devId = dataIdBuf[i].ProtectSwitchId;
devState = GetSwitchCurPosition(devId);
switchPos = dataIdBuf[i].ProtectPosition;
if (switchPos == devState)
if ((FUNC_SWITCH_ON == cSndSideProFuncSwitch) && (SWITCH_POSITION_DINGWEI == switchPos))
{
/*道岔位置正确*/
/*支持二级侧防且防护道岔防护位置为定位时,不检查防护道岔位置和可动性*/
}
else
{
/*道岔位置不正确*/
*pDevId = devId;
*pDevState = devState;
reVal = CI_ERROR;
break;
if (switchPos == devState)
{
/*道岔位置正确*/
}
else
{
/*道岔位置不正确*/
*pDevId = devId;
*pDevState = devState;
reVal = CI_ERROR;
break;
}
}
}
}
@@ -3925,6 +3940,9 @@ UINT8 OvlpRelatedProtSwitchLockCheck(UINT16 const overlapId,UINT16 *pDevId,UINT8
UINT16 devId = 0u;
UINT8 devState = 0u;
UINT8 reVal = CI_ERROR;
UINT8 cSndSideProFuncSwitch = 0U; /*二级侧防功能开关*/
cSndSideProFuncSwitch = GetSndSideProtectFuncSwitch(); /*二级侧防功能开关*/
if (NULL == dataIdBuf)
{
@@ -3939,19 +3957,26 @@ UINT8 OvlpRelatedProtSwitchLockCheck(UINT16 const overlapId,UINT16 *pDevId,UINT8
/*开始检查*/
for (i = 0u; i<checkSum; i++)
{
devId = dataIdBuf[i].ProtectSwitchId;
devState = GetSwitchLockStatus(devId);
if ((SWITCH_LOCK_STATUS_PROTECT == devState) || (SWITCH_LOCK_STATUS_DAP == devState))
devId = dataIdBuf[i].ProtectSwitchId;
if ((FUNC_SWITCH_ON == cSndSideProFuncSwitch) && (SWITCH_POSITION_DINGWEI == dataIdBuf[i].ProtectPosition))
{
/*道岔已【防护锁闭】或【单锁且防护锁闭*/
/*支持二级侧防且防护道岔防护位置为定位时,不检查防护道岔防护锁闭状态*/
}
else
{
/*道岔未【防护锁闭】或未【单锁且防护锁闭】*/
*pDevId = devId;
*pDevState = SWITCH_LOCK_STATUS_PROTECT_NO;
reVal = CI_ERROR;
break;
devState = GetSwitchLockStatus(devId);
if ((SWITCH_LOCK_STATUS_PROTECT == devState) || (SWITCH_LOCK_STATUS_DAP == devState))
{
/*道岔已【防护锁闭】或【单锁且防护锁闭】*/
}
else
{
/*道岔未【防护锁闭】或未【单锁且防护锁闭】*/
*pDevId = devId;
*pDevState = SWITCH_LOCK_STATUS_PROTECT_NO;
reVal = CI_ERROR;
break;
}
}
}
}
@@ -11791,7 +11816,7 @@ UINT8 CheckRouteEndSignalNotCbtc(UINT16 routeId,UINT8 functionId,UINT8 sendLevel
UINT8 sigalMaintainState = 0U;/*信号机维修点灯状态*/
UINT8 belongVirCI = 0u;
UINT8 allSignalBrightFlag = 0u; /*全站亮灯*/
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
bCiSwitchShowGreenYellow = GetCiFunctionSwitchConfig(CI_FUNCTION_SWITCH_SHOW_SIGNAL_GreenYellow);
if (FUNC_SWITCH_ON == bCiSwitchShowGreenYellow)/*如果显示绿黄灯开关【打开】*/
@@ -11815,15 +11840,10 @@ UINT8 CheckRouteEndSignalNotCbtc(UINT16 routeId,UINT8 functionId,UINT8 sendLevel
/*如果是灭灯 且非维修点灯*/
sigalMaintainState = GetSignalMaintainState(routeEndSignalId);/*信号机维修点灯状态*/
if (FUNC_SWITCH_ON == includeVirFlag)
{
belongVirCI = GetSignalBelongVirCiId(routeEndSignalId);
allSignalBrightFlag = GetVirCIAllSignalBrightState(belongVirCI);/*本虚拟联锁全站亮灯标志*/
}
else
{
allSignalBrightFlag = GetAllSignalBrightFlag(); /*全站亮灯标志*/
}
belongVirCI = GetSignalBelongVirCiId(routeEndSignalId);
allSignalBrightFlag = GetVirCIAllSignalBrightState(belongVirCI);/*本虚拟联锁全站亮灯标志*/
if ((SIGNAL_LIGHT_EXTICT_STATE_NO == endSignalLightExtinctState )&&(MAINTAIN_STATE_NO == sigalMaintainState))
{
routeState = GetRouteState(routeId);
@@ -12505,26 +12525,19 @@ UINT8 OpenRoutePlatformCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
UINT8 LeadzLockCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLevel)
{
UINT8 reResult = CI_ERROR; /*返回值*/
UINT8 includeVirFlag = 0U;
UINT8 belongVirCI = 0u;
UINT8 yLockState = 0u; /*引导总锁状态*/
UINT8 devState = 0u; /*设备状态*/
UINT16 routeStartSignalId = GetRouteStartSignalId(routeId); /*获取进路始端信号机*/
/*虚拟联锁ID*/
includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
/*获取进路引导属性*/
devState = GetRouteLeadProperty(routeId);
/*获取全站引导总锁的标志*/
if (FUNC_SWITCH_ON == includeVirFlag)
{
belongVirCI = GetRouteBelongVirCiId(routeId); /*获取进路所属虚拟联锁ID*/
yLockState = GetVirCIAllSwitchYLockState(belongVirCI);
}
else
{
yLockState = GetAllSwitchYLockFlag();
}
belongVirCI = GetRouteBelongVirCiId(routeId); /*获取进路所属虚拟联锁ID*/
yLockState = GetVirCIAllSwitchYLockState(belongVirCI);
if (ROUTE_LEAD_PROPERTY_YES == devState)
{
@@ -13078,7 +13091,7 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
/* 联锁逻辑检查 */
/*防护进路检查*/
if (overlapSum>0u)
if (overlapSum > 0u)
{
/*有防护进路*/
/*进路【保护区段锁闭Id】>0 且 保护区段【防护锁闭所属进路ID】等于当前进路*/
@@ -13092,18 +13105,18 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
else
{
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_ROUTE,routeId,ETYPE_ROUTE_OVERLAP_UNLOCK,devState,sendLevel);
SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, routeId, ETYPE_ROUTE_OVERLAP_UNLOCK, devState, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
}
/*所有防护区段【未封锁】*/
if(CI_SUCCESS == reResult)
if (CI_SUCCESS == reResult)
{
devId = 0u;
devState = 0u;
checkResult = OverlapAllSecFLockValidCheck(overlapId,&devId,&devState);
checkResult = OverlapAllSecFLockValidCheck(overlapId, &devId, &devState);
if (checkResult == CI_SUCCESS)
{
/* 通过检查 */
@@ -13119,11 +13132,11 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
}
/*所有防护区段【空闲】*/
if(CI_SUCCESS == reResult)
if (CI_SUCCESS == reResult)
{
devId = 0u;
devState = 0u;
checkResult = OpenBlockOvlpAllSecOccuClrCheck(overlapId,&devId,&devState);
checkResult = OpenBlockOvlpAllSecOccuClrCheck(overlapId, &devId, &devState);
if (checkResult == CI_SUCCESS)
{
/* 通过检查 */
@@ -13132,30 +13145,30 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
else
{
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,devId,ETYPE_ROUTE_OVERLAP_OCCUPY,devState,sendLevel);
SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_ROUTE_OVERLAP_OCCUPY, devState, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
}
}
if(CI_TRADITION_RAILWAY == lineIdentity)
if (CI_TRADITION_RAILWAY == lineIdentity)
{
/*保护区段道岔【位置正确】*/
if(CI_SUCCESS == reResult)
if (CI_SUCCESS == reResult)
{
devId = 0u;
devState = 0u;
checkResult = OverlapSwitchPosCheck(overlapId,&devId,&devState);
checkResult = OverlapSwitchPosCheck(overlapId, &devId, &devState);
if (checkResult == CI_SUCCESS)
{
/* 通过检查 */
reResult = CI_SUCCESS;
}
}
else
{
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_SWITCH,devId,ETYPE_SWT_POSTION_STATE,devState,sendLevel);
SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_POSTION_STATE, devState, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
}
@@ -13171,11 +13184,11 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
#if 0 /*进路办理完成并开灯,此时办理引导总锁,进路应保持原来状态不变*/
/*保护区段 内所有道岔【未引导总锁】*/
if(CI_SUCCESS == checkResult)
if (CI_SUCCESS == checkResult)
{
devId = 0u;
devState = 0u;
checkResult = OverlapSwitchYLockCheck(overlapId,&devId,&devState);
checkResult = OverlapSwitchYLockCheck(overlapId, &devId, &devState);
if (checkResult == CI_SUCCESS)
{
/* 通过检查 */
@@ -13184,7 +13197,7 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
else
{
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_SWITCH,devId,ETYPE_SWT_YLOCK_STATE,devState,sendLevel);
SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_YLOCK_STATE, devState, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
}
@@ -13192,11 +13205,11 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
#endif
/*保护区段 内所有道岔【未封锁】*/
if(CI_SUCCESS == reResult)
if (CI_SUCCESS == reResult)
{
devId = 0u;
devState = 0u;
checkResult = OverlapSwitchFLockStateCheck(overlapId,&devId,&devState);
checkResult = OverlapSwitchFLockStateCheck(overlapId, &devId, &devState);
if (checkResult == CI_SUCCESS)
{
/* 通过检查 */
@@ -13205,18 +13218,18 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
else
{
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_SWITCH,devId,ETYPE_SWT_FLOCK_STATE,devState,sendLevel);
SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_FLOCK_STATE, devState, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
}
}
/*保护区段 关联防护道岔【未封锁】*/
if(CI_SUCCESS == reResult)
if (CI_SUCCESS == reResult)
{
devId = 0u;
devState = 0u;
checkResult = OvlpRelProtSwiFLockStaCheck(overlapId,&devId,&devState);
checkResult = OvlpRelProtSwiFLockStaCheck(overlapId, &devId, &devState);
if (checkResult == CI_SUCCESS)
{
/* 通过检查 */
@@ -13225,56 +13238,49 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
else
{
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_SWITCH,devId,ETYPE_SWT_FLOCK_STATE,devState,sendLevel);
SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_FLOCK_STATE, devState, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
}
}
if (FUNC_SWITCH_ON == cSndSideProFuncSwitch)
/*保护区段关联防护道岔【位置正确】*/
if (CI_SUCCESS == reResult)
{
/*二级侧防开关配置为支持二级侧防时,不检查保护区段防护道岔位置及可动性,通过检查侧防条件防护*/
}
else
{
/*保护区段关联防护道岔【位置正确】*/
if (CI_SUCCESS == reResult)
devId = 0u;
devState = 0u;
checkResult = OvlpRelatedProtSwitchPosCheck(overlapId, &devId, &devState);
if (checkResult == CI_SUCCESS)
{
devId = 0u;
devState = 0u;
checkResult = OvlpRelatedProtSwitchPosCheck(overlapId, &devId, &devState);
if (checkResult == CI_SUCCESS)
{
/* 通过检查 */
reResult = CI_SUCCESS;
}
else
{
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_POSTION_STATE, devState, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
}
/* 通过检查 */
reResult = CI_SUCCESS;
}
/*保护区段关联防护道岔【防护锁闭】或【单锁且防护锁闭】*/
if (CI_SUCCESS == reResult)
else
{
devId = 0u;
devState = 0u;
checkResult = OvlpRelatedProtSwitchLockCheck(overlapId, &devId, &devState);
if (checkResult == CI_SUCCESS)
{
/* 通过检查 */
reResult = CI_SUCCESS;
}
else
{
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_LOCK_STATUS, devState, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
}
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_POSTION_STATE, devState, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
}
}
/*保护区段关联防护道岔【防护锁闭】或【单锁且防护锁闭】*/
if (CI_SUCCESS == reResult)
{
devId = 0u;
devState = 0u;
checkResult = OvlpRelatedProtSwitchLockCheck(overlapId, &devId, &devState);
if (checkResult == CI_SUCCESS)
{
/* 通过检查 */
reResult = CI_SUCCESS;
}
else
{
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_LOCK_STATUS, devState, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
}
}
@@ -13304,10 +13310,10 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
devState = 0u;
checkResult = OverlapInvSecAndConSwiCheckup(overlapId, &devId, &devState);
if(CI_SUCCESS == checkResult)
if (CI_SUCCESS == checkResult)
{
/* 通过检查 */
reResult = CI_SUCCESS;
reResult = CI_SUCCESS;
}
else
{
@@ -13349,7 +13355,7 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
{
devId = 0u;
devState = 0u;
checkResult = OverlapAllSecJumpLockStateCheck(overlapId,&devId,&devState);
checkResult = OverlapAllSecJumpLockStateCheck(overlapId, &devId, &devState);
if (CI_SUCCESS == checkResult)
{
/* 通过检查 */
@@ -13358,18 +13364,18 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
else
{
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,devId,ETYPE_PS_JUMP_LOCK,devState,sendLevel);
SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, ETYPE_PS_JUMP_LOCK, devState, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
}
}
}
/*保护区段内所有防淹门状态检查*/
if (CI_SUCCESS == reResult)
{
devId = 0u;
devState = 0u;
checkResult = OverlapFloodGateStateCheck(overlapId,&devId,&devStateType,&devState);
checkResult = OverlapFloodGateStateCheck(overlapId, &devId, &devStateType, &devState);
if (CI_SUCCESS == checkResult)
{
/* 通过检查 */
@@ -13378,7 +13384,7 @@ UINT8 OpenBlocRouteOverlapCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
else
{
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_FLOODGATE,devId,devStateType,devState,sendLevel);
SetErrorData(functionId, CI_DEVICE_TYPE_FLOODGATE, devId, devStateType, devState, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
}
@@ -2558,25 +2558,18 @@ UINT8 LockRouteOverlapLogicProcess(UINT16 const routeId, UINT16 const overlapId,
/*人工解锁条件检查*/
if (CI_SUCCESS == reResult)
{
if ((LOCK_OVERLAP_CMD_YES == laborLockCmdFlag) && (ATS_LOCK_OVERLAP == lockType))
devId = 0u;
devState = 0u;
chPreLoaborUnlockState = OverlapPreLaborUnLockStateCheck(routeId, &devId, &devState);
if (CI_SUCCESS == chPreLoaborUnlockState)
{
/*人工锁闭保护区段,允许*/
/*当该保护区段对应的所有进路均空闲后再次锁闭保护区段*/
;
}
else
{
devId = 0u;
devState = 0u;
chPreLoaborUnlockState = OverlapPreLaborUnLockStateCheck(routeId, &devId, &devState);
if (CI_SUCCESS == chPreLoaborUnlockState)
{
/*当该保护区段对应的所有进路均空闲后再次锁闭保护区段*/
;
}
else
{
reResult = CI_ERROR;
SetErrorData(functionId, CI_DEVICE_TYPE_OVERLAP, devId, ETYPE_OVERLAP_LABORUNLOCK_STATE, devState, sendLevel);
}
reResult = CI_ERROR;
SetErrorData(functionId, CI_DEVICE_TYPE_OVERLAP, devId, ETYPE_OVERLAP_LABORUNLOCK_STATE, devState, sendLevel);
}
}
@@ -2973,7 +2966,7 @@ UINT8 LockRouteOverlapLogicProcess(UINT16 const routeId, UINT16 const overlapId,
/*保护区段关联防护道岔【未引导总锁】*/
devId = 0u;
devState = 0u;
checkResult = OvlpRelatedProSwitchYLockCheck(overlapId,&devId,&devState);
checkResult = OvlpRelatedProSwitchYLockCheck(overlapId, &devId, &devState);
if (checkResult == CI_SUCCESS)
{
/* 通过检查,保持当前状态 */
@@ -2981,78 +2974,71 @@ UINT8 LockRouteOverlapLogicProcess(UINT16 const routeId, UINT16 const overlapId,
else
{
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_SWITCH,devId,ETYPE_SWT_YLOCK_STATE,devState,sendLevel);
SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_YLOCK_STATE, devState, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
}
if (FUNC_SWITCH_ON == cSndSideProFuncSwitch)
/*保护区段关联防护道岔位置正确或位置不正确但可动作*/
if ((CI_SUCCESS == reResult) || (RETURN_WAIT_SWITCH_USING == reResult) || (RETURN_LOCK_ERR_SWITPOS == reResult))
{
/*支持二级侧防时,不检查防护道岔位置和可动性*/
}
else
{
/*保护区段关联防护道岔位置正确或位置不正确但可动作*/
if ((CI_SUCCESS == reResult) || (RETURN_WAIT_SWITCH_USING == reResult) || (RETURN_LOCK_ERR_SWITPOS == reResult))
{
devId = 0u;
devState = 0u;
checkResult = OvlpRelatedProtSwiMovValCheck(overlapId, &devId, &devState, &cAlarmType);
devId = 0u;
devState = 0u;
checkResult = OvlpRelatedProtSwiMovValCheck(overlapId, &devId, &devState, &cAlarmType);
if (CI_SUCCESS == checkResult)
if (CI_SUCCESS == checkResult)
{
/* 通过检查,保持当前状态 */
}
else if (RETURN_WAIT_SWITCH_CHECK == checkResult)
{
if (RETURN_WAIT_SWITCH_USING == reResult)
{
/* 通过检查,保持当前状态 */
}
else if (RETURN_WAIT_SWITCH_CHECK == checkResult)
{
if (RETURN_WAIT_SWITCH_USING == reResult)
{
/*等待征用优先,优先级:等待征用>等待检查>道岔位置错误*/
}
else
{
reResult = RETURN_WAIT_SWITCH_CHECK; /*其它控区防护道岔可动性检查结果未确认,返回等待防护道岔检查*/
}
/*等待征用优先,优先级:等待征用>等待检查>道岔位置错误*/
}
else
{
/* 记录故障码 */
if (FLAG_SET == cAlarmType)
{
SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_MOVE_CHECK_RESULT, devState, sendLevel);
}
else
{
SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_POSTION_STATE, devState, sendLevel);
}
/* 失败返回 */
reResult = CI_ERROR;
reResult = RETURN_WAIT_SWITCH_CHECK; /*其它控区防护道岔可动性检查结果未确认,返回等待防护道岔检查*/
}
}
/*保护区段关联防护道岔位置正确*/
if ((CI_SUCCESS == reResult) || (RETURN_WAIT_SWITCH_USING == reResult) || (RETURN_WAIT_SWITCH_CHECK == reResult) || (RETURN_LOCK_ERR_SWITPOS == reResult))
else
{
devId = 0u;
devState = 0u;
checkResult = OvlpRelatedProtSwitchPosCheck(overlapId, &devId, &devState);
if (checkResult == CI_ERROR)
/* 记录故障码 */
if (FLAG_SET == cAlarmType)
{
if ((RETURN_WAIT_SWITCH_USING == reResult) || (RETURN_WAIT_SWITCH_CHECK == reResult))
{
/*维持当前返回值,优先级:等待征用>等待检查>道岔位置错误*/
}
else
{
/* 道岔位置不正确 */
reResult = RETURN_LOCK_ERR_SWITPOS;
}
SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_MOVE_CHECK_RESULT, devState, sendLevel);
}
else
{
/* 道岔位置正确 通过检查,保持当前状态 */
SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_POSTION_STATE, devState, sendLevel);
}
/* 失败返回 */
reResult = CI_ERROR;
}
}
/*保护区段关联防护道岔位置正确*/
if ((CI_SUCCESS == reResult) || (RETURN_WAIT_SWITCH_USING == reResult) || (RETURN_WAIT_SWITCH_CHECK == reResult) || (RETURN_LOCK_ERR_SWITPOS == reResult))
{
devId = 0u;
devState = 0u;
checkResult = OvlpRelatedProtSwitchPosCheck(overlapId, &devId, &devState);
if (checkResult == CI_ERROR)
{
if ((RETURN_WAIT_SWITCH_USING == reResult) || (RETURN_WAIT_SWITCH_CHECK == reResult))
{
/*维持当前返回值,优先级:等待征用>等待检查>道岔位置错误*/
}
else
{
/* 道岔位置不正确 */
reResult = RETURN_LOCK_ERR_SWITPOS;
}
}
else
{
/* 道岔位置正确 通过检查,保持当前状态 */
}
}
}
@@ -6718,7 +6704,7 @@ UINT8 UnlockRouteOverlapLogicProcess(UINT16 const routeId, UINT16* overlapId,UIN
/*进路最后一个区段*/
UINT16 const routeLastSecId = GetRouteLastPhySectionId(routeId);
UINT16 const secStopFlag = GetPhySecStopSteadyFlag(routeLastSecId);
UINT8 const secStopFlag = GetPhySecStopSteadyFlag(routeLastSecId);
/*防护进路*/
UINT8 const overlapSum = GetRouteOverlapSum(routeId);
@@ -6739,6 +6725,8 @@ UINT8 UnlockRouteOverlapLogicProcess(UINT16 const routeId, UINT16* overlapId,UIN
UINT8 chRoutCouplinkFlag = 0U;
UINT8 chCoupResult = 0U;
UINT8 chOverlapLaborUnlockSetState = 0U; /*保护区段人工解锁命令设置状态*/
UINT8 chOverlapUtUnlockMode = GetCiFunctionSwitchConfig(FUNC_OVERLAP_UT_UNLOCK_MODE);
localCiId = GetSystemParaLocalCiId();
SetOverlapCanLaborUnlockFlag(overlapLockedId,CANNOT_LABOR_UNLOCK_OVERLAP);/*每周期先设置不可人工解锁*/
@@ -6882,19 +6870,36 @@ UINT8 UnlockRouteOverlapLogicProcess(UINT16 const routeId, UINT16* overlapId,UIN
}
relyonStartCycNum = CalculaOverlapUnlockStartCycNum(overlapLockedId, devId);/*计算解锁起始倒计时*/
secStopTimeState = SystemOverTimeCheck(relyonStartCycNum, overlapUnLockCount);
if (((PHYSICAL_SECTION_STOPSTEADY_YES == secStopFlag) && (CI_TIME_IN == secStopTimeState)) || (CI_TIME_OUT == secStopTimeState))
{/*未超时且收到停稳信息,或是倒计时超时,则解锁保护区段*/
if (PHYSICAL_SECTION_STOPSTEADY_YES == secStopFlag)
{/*收到停稳信息,则解锁保护区段*/
reResult = CI_SUCCESS;
*overlapId = overlapLockedId;
}
else
{
/*未超时且未收到停稳信息,不能解锁保护区段*/
reResult = CI_ERROR;
*overlapId = overlapLockedId;
if (FUNC_SWITCH_ON == chOverlapUtUnlockMode)
{
/*不自动解锁*/
reResult = CI_ERROR;
*overlapId = overlapLockedId;
}
else
{
if (CI_TIME_OUT == secStopTimeState)
{
/*超时,解锁保护区段*/
reResult = CI_SUCCESS;
*overlapId = overlapLockedId;
}
else
{
reResult = CI_ERROR;
*overlapId = overlapLockedId;
}
}
}
}
else if (LOGICSECTION_OCCUPY_CT == utOrCtOccFlag)
@@ -7032,7 +7037,7 @@ UINT8 UnlockRouteOverlapLogicProcess(UINT16 const routeId, UINT16* overlapId,UIN
SetOverlapCanLaborUnlockFlag(overlapLockedId, CAN_LABOR_UNLOCK_OVERLAP);/*设置可以人工解锁保护区段*/
checkResult = CheckOverlapLaborUnlock(overlapLockedId);
checkResult = CheckOverlapLaborUnlock(overlapLockedId, routeId);
if (CI_SUCCESS == checkResult)
{
reResult = CI_SUCCESS;
@@ -11553,6 +11558,9 @@ void RouteLgcSecResReleaseProcess(const UINT16 wRouteId)
UINT16* routeLogIdBuf = NULL;
LogicTrainResStruct * pstTrainResInfo = NULL;
LogicSectionDataStructCC *pstLgcSecInfo = NULL;
UINT8 chLogSecLockState = 0u;
UINT8 chLogSecLogLockState = 0U;
/*获取进路逻辑区段数据*/
routeLogNum = GetRouteLogSectionSum(wRouteId);
routeLogIdBuf = GetRouteLogSectionIdBuf(wRouteId);
@@ -11570,6 +11578,8 @@ void RouteLgcSecResReleaseProcess(const UINT16 wRouteId)
wBelongRouteId = GetLogSecLockBelongRoute(wUnlockLgcSecId);
wLgcBufIndex = GetlogSectionBufIndex(wUnlockLgcSecId);
chLogSecLogLockState = GetLogSecLogLockState(wUnlockLgcSecId);
if (LOGIC_SECTION_SUM_MAX > wLgcBufIndex)
{
chKeepWork = CI_SUCCESS;
@@ -11581,7 +11591,7 @@ void RouteLgcSecResReleaseProcess(const UINT16 wRouteId)
if (CI_SUCCESS == chKeepWork)
{
/*锁闭所属进路等于本进路*/
/*锁闭所属进路等于本进路或逻辑区段已解锁*/
if (wBelongRouteId == wRouteId)
{
chLgcResTrainSum = GetLogSecTrainInfoSum(wUnlockLgcSecId);
@@ -11596,7 +11606,14 @@ void RouteLgcSecResReleaseProcess(const UINT16 wRouteId)
}
else
{
chKeepWork = CI_ERROR;
if ((0u == wBelongRouteId) && (LOG_SECTION_LOGLOCK_NO == chLogSecLogLockState))
{
/*不被进路锁闭且不被逻辑进路锁闭*/
}
else
{
chKeepWork = CI_ERROR;
}
}
}
else
@@ -11616,9 +11633,12 @@ void RouteLgcSecResReleaseProcess(const UINT16 wRouteId)
/*上一区段是否已解锁*/
pstTrainResInfo = GetLogSecTrainInfoById(wPreUnlockLgcSecId, wTrainId);
if (((LOGIC_SECTION_TRAIN_UNLOCK_YES == chLogSecReleaseFlag)||(0U==wTrainId))
chLogSecLockState = GetLogSecLockState(wUnlockLgcSecId);
if (((LOGIC_SECTION_TRAIN_UNLOCK_YES == chLogSecReleaseFlag)||(0U==wTrainId)||
((0u == wBelongRouteId) && (LOG_SECTION_LOGLOCK_NO == chLogSecLogLockState))
)
&& (NULL == pstTrainResInfo))
{
{/*上一区段已经解锁,本区段由列车申请资源释放或本区段已经解锁*/
/*删除该列车对应逻辑区段资源*/
(void)ComMemSet((void *)&pstLgcSecInfo[wLgcBufIndex].szTrainResData[jj], (UINT16)sizeof(LogicTrainResStruct), 0U);
debug_infor_printf((const)"LogSecRes Release LgcId: %d TrainId:%d Cyc\n"
@@ -11648,11 +11668,12 @@ void RouteLgcSecResReleaseProcess(const UINT16 wRouteId)
/*
*
* const UINT16 overlapId, ID
* const UINT16 wRouteId ID
* CI_SUCCESS:
CI_ERROR:
* edit cgh 20250928
*/
UINT8 CheckOverlapLaborUnlock(const UINT16 overlapId)
UINT8 CheckOverlapLaborUnlock(const UINT16 overlapId,const UINT16 wRouteId)
{
UINT8 rtVal = CI_ERROR;
UINT8 OverlapLaborUnlockSetState = 0u;
@@ -11660,8 +11681,10 @@ UINT8 CheckOverlapLaborUnlock(const UINT16 overlapId)
UINT32 laborUnlockStartCycNum =0u;
UINT8 laborUnlockStopTimeState =0u;
UINT8 cTimeCheckFlag = CI_TIME_NO;
UINT16 wRouteLastSecId = 0U; /*进路最后一个区段ID*/
UINT8 chSecStopFlag = 0U; /*区段停稳标志*/
if ((0U < overlapId) && (OVERLAP_SUM_MAX > overlapId))
if ((0U < overlapId) && (OVERLAP_SUM_MAX > overlapId) && (0U < wRouteId) && (ROUTE_SUM_MAX > wRouteId))
{
OverlapLaborUnlockSetState = GetOverlapLaborUnlockSetState(overlapId);
if (LABOR_UNLOCK_OVERLAP_YES == OverlapLaborUnlockSetState)
@@ -11670,8 +11693,12 @@ UINT8 CheckOverlapLaborUnlock(const UINT16 overlapId)
laborUnlockOverlapTimeCount = GetlabarUnlockOverlapTimeCount();/*人工解锁延时时间*/
laborUnlockStartCycNum = GetlaborUnlockStartCycNum(overlapId);
laborUnlockStopTimeState = SystemOverTimeCheck(laborUnlockStartCycNum, laborUnlockOverlapTimeCount);
if (CI_TIME_OUT == laborUnlockStopTimeState)
wRouteLastSecId = GetRouteLastPhySectionId(wRouteId);
chSecStopFlag = GetPhySecStopSteadyFlag(wRouteLastSecId);
if ((CI_TIME_OUT == laborUnlockStopTimeState) || (PHYSICAL_SECTION_STOPSTEADY_YES == chSecStopFlag))
{
/*人工解锁保护区段超时或区段停稳标志有效,解锁保护区段*/
rtVal = CI_SUCCESS;
}
else
@@ -13016,7 +13043,7 @@ UINT8 SetRouteCouplinkProcess(const UINT16 wRouteId, const UINT8 functionId, con
else
{
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, wRouteId, ETYPE_ROUTE_TYPE, chRouteType, sendLevel);
SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, wRouteId, ETYPE_ROUTE_TYPE, chRouteType, ESEND_LEVEL_ZERO);
/* 失败返回 */
chReval = CI_ERROR;
}
@@ -692,11 +692,12 @@ void RouteLgcSecResReleaseProcess(const UINT16 wRouteId);
/*
*
* const UINT16 overlapId, ID
* const UINT16 wRouteId ½øÂ·ID
* CI_SUCCESS:
CI_ERROR:
* edit cgh 20250928
*/
UINT8 CheckOverlapLaborUnlock(const UINT16 overlapId);
UINT8 CheckOverlapLaborUnlock(const UINT16 overlapId, const UINT16 wRouteId);
/*
*
* const UINT16 overlapId, ID
+11 -2
View File
@@ -184,7 +184,9 @@
#define MASK_TYPE_CANCEL_ESP_FAULT ((UINT8)0x9c) /*定义取消紧急关闭按钮故障码位*/
#define MASK_TYPE_ESP_FAULT ((UINT8)0x9d) /*定义紧急关闭按钮故障码位*/
#define MASK_TYPE_CUT_ESP_FAULT ((UINT8)0xA3) /*定义紧急关闭旁路按钮故障码位*/
#define MASK_TYPE_ESP_PRESS_STATE ((UINT8)0xA4) /*定义紧急关闭按钮按下状态码位*/
#define MASK_TYPE_CUT_ESP_STATE ((UINT8)0xA4) /*定义紧急关闭旁路按钮激活状态码位*/
#define MASK_TYPE_ONEPLAT_ESP_STATE ((UINT8)0xAB) /*定义紧急关闭按钮同站紧急按钮激活状态码位*/
#define MASK_TYPE_ONEPLAT_CUT_ESP_STATE ((UINT8)0xAC) /*定义紧急关闭按钮同站旁路按钮激活状态码位*/
/*站台安全门相关码位*/
#define MASK_TYPE_PSD_STATE ((UINT8)0x60) /*定义站台安全门状态码位-ZC,LEU用*/
@@ -203,7 +205,10 @@
#define MASK_TYPE_PSD_VIDEO_QK_LU ((UINT8)0xA1) /*定义清客按钮箱视频清客表示灯(绿)状态码位*/
#define MASK_TYPE_PSD_VIDEO_QK_HONG ((UINT8)0xA2) /*定义清客按钮箱视频清客表示灯(红)状态码位*/
#define MASK_TYPE_PSD_EXCEPT_OPEN ((UINT8)0xA5) /*定义站台安全门异常打开码位*/
#define MASK_TYPE_PSD_JXTCPANGLU_FAULT ((UINT8)0xAA) /*定义间隙探测旁路按钮故障码位*/
#define MASK_TYPE_PSD_IBP_STATE ((UINT8)0xAD) /*定义IBP盘按钮状态码位*/
#define MASK_TYPE_PSD_IBP_FAULT ((UINT8)0xAE) /*定义IBP盘按钮故障码位*/
#define MASK_TYPE_PSD_JXTC_STATE ((UINT8)0xAF) /*定义间隙探测状态码位*/
/*车库门相关码位*/
#define MASK_TYPE_GARAGEDOOR_OPEN_STATE ((UINT8)0x62) /*定义车库门开门状态码位(CI->ATS*/
#define MASK_TYPE_GARAGEDOOR_CLOSE_STATE ((UINT8)0x63) /*定义车库门关门状态码位(CI->ATS*/
@@ -235,6 +240,10 @@
/*洗车机相关码位*/
#define MASK_TYPE_WASHMACHINE_READYSTATE ((UINT8)0x74) /*定义洗车机就绪状态码位*/
#define MASK_TYPE_WASHMACHINE_WORKMODE ((UINT8)0x9E) /*定义洗车机工作模式码位*/
#define MASK_TYPE_WASHMACHINE_ZNTBUTTN ((UINT8)0x9F) /*定义CI-ATS洗车机降级模式洗车线洗车同意按钮粘连码位,0有粘连,1为无粘连*/
#define MASK_TYPE_DCCWASHACHINE_ZNTBUTTN ((UINT8)0xb0) /*定义CI-ATS洗车机降级模式DCC洗车同意按钮粘连码位,0有粘连,1为无粘连*/
#define MASK_TYPE_PASSWASHMACHINE_ZNTBUTTN ((UINT8)0xb1) /*定义CI-ATS洗车机降级模式洗车线洗车反向通过同意按钮粘连码位,0有粘连,1为无粘连*/
#define MASK_TYPE_DCCPASSWASHMACHINE_ZNTBUTTN ((UINT8)0xb2) /*定义CI-ATS洗车机降级模式DCC洗车反向通过同意按钮粘连码位,0有粘连,1为无粘连*/
/*防淹门相关码位*/
+132 -3
View File
@@ -842,13 +842,13 @@ UINT8 GetOverlapFromSetRouteCmdFlag(const UINT16 overlapId)
}
/*
* ATS锁闭命令标志
*
* const UINT16 routeId, ID
* const UINT16 overlapId, ID
* :
* by cgh 20240920
* by cgh 20260106
*/
void CleanOverlapAtsOrlaborLockFlag(const UINT16 routeId, const UINT16 overlapId)
void CleanOverlapSpecificFlag(const UINT16 routeId, const UINT16 overlapId)
{
UINT16 overlapRouteSum = 0U; /*保护区段进路数量*/
UINT16* pOverlapRouteBuf = NULL; /*保护区段进路数据*/
@@ -856,6 +856,8 @@ void CleanOverlapAtsOrlaborLockFlag(const UINT16 routeId, const UINT16 overlapId
UINT16 routeLastPhyId = 0U; /*进路最后一个物理区段ID*/
UINT8 routeLastPhyState = 0U; /*进路最后一个物理区段融合占用状态*/
UINT16 ii = 0U; /*游标*/
UINT32 dwUnlockStartCycNum = 0U; /*保护区段解锁起始周期号*/
UINT32 dwAtsLastTimeLockCyc = 0U; /*最近一次ATS锁闭保护区段周期号*/
overlapRouteSum = GetOverlapRouteIdSum(overlapId); /*获取保护区段进路数量*/
pOverlapRouteBuf = GetOverlapRouteIdBuf(overlapId); /*获取保护区段进路数据*/
@@ -876,6 +878,29 @@ void CleanOverlapAtsOrlaborLockFlag(const UINT16 routeId, const UINT16 overlapId
{
SetOverlapAtsOrlaborLockCmdFlag(overlapId, LOCK_OVERLAP_CMD_NO);
}
dwUnlockStartCycNum = GetOverlapUnlockStartCycNum(overlapId);
dwAtsLastTimeLockCyc = GetOverlapAtsLastTimeLockCyc(overlapId);
if (0U == dwUnlockStartCycNum)
{
/*说明是人工解锁,人工解锁就不保留之前的命令了*/
SetRouteAtsExpLkOverlapId(routeId, 0U);
SetOverlapFromSetRouteCmdFlag(overlapId, OVERLAP_ROUTE_FLAG_NO);/*清除保护区段建立命令由进路命令连带下发标志*/
}
else
{
if ((dwAtsLastTimeLockCyc < dwUnlockStartCycNum) && (0U < dwAtsLastTimeLockCyc))
{
/*ATS最后一次下发锁闭保护区段命令时保护区段未自动解锁*/
SetRouteAtsExpLkOverlapId(routeId, 0U);
SetOverlapFromSetRouteCmdFlag(overlapId, OVERLAP_ROUTE_FLAG_NO);/*清除保护区段建立命令由进路命令连带下发标志*/
}
else
{
;
}
}
}
/*
@@ -1151,4 +1176,108 @@ void SetOverlapBelPhyStopSteadyFlag(const UINT16 wOverlapId, const UINT8 chSetFl
{
/*不处理*/
}
}
/* 功能描述:清除期望保护区段关联所有进路的所有保护区段人工锁闭过标志
* const UINT16 expLkOverlapId, ATS或现地发送的期望锁闭区段ID
*
* by cgh 20260106
*/
void ClearPreLoaborUnlockState(const UINT16 expLkOverlapId)
{
UINT8 overlapSum = 0U;
UINT16* overlapIdBuf = NULL;
UINT16 ii = 0U;
UINT8 jj = 0U;
UINT8 localCiId = 0U; /*本联锁集中区ID*/
UINT8 OverlapBelongCiId = 0U;
UINT16 overlapRouteSum = 0U;/*保护区段关联进路数量*/
UINT16* overlapRouteBuf = NULL;/*保护区段关联进路数据*/
overlapRouteSum = GetOverlapRouteIdSum(expLkOverlapId);/*获取保护区段关联进路总数*/
overlapRouteBuf = GetOverlapRouteIdBuf(expLkOverlapId);/*获取进路数据*/
localCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/
if ((0U != overlapRouteSum) && (NULL != overlapRouteBuf))
{
for (ii = 0U; ii < overlapRouteSum; ii++)
{
overlapSum = GetRouteOverlapSum(overlapRouteBuf[ii]); /*获取Overlap总数*/
overlapIdBuf = GetRouteOverlapIdBuf(overlapRouteBuf[ii]); /*获取Overlap ID BUF*/
if ((0U == overlapSum) || (NULL == overlapIdBuf))
{
;/*数据异常*/
}
else
{
for (jj = 0U; jj < overlapSum; jj++)
{
OverlapBelongCiId = GetOverlapBelongCiId(overlapIdBuf[jj]);
if (OverlapBelongCiId == localCiId)
{
SetOverlapPreLoaborUnlockState(overlapIdBuf[jj], PRO_PRE_LABOR_UNLOCK_STATE_NO);
}
else
{
; /*相邻联锁的不处理*/
}
}
}
}
}
else
{
; /*不处理*/
}
}
/*
* ID保护区段最近一次ATS锁闭保护区段周期号
* const UINT16 overlapId, ID
* ATS锁闭保护区段周期号
* BY CGH 20260106
*/
UINT32 GetOverlapAtsLastTimeLockCyc(const UINT16 overlapId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT32 reVal = CI_ERROR;
bufIndex = GetOverlapConfigBufIndex(overlapId); /*获取数组下标*/
if (bufIndex < OVERLAP_SUM_MAX)
{
reVal = OverlapDataStru[bufIndex].dwAtsLastTimeLockCyc;
}
else
{
;
}
return reVal;
}
/*
* ID保护区段最近一次ATS锁闭保护区段周期号
* const UINT16 overlapId, ID
* const UINT32 dwAtsLastTimeLockCyc, ATS锁闭保护区段周期号
* void
* by cgh 20250928
*/
void SetOverlapAtsLastTimeLockCyc(const UINT16 overlapId, const UINT32 dwAtsLastTimeLockCyc)
{
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetOverlapConfigBufIndex(overlapId); /*获取数组下标*/
if (bufIndex < OVERLAP_SUM_MAX)
{
OverlapDataStru[bufIndex].dwAtsLastTimeLockCyc = dwAtsLastTimeLockCyc; /*设置解锁起始周期号*/
}
else
{
;
}
}
+31 -6
View File
@@ -46,6 +46,7 @@ typedef struct S_OverlapDataStruct
UINT8 cProSwitchCheckResultFlag; /*跨控区防护道岔检查结果标志(0xFF:默认值,0x55:失败,0xAA:成功)*/
UINT8 cProSwitchCheckStartFlag; /*跨控区防护道岔检查开始标志(0x55:检查开始,0xAA:检查停止)*/
UINT8 chPreLaborUnlockState; /*之前人工解锁状态*/
UINT32 dwAtsLastTimeLockCyc; /*最近一次ATS锁闭保护区段周期号*/
} OverlapDataStruct;
/*保护区段数据结构体*/
@@ -89,11 +90,11 @@ OverlapDataStructCC* GetOverlapDataCC(void);
UINT16 GetOverlapBelongRouteId(const UINT16 overlapId);
/*
* ID保护区段组解锁起始周期号
* const UINT16 overlapId, ID
* ID保护区段所属进路
* const UINT16 overlapId, ID
* const UINT16 belongRouteId,
*
*
*
*/
void SetOverlapBelongRouteId(const UINT16 overlapId, const UINT16 belongRouteId);
@@ -335,13 +336,13 @@ void SetOverlapFromSetRouteCmdFlag(const UINT16 overlapId, const UINT8 setFlag);
UINT8 GetOverlapFromSetRouteCmdFlag(const UINT16 overlapId);
/*
* ATS锁闭命令标志
*
* const UINT16 routeId, ID
* const UINT16 overlapId, ID
* :
* by cgh 20240920
* by cgh 20260106
*/
void CleanOverlapAtsOrlaborLockFlag(const UINT16 routeId, const UINT16 overlapId);
void CleanOverlapSpecificFlag(const UINT16 routeId, const UINT16 overlapId);
/*
*
@@ -415,6 +416,30 @@ UINT8 OverlapLockRouteCheck(const UINT16 wOverlapId);
*/
void SetOverlapBelPhyStopSteadyFlag(const UINT16 wOverlapId, const UINT8 chSetFlag);
/* 功能描述:清除期望保护区段关联所有进路的所有保护区段人工锁闭过标志
* const UINT16 expLkOverlapId, ATS或现地发送的期望锁闭区段ID
*
* by cgh 20260106
*/
void ClearPreLoaborUnlockState(const UINT16 expLkOverlapId);
/*
* ID保护区段最近一次ATS锁闭保护区段周期号
* const UINT16 overlapId, ID
* ATS锁闭保护区段周期号
* BY CGH 20260106
*/
UINT32 GetOverlapAtsLastTimeLockCyc(const UINT16 overlapId);
/*
* ID保护区段最近一次ATS锁闭保护区段周期号
* const UINT16 overlapId, ID
* const UINT32 dwAtsLastTimeLockCyc, ATS锁闭保护区段周期号
* void
* by cgh 20250928
*/
void SetOverlapAtsLastTimeLockCyc(const UINT16 overlapId, const UINT32 dwAtsLastTimeLockCyc);
#ifdef __cplusplus
}
#endif
@@ -1159,3 +1159,27 @@ UINT8 GetPsdIncloudeEsbNum(const UINT16 psdId)
}
return retVal;
}
/*
* ID屏蔽门IBP盘发车按钮继电器ID
* const UINT16 doorId, ID
* 0:
* >0: IBP盘发车按钮继电器ID
*/
UINT16 GetIbpConfmRelayId(const UINT16 doorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 retVal = CI_ERROR;
bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/
if (bufIndex < PSD_SUM_MAX)
{
retVal = PsdConfigDataStru[bufIndex].wIbpRelayId;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
@@ -72,6 +72,7 @@ typedef struct S_PsdConfigDataStruct
UINT8 chPsdControlType; /*屏蔽门控制类型*/
UINT16 IncloudeEsbIdBuf[PSD_INCLUDE_ESB_NUM]; /*屏蔽门包含ESB ID*/
UINT8 IncloudeEsbNum; /*包含ESB数量*/
UINT16 wIbpRelayId; /*IBP盘发车按钮继电器ID*/
} PsdConfigDataStruct;
@@ -451,6 +452,15 @@ UINT8 GetPsdIncloudeEsbNum(const UINT16 psdId);
* ESB ID数组
*/
UINT16* GetPsdIncloudeEsbIdBuf(const UINT16 psdId);
/*
* ID屏蔽门IBP盘发车按钮继电器ID
* const UINT16 doorId, ID
* 0:
* >0: IBP盘发车按钮继电器ID
*/
UINT16 GetIbpConfmRelayId(const UINT16 doorId);
#ifdef __cplusplus
}
#endif
+259
View File
@@ -952,6 +952,54 @@ UINT8 GetStopDetectionState(const UINT16 doorId)
}
return retVal;
}
/*
* PSD停止探测周期号
* const UINT16 doorId, ID
* const UINT32 startCycNum,
*
*
*/
void SetStopDetectionCycNum(const UINT16 doorId, const UINT32 startCycNum)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/
if (bufIndex < PSD_SUM_MAX)
{
PsdDataStru[bufIndex].StopDetectionCycNum = startCycNum;
}
else
{
/*不做处理*/
}
}
/*
*
* const UINT16 doorId, ID
* 0:
* >0:
*/
UINT32 GetStopDetectionCycNum(const UINT16 doorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT32 retVal = CI_ERROR;
bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/
if (bufIndex < PSD_SUM_MAX)
{
retVal = PsdDataStru[bufIndex].StopDetectionCycNum;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
#if 0
/*
* VOBC关PSD而需要被重开的进路
@@ -3117,3 +3165,214 @@ void SetPsdEditGroupInfoData(const UINT16 doorId, const UINT16 wPsdEditGroupInfo
/*不处理*/
}
}
/*
* ID屏蔽门间隙探测互锁解除故障状态
* const UINT16 doorId, ID
* 0
* 0<
*/
UINT8 GetPsdJXTCMutualLockFaultState(const UINT16 doorId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT8 retVal = CI_ERROR;
bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/
if (PSD_SUM_MAX > bufIndex)
{
retVal = PsdDataStru[bufIndex].JXTCMutualLockFaultState;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* ID屏蔽门间隙探测互锁解除故障状态
* const UINT16 doorId, ID
* const UINT8 wJXTCMutualLockFaultState
*
*/
void SetPsdJXTCMutualLockFaultState(const UINT16 doorId, const UINT8 wJXTCMutualLockFaultState)
{
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/
if (PSD_SUM_MAX > bufIndex)
{
if ((JXTC_MUTUALLOCKFAULT_YES == wJXTCMutualLockFaultState)
|| (JXTC_MUTUALLOCKFAULT_NO == wJXTCMutualLockFaultState))
{
PsdDataStru[bufIndex].JXTCMutualLockFaultState = wJXTCMutualLockFaultState; /*间隙探测互锁解除故障状态*/
}
else
{
/*不处理*/
}
}
else
{
/*不处理*/
}
}
/*
* ID屏蔽门间隙探测互锁解除时间
* const UINT16 doorId, ID
* 0
* 0<
*/
UINT32 GetPsdJXTCMutualLockStartCycNum(const UINT16 doorId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT32 retVal = CI_ERROR;
bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/
if (PSD_SUM_MAX > bufIndex)
{
retVal = PsdDataStru[bufIndex].JXTCMutualLockStartCycNum;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* ID屏蔽门间隙探测互锁解除起始时间
* const UINT16 doorId, ID
* const UINT32 cycnum
*
*/
void SetPsdJXTCMutualLockStartCycNum(const UINT16 doorId, const UINT32 cycnum)
{
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/
if (PSD_SUM_MAX > bufIndex)
{
PsdDataStru[bufIndex].JXTCMutualLockStartCycNum = cycnum;
}
else
{
/*不处理*/
}
}
/*
* ID屏蔽门IBP盘发车按钮状态
* const UINT16 doorId, ID
* UINT8 setFlag
* CI_ERROR
* CI_SUCCESS
*/
UINT8 SetPsdButtonIbpState(const UINT16 doorId, const UINT8 setFlag)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = 0u;
bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/
if (bufIndex < PSD_SUM_MAX)
{
if ((PLATFORM_DEPAR_BUTTON_STATE_VALID == setFlag) || (PLATFORM_DEPAR_BUTTON_STATE_INVALID == setFlag)
||(PLATFORM_DEPAR_BUTTON_STATE_FAULT == setFlag))
{
PsdDataStru[bufIndex].ibpButtonState = setFlag; /*设置按钮状态*/
retVal = CI_SUCCESS;
}
else
{
retVal = CI_ERROR;
}
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* ID屏蔽门IBP盘发车按钮状态
* const UINT16 doorId, ID
* 0:
* >0: IBP盘发车按钮状态
*/
UINT8 GetPsdButtonIbpState(const UINT16 doorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = 0u;
bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/
if (bufIndex < PSD_SUM_MAX)
{
retVal = PsdDataStru[bufIndex].ibpButtonState;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* ID屏蔽门IBP按下起始周期号
* const UINT16 doorId, ID
* const UINT32 startCycNum,
* 0:
* >0:
*/
UINT8 SetIBPPressCycNum(const UINT16 doorId, const UINT32 startCycNum)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = CI_ERROR;
bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/
if (bufIndex < PSD_SUM_MAX)
{
PsdDataStru[bufIndex].IBPPressCycNum = startCycNum;
retVal = CI_SUCCESS;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* ID屏蔽门IBP按下起始周期号
* const UINT16 doorIdID
* 0:
* >0:
*/
UINT32 GetIBPPressCycNum(const UINT16 doorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT32 retVal = CI_ERROR;
bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/
if (bufIndex < PSD_SUM_MAX)
{
retVal = PsdDataStru[bufIndex].IBPPressCycNum;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
+82
View File
@@ -59,6 +59,7 @@ typedef struct S_PsdDataStruct
UINT32 StartDetectionCycNum; /*开启探测周期*/
UINT8 StartDetectionState; /*启动探测状态*/
UINT8 StopDetectionState; /*停止探测状态*/
UINT32 StopDetectionCycNum; /*停止探测周期*/
UINT8 VOBCDoorState; /*VOBC车门状态*/
UINT32 PCBPressCycNum; /*PCB按下起始周期*/
UINT32 POBPressCycNum; /*POB按下起始周期*/
@@ -92,6 +93,11 @@ typedef struct S_PsdDataStruct
UINT8 psdCloseErrState; /*关门故障状态*/
UINT8 cPsdExceptOpenState; /*屏蔽门异常打开状态:0x55-异常打开,0xAA-未异常打开*/
UINT32 dwPsdRelayDownCycNum; /*PSD门关继电器落下起始周期*/
UINT8 JXTCMutualLockFaultState; /*间隙探测互锁解除按钮故障状态 (动态字段)*/
UINT32 JXTCMutualLockStartCycNum; /*间隙探测互锁解除起始时间*/
UINT8 ibpButtonState; /*IBP盘发车按钮状态(动态字段)*/
UINT32 IBPPressCycNum; /*IBP按下起始周期*/
} PsdDataStruct;
/*屏蔽门数据结构体*/
@@ -406,6 +412,23 @@ void SetStopDetectionState(const UINT16 doorId, const UINT32 detectionState);
*/
UINT8 GetStopDetectionState(const UINT16 doorId);
/*
* PSD停止探测周期号
* const UINT16 doorId, ID
* const UINT32 startCycNum,
*
*
*/
void SetStopDetectionCycNum(const UINT16 doorId, const UINT32 startCycNum);
/*
*
* const UINT16 doorId, ID
* 0:
* >0:
*/
UINT32 GetStopDetectionCycNum(const UINT16 doorId);
/*
* ID屏蔽门开门按钮状态
* const UINT16 doorId, ID
@@ -1097,6 +1120,65 @@ UINT16 GetPsdEditGroupInfoData(const UINT16 doorId);
*
*/
void SetPsdEditGroupInfoData(const UINT16 doorId, const UINT16 wPsdEditGroupInfo);
/*
* ID屏蔽门间隙探测互锁解除故障状态
* const UINT16 doorId, ID
* 0
* 0<
*/
UINT8 GetPsdJXTCMutualLockFaultState(const UINT16 doorId);
/*
* ID屏蔽门间隙探测互锁解除故障状态
* const UINT16 doorId, ID
* const UINT8 wJXTCMutualLockFaultState
*
*/
void SetPsdJXTCMutualLockFaultState(const UINT16 doorId, const UINT8 wJXTCMutualLockFaultState);
/*
* ID屏蔽门间隙探测互锁解除时间
* const UINT16 doorId, ID
* 0
* 0<
*/
UINT32 GetPsdJXTCMutualLockStartCycNum(const UINT16 doorId);
/*
* ID屏蔽门间隙探测互锁解除起始时间
* const UINT16 doorId, ID
* const UINT32 cycnum
*
*/
void SetPsdJXTCMutualLockStartCycNum(const UINT16 doorId, const UINT32 cycnum);
/*
* ID屏蔽门IBP盘发车按钮状态
* const UINT16 doorId, ID
* UINT8 setFlag
* PSD_BUTTON_PANGLU_STATE_VALID 0x55
* PSD_BUTTON_PANGLU_STATE_INVALID 0xaa
*/
UINT8 SetPsdButtonIbpState(const UINT16 doorId, const UINT8 setFlag);
/*
* ID屏蔽门IBP按下起始周期号
* const UINT16 doorIdID
* 0:
* >0:
*/
UINT32 GetIBPPressCycNum(const UINT16 doorId);
/*
* ID屏蔽门IBP盘发车按钮状态
* const UINT16 doorId, ID
* 0:
* >0: IBP盘发车按钮状态
*/
UINT8 GetPsdButtonIbpState(const UINT16 doorId);
/*
* ID屏蔽门IBP按下起始周期号
* const UINT16 doorId, ID
* const UINT32 startCycNum,
* 0:
* >0:
*/
UINT8 SetIBPPressCycNum(const UINT16 doorId, const UINT32 startCycNum);
#ifdef __cplusplus
}
#endif
+7
View File
@@ -135,6 +135,7 @@
#define PLATFORM_DEPAR_BUTTON_STATE_VALID ((UINT8)0x55U) /*有效*/
#define PLATFORM_DEPAR_BUTTON_STATE_INVALID ((UINT8)0xaaU) /*无效*/
#define PLATFORM_DEPAR_BUTTON_NO ((UINT8)0xccU) /*无站台发车按钮*/
#define PLATFORM_DEPAR_BUTTON_STATE_FAULT ((UINT8)0xffU) /*站台发车按钮故障(IBP*/
/*站台按钮旁路状态*/
#define PSD_BUTTON_PANGLU_STATE_VALID ((UINT8)0x55U) /*有效*/
@@ -210,5 +211,11 @@
#define LOW_FOUR_CHAR ((UINT8)1U) /*低四字节*/
/*间隙探测互锁解除故障状态*/
#define JXTC_MUTUALLOCKFAULT_YES ((UINT8)0x55U) /*间隙探测互锁解除按钮故障*/
#define JXTC_MUTUALLOCKFAULT_NO ((UINT8)0xaaU) /*间隙探测互锁解除按钮未故障*/
#define JXTC_MUTUALLOCKFAULT_NOCHECK ((UINT8)0xFFU) /*间隙探测互锁解除按钮未检测*/
#define PSD_INCLUDE_ESB_NUM ((UINT8)10U) /*ESB个数*/
#endif
@@ -107,7 +107,7 @@
#define ATS_CMD_SECTION_FENGSUO_CANCEL ((UINT8)0x61) /*区段解封*/
#define ATS_CMD_PHYSEC_PRE_RESET_ONE ((UINT8)0x62) /*计轴预复位一次*/
#define ATS_CMD_PHYSEC_PRE_RESET_TWO ((UINT8)0x63) /*计轴预复位二次*/
#define ATS_CMD_CANCEL_XICHE ((UINT8)0x64) /*现地取消洗车命令*/
#define ATS_CMD_CANCEL_XICHE ((UINT8)0x64) /*取消降级模式洗车命令*/
#define ATS_CMD_PHYSEC_GENERAL_RESET_SET ((UINT8)0x65) /*计轴总复位命令*/
#define ATS_CMD_PHYSEC_GENERAL_RESET_CANCEL ((UINT8)0x66) /*取消计轴总复位命令*/
#define ATS_CMD_CICI_NET_TO_RELAY_ONE ((UINT8)0x68) /*联锁与联锁网络接口转继电接口一次命令*/
@@ -115,10 +115,9 @@
#define ATS_CMD_PSC_PL_ONE ((UINT8)0x70) /*设置PSC旁路一次命令*/
#define ATS_CMD_PSC_PL_TWO ((UINT8)0x71) /*设置PSC旁路二次命令*/
#define ATS_CMD_QUXIAO_PSC_PL_ONE ((UINT8)0x72) /*取消PSC旁路一次命令*/
#define ATS_CMD_QUXIAO_PSC_PL_TWO ((UINT8)0x73) /*取消PSC旁路二次命令*/
#define ATS_CMD_ROUTE_GROUP_AUTO_SET ((UINT8)0x74) /*办理组合自动进路命令*/
#define ATS_CMD_ROUTE_GROUP_AUTO_CANCLE ((UINT8)0x75) /*取消组合自动进路命令*/
#define ATS_CMD_QUXIAO_PSC_PL_TWO ((UINT8)0x73) /*取消PSC旁路二次命令*/
#define ATS_CMD_ROUTE_GROUP_AUTO_SET ((UINT8)0x74) /*办理组合自动进路命令*/
#define ATS_CMD_ROUTE_GROUP_AUTO_CANCLE ((UINT8)0x75) /*取消组合自动进路命令*/
#define ATS_CMD_SIGNALMAINTAINSTATE_ONE ((UINT8)0x76) /*信号机维修点灯一次*/
#define ATS_CMD_SIGNALMAINTAINSTATE_TWO ((UINT8)0x77) /*信号机维修点灯二次*/
#define ATS_CMD_CANCEL_SIG_MAINTAIN_ONE ((UINT8)0x78) /*取消信号机维修点灯一次*/
@@ -127,11 +126,9 @@
#define ATS_CMD_CANCEL_SW_ALARM_TWO ((UINT8)0x7b) /*取消转辙机封连报警二次命令*/
#define ATS_CMD_RECOVER_SW_ALARM_ONE ((UINT8)0x7c) /*恢复转辙机封连报警一次命令*/
#define ATS_CMD_RECOVER_SW_ALARM_TWO ((UINT8)0x7d) /*恢复转辙机封连报警二次命令*/
#define LABOR_CMD_CANCEL_OVERLAP_ONE ((UINT8)0x7e) /* 人工取消保护区段一次命令 */
#define LABOR_CMD_CANCEL_OVERLAP_TWO ((UINT8)0x7f) /* 人工取消保护区段二次命令 */
#define LABOR_CMD_SET_UP_OVERLAP ((UINT8)0x80) /* 人工建立保护区段命令,合代码暂时改成80 */
#define ATS_CMD_ROUTE_APPLY ((UINT8)0x92) /*申请路径*/
#define ATS_CMD_ROUTE_APPLY_CANCLE ((UINT8)0x93) /*取消申请路径*/
#define ATS_CMD_ROUTE_PART_APPLY ((UINT8)0x94) /*申请部分路径*/
@@ -143,22 +140,18 @@
#define ATS_CMD_OPEN_XIANSU_SIGNAL_FIRST ((UINT8)0x9d) /*开放限速信号一次*/
#define ATS_CMD_OPEN_XIANSU_SIGNAL_SECOND ((UINT8)0x9e) /*开放限速信号二次*/
#define ATS_CMD_OPEN_XIANSU_SIGNAL_SPECIAL ((UINT8)0xa6) /*限速信号特殊开放*/
#define ATS_CMD_OC_P_PL_ONE ((UINT8)0xa8) /*设置OC-P旁路一次命令*/
#define ATS_CMD_OC_P_PL_TWO ((UINT8)0xa9) /*设置OC-P旁路二次命令*/
#define ATS_CMD_QUXIAO_OC_P_PL_ONE ((UINT8)0xaa) /*取消OC-P旁路一次命令*/
#define ATS_CMD_QUXIAO_OC_P_PL_TWO ((UINT8)0xab) /*取消OC-P旁路二次命令*/
#define ATS_CMD_GET_CTRL_POWER ((UINT8)0x81) /* 获取联锁控制权*/
#define ATS_CMD_RELEASE_CTRL_POWER ((UINT8)0x82) /* 释放联锁控制权*/
#define ATS_CMD_ROUTE_AUTO_TRIGGER_SET (UINT8)0x83 /*单个进路自动触发进路办理 */
#define ATS_CMD_ROUTE_CANCLE_AUTO_TRIGGER (UINT8)0x84 /*单个进路取消自动触发进路 */
#define ATS_CMD_SWITCH_DINGWEI_TEST_ONE ((UINT8)0x85) /* 道岔定位测试一次命令*/
#define ATS_CMD_SWITCH_DINGWEI_TEST_TWO ((UINT8)0x86) /* 道岔定位测试二次命令*/
#define ATS_CMD_SWITCH_FANWEI_TEST_ONE ((UINT8)0x87) /* 道岔反位测试一次命令*/
#define ATS_CMD_SWITCH_FANWEI_TEST_TWO ((UINT8)0x88) /*道岔反位测试二次命令*/
#define SCX_ATS_CMD_ESS_GO_POSITION (UINT8)0x89 /*ESS去位命令*/
#define SCX_ATS_CMD_ESS_STOP_POSITION (UINT8)0x90 /*ESS停位命令*/
#define ATS_CMD_STATION_QK_SET (UINT8)0x91 /*站台清客标志设置 */
@@ -167,6 +160,9 @@
#define ATS_CMD_EMERG_XS_CANCEL_ONE (UINT8)0xAE /*取消紧急临时限速一次命令 */
#define ATS_CMD_EMERG_XS_CANCEL_TWO (UINT8)0xAF /*取消紧急临时限速二次命令 */
#define ATS_CMD_COUPLING_ROUTE_SET (UINT8)0xB0 /*联挂进路办理 */
#define ATS_CMD_APPLY_XICHE ((UINT8)0xB1) /*降级模式洗车请求*/
#define ATS_CMD_APPLY_PASSXICHE ((UINT8)0xB2) /*现地请求反向洗车命令-降级模式*/
#define ATS_CMD_CANCEL_PASSXICHE ((UINT8)0xB3) /*现地取消反向洗车命令-降级模式*/
/****联锁到其他联锁的命令宏定义****/
#define CI_CMD_PHYSEC_USING_APPLY ((UINT16)0x0001) /*物理区段征用申请*/
@@ -239,7 +235,7 @@
#define CI_BACK_ROUTE_LOCK_NOTALL ((UINT8)0x06) /*进路不完整锁闭?新增?*/
#define CI_BACK_ROUTE_LEVEL_CBTC ((UINT8)0x08) /*进路监督级别不为点式?未使用?*/
#define CI_BACK_ROUTE_LEVEL_BLOC ((UINT8)0x00) /*进路监督级别不为CBTC?未使用?*/
#define CI_BACK_ROUTE_LEVEL_BLOC ((UINT8)0xBA) /*进路监督级别不为CBTC*/
#define CI_BACK_ROUTE_TYPE_ERROR ((UINT8)0x00) /*进路类型异常?未使用?*/
#define CI_BACK_ROUTE_STATE_ERROR ((UINT8)0x59) /*进路建立条件不满足*/
#define CI_BACK_RETURN_ROUTE_STATE_ERROR ((UINT8)0x5A) /*折返进路不允许追踪办理*/
@@ -341,6 +337,14 @@
#define CI_BACK_OTHER_ROUTE_NOT_OPEN ((UINT8)0x9D) /*进路其他联锁条件需开放进路未开放*/
#define CI_BACK_WASH_PASS_ALLOW_NOT ((UINT8)0x9E) /*洗车库/线未同意通过*/
#define CI_BACK_WASH_APPLY_NOT ((UINT8)0xB3) /*洗车机洗车请求有效,请勿重复操作*/
#define CI_BACK_WASH_PASSAPPLY_NOT ((UINT8)0xB4) /*洗车机反向通过请求有效,请勿重复操作*/
#define CI_BACK_ROUTE_IDLE_NOT ((UINT8)0xB5) /*进路未空闲,请先取消进路*/
#define CI_BACK_WASH_BUTTON_PRESS_NOT ((UINT8)0xB6) /*洗车同意按钮未按下,不需要取消*/
#define CI_BACK_WASH_PASSBUTTON_PRESS_NOT ((UINT8)0xB7) /*洗车反向通过同意按钮未按下,不需要取消*/
#define CI_BACK_WASH_APPLY_BUTTON_NOT ((UINT8)0xB8) /*洗车机XXX洗车同意按钮在规定时间内未按下,洗车请求失效*/
#define CI_BACK_WASH_PASS_BUTTON_NOT ((UINT8)0xB9) /*洗车机XXX反向同意按钮在规定时间内未按下,反向通过请求失效*/
/* 设置与取消物理区段故障列车占用反馈 */
#define CI_BACK_SPE_TRAIN_DIR_ERR ((UINT8)0x86) /*设置物理区段故障车占用:与已存在的故障车方向不一致*/
#define CI_BACK_SPE_LOOK_DIR_ERR ((UINT8)0x87) /*设置物理区段故障车占用:与物理区段锁闭方向不一致*/
+333 -127
View File
@@ -1318,7 +1318,7 @@ void AddCiSendBackDataCIid(void)
UINT8 virCINum = 0u;
UINT8 boardBelongOcId = 0U;
UINT16 phySecPlockBelongRouteId = 0U; /*物理区段防护锁闭所属进路ID*/
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG); /*获取是否支持虚拟联锁功能开关*/
for (ii = 0u; ii < CiSendCmdStruCurSum; ii ++)
{
@@ -1326,103 +1326,98 @@ void AddCiSendBackDataCIid(void)
cmdDeviceId = (UINT16)(CiSendCmdDataStru[ii].CommandParam >> 16u);
cmdDevType = (UINT8)(CiSendCmdDataStru[ii].CommandParam >> 8u);
backType = CiSendCmdDataStru[ii].CommandType;
if (FUNC_SWITCH_ON == includeVirFlag)
if ((CI_BACK_ORDER_REPEAT != backType) && (CI_BACK_FIRSTORDER_OUTTIME != backType)
&& (CI_BACK_COUNT_OVERLAP_UNLOCK != backType) && (CI_BACK_COUNT_OVERLAP_UNLOCK_HIGH != backType))
/*0x700x7d类型不处理,两种反馈VirCIid前面已经赋值过,在此处不再赋值。0x55,0x5d此分支不赋值,避免保护区段在相邻虚拟联锁时,在本虚拟联锁现地上不显示倒计时*/
{
if ((CI_BACK_ORDER_REPEAT != backType) && (CI_BACK_FIRSTORDER_OUTTIME != backType)
&& (CI_BACK_COUNT_OVERLAP_UNLOCK != backType) && (CI_BACK_COUNT_OVERLAP_UNLOCK_HIGH != backType))
/*0x700x7d类型不处理,两种反馈VirCIid前面已经赋值过,在此处不再赋值。0x55,0x5d此分支不赋值,避免保护区段在相邻虚拟联锁时,在本虚拟联锁现地上不显示倒计时*/
switch (cmdDevType)
{
switch (cmdDevType)
{
case CI_DEVICE_TYPE_SWITCH:
belongVirCIid = GetSwitchBelongVirCiId(cmdDeviceId);
case CI_DEVICE_TYPE_SWITCH:
belongVirCIid = GetSwitchBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_SIGNAL:
belongVirCIid = GetSignalBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_PHYSEC:
belongVirCIid = GetPhySecBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_LOGICSEC:
belongVirCIid = GetLogSecBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_ROUTE:
belongVirCIid = GetRouteBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_OVERLAP:
belongVirCIid = GetOverlapBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_AXISSEC:
belongVirCIid = GetAxisSectionBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_PSD:
belongVirCIid = GetPsdbelongVirCIid(cmdDeviceId);
break;
case CI_DEVICE_TYPE_RELAY:
belongVirCIid = GetRelayBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_SPKS:
belongVirCIid = GetSpksBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_GARAGEDOOR:
belongVirCIid = GetGaragedoorBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_WASHMACHINE:
belongVirCIid = GetWashMachineBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_FLOODGATE:
belongVirCIid = GetFloodGateBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_GROUP_AUTO_ROUTE:
belongVirCIid = GetGroupAutoRouteBelongVirCIid(cmdDeviceId);/*计算组合自动进路所属虚拟联锁*/
break;
case CI_DEVICE_TYPE_ESB:
belongVirCIid = GetEsbBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_NONROUTE:
belongVirCIid = GetnonRouteIdbelongVirCIid((UINT8)cmdDeviceId);/*非进路所属虚拟联锁由非进路包含信号机的所属虚拟联锁计算出*/
break;
case CI_DEVICE_TYPE_WASH_LINE:/*洗车线*/
belongVirCIid = GetWashMachineBelongVirCiId(cmdDeviceId);/*XTJ对应洗车机所属虚拟联锁*/
break;
case CI_DEVICE_TYPE_OC_BOARD:
boardBelongOcId = CiSendCmdDataStru[ii].OCid;
belongVirCIid = GetOCBelongVirCIid(boardBelongOcId); /*获取切系板卡所属虚拟联锁ID*/
break;
case CI_DEVICE_TYPE_WASH_ALLOW_PASS:/*洗车反向通过*/
belongVirCIid = GetWashMachineBelongVirCiId(cmdDeviceId);/*洗车机所属虚拟联锁*/
break;
case CI_DEVICE_TYPE_AUTORETURN:/*自动折返*/
belongVirCIid = GetAutoReturnRouteBelongVirCiId(cmdDeviceId);/*自动折返所属虚拟联锁*/
break;
case CI_DEVICE_TYPE_AUTOROUTE:/*自动通过*/
belongVirCIid = GetAutoRouteBelongVirCiId(cmdDeviceId);/*自动通过所属虚拟联锁*/
break;
case CI_DEVICE_TYPE_ALLAUTORETURN:/*全自动折返*/
belongVirCIid = GetAllAutoRetRoutBelongVirCiId(cmdDeviceId);/*全自动折返所属虚拟联锁*/
break;
case CI_DEVICE_TYPE_SIGNAL:
belongVirCIid = GetSignalBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_PHYSEC:
belongVirCIid = GetPhySecBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_LOGICSEC:
belongVirCIid = GetLogSecBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_ROUTE:
belongVirCIid = GetRouteBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_OVERLAP:
belongVirCIid = GetOverlapBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_AXISSEC:
belongVirCIid = GetAxisSectionBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_PSD:
belongVirCIid = GetPsdbelongVirCIid(cmdDeviceId);
break;
case CI_DEVICE_TYPE_RELAY:
belongVirCIid = GetRelayBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_SPKS:
belongVirCIid = GetSpksBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_GARAGEDOOR:
belongVirCIid = GetGaragedoorBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_WASHMACHINE:
belongVirCIid = GetWashMachineBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_FLOODGATE:
belongVirCIid = GetFloodGateBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_GROUP_AUTO_ROUTE:
belongVirCIid = GetGroupAutoRouteBelongVirCIid(cmdDeviceId);/*计算组合自动进路所属虚拟联锁*/
break;
/*此命令专用于试车线*/
case CI_DEVICE_TYPE_CMD:
virCINum = GetVirtualCINum();
if (1u <= virCINum)
{
belongVirCIid = GetVirtualCIid(0u);/*由于试车线一个联锁,仅存在一个虚拟联锁,故直接取读取到的第一个虚拟联锁ID*/
}
break;
case CI_DEVICE_TYPE_ESB:
belongVirCIid = GetEsbBelongVirCiId(cmdDeviceId);
break;
case CI_DEVICE_TYPE_NONROUTE:
belongVirCIid = GetnonRouteIdbelongVirCIid((UINT8)cmdDeviceId);/*非进路所属虚拟联锁由非进路包含信号机的所属虚拟联锁计算出*/
break;
case CI_DEVICE_TYPE_WASH_LINE:/*洗车线*/
belongVirCIid = GetWashMachineBelongVirCiId(cmdDeviceId);/*XTJ对应洗车机所属虚拟联锁*/
break;
case CI_DEVICE_TYPE_OC_BOARD:
boardBelongOcId = CiSendCmdDataStru[ii].OCid;
belongVirCIid = GetOCBelongVirCIid(boardBelongOcId); /*获取切系板卡所属虚拟联锁ID*/
break;
case CI_DEVICE_TYPE_WASH_ALLOW_PASS:/*洗车反向通过*/
belongVirCIid = GetWashMachineBelongVirCiId(cmdDeviceId);/*洗车机所属虚拟联锁*/
break;
default:
belongVirCIid = 0u;
break;
}
default:
belongVirCIid = 0u;
break;
}
else if ((CI_BACK_COUNT_OVERLAP_UNLOCK == backType) || (CI_BACK_COUNT_OVERLAP_UNLOCK_HIGH == backType))
}
else if ((CI_BACK_COUNT_OVERLAP_UNLOCK == backType) || (CI_BACK_COUNT_OVERLAP_UNLOCK_HIGH == backType))
{
if (CI_DEVICE_TYPE_PHYSEC == cmdDevType)
{
if (CI_DEVICE_TYPE_PHYSEC == cmdDevType)
{
phySecPlockBelongRouteId = GetPhySecPLockBelongRouteId(cmdDeviceId); /*获取物理区段防护锁闭所属进路ID*/
belongVirCIid = GetRouteBelongVirCiId(phySecPlockBelongRouteId); /*获取进路所属虚拟联锁ID*/
}
}
else
{
; /*不做处理*/
phySecPlockBelongRouteId = GetPhySecPLockBelongRouteId(cmdDeviceId); /*获取物理区段防护锁闭所属进路ID*/
belongVirCIid = GetRouteBelongVirCiId(phySecPlockBelongRouteId); /*获取进路所属虚拟联锁ID*/
}
}
else
{
/*不具备虚拟联锁,给ATS组包本地联锁ID*/
belongVirCIid = GetSystemParaLocalCiId();
; /*不做处理*/
}
if (0U == CiSendCmdDataStru[ii].VirCIid)
{
@@ -2481,6 +2476,222 @@ void PackCiDataToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii)
}
}
/*
* ATS组相邻RC/CI的通信状态使
* UINT8* ciToXianDiDataBuffer buffer
* UINT16* ii
*
* Created By LQ 2026.01.05
*/
void PackNearRciCommStateToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii)
{
UINT16 index = 0U;
UINT8 cTransRciSum = 0U; /*通信设备数量*/
UINT8* pTransRciId = NULL; /*通信设备ID数组*/
UINT8 jj = 0U;
UINT8 cNearRciCommState = 0U; /*相邻RC/CI通信状态*/
UINT8 cCommState = 0U; /*向ATS汇报的通信状态*/
if ((NULL != ciToXianDiDataBuffer) && (NULL != ii))
{
index = *ii;
cTransRciSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_CI);
pTransRciId = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_CI);
ciToXianDiDataBuffer[index] = cTransRciSum; /*具有通信关系的CI数量*/
index++;
if (NULL != pTransRciId)
{
for (jj = 0U; jj < cTransRciSum; jj++)
{
cNearRciCommState = Get2oo2CiAndOtherSysCommState(CI_SYSTEM_TYPE_CI, jj); /*获取与相邻CI通信状态*/
ciToXianDiDataBuffer[index] = CI_SYSTEM_TYPE_CI;
index++;
ciToXianDiDataBuffer[index] = pTransRciId[jj]; /*组CI ID*/
index++;
if (TRANSMIT_2OO2_STATE_GOOD == cNearRciCommState)
{
/*双网通信良好*/
cCommState = TRANSMIT_CI_STATE_GOOD;
}
else if (TRANSMIT_2OO2_STATE_LINK == cNearRciCommState)
{
/*单网通信故障*/
cCommState = TRANSMIT_CI_STATE_LINK;
}
else if (TRANSMIT_2OO2_STATE_BAD == cNearRciCommState)
{
/*双网通信故障*/
cCommState = TRANSMIT_CI_STATE_BAD;
}
else
{
/*异常分支,双网通信故障*/
cCommState = TRANSMIT_CI_STATE_BAD;
}
ciToXianDiDataBuffer[index] = cCommState; /*组相邻CI通信状态*/
index++;
}
}
else
{
/*不处理*/
}
cTransRciSum = GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_RC);
pTransRciId = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_RC);
ciToXianDiDataBuffer[index] = cTransRciSum; /*具有通信关系的RC数量*/
index++;
if (NULL != pTransRciId)
{
for (jj = 0U; jj < cTransRciSum; jj++)
{
cNearRciCommState = Get2oo2CiAndOtherSysCommState(CI_SYSTEM_TYPE_RC, jj); /*获取与相邻RC通信状态*/
ciToXianDiDataBuffer[index] = CI_SYSTEM_TYPE_RC;
index++;
ciToXianDiDataBuffer[index] = pTransRciId[jj]; /*组RC ID*/
index++;
if (TRANSMIT_2OO2_STATE_GOOD == cNearRciCommState)
{
/*双网通信良好*/
cCommState = TRANSMIT_CI_STATE_GOOD;
}
else if (TRANSMIT_2OO2_STATE_LINK == cNearRciCommState)
{
/*单网通信故障*/
cCommState = TRANSMIT_CI_STATE_LINK;
}
else if (TRANSMIT_2OO2_STATE_BAD == cNearRciCommState)
{
/*双网通信故障*/
cCommState = TRANSMIT_CI_STATE_BAD;
}
else
{
/*异常分支,双网通信故障*/
cCommState = TRANSMIT_CI_STATE_BAD;
}
ciToXianDiDataBuffer[index] = cCommState; /*组相邻RC通信状态*/
index++;
}
}
else
{
/*不处理*/
}
*ii = index;
}
else
{
/*入参检查失败,不处理*/
}
}
/*
* ATS组通信表示灯使
* UINT8* ciToXianDiDataBuffer buffer
* UINT16* ii
*
* Created By LQ 2026.01.05
*/
void PackCommIndicatorToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii)
{
UINT16 index = 0U;
UINT16 jj = 0U;
UINT16 indicatorNum = 0U; /*表示报警灯数目*/
UINT16 wSumIndex = 0U;
UINT16 wPackIndicatorSum = 0U; /*已组包的表示灯数量*/
UINT16 indicatorId = 0U; /*表示灯报警灯ID*/
UINT8 indicatorType = 0U; /*表示报警灯类型*/
UINT8 indicatorState = 0U; /*表示报警灯状态*/
UINT8 indicatorDevId = 0U; /*标识报警灯设备ID*/
UINT8 cFuncRet = 0U;
if ((NULL != ciToXianDiDataBuffer) && (NULL != ii))
{
index = *ii;
wSumIndex = index;
wPackIndicatorSum = 0U;
index += 2U; /*跳过2字节表示灯数量*/
indicatorNum = GetIndicatorCurSum();
for (jj = 0U; jj < indicatorNum; jj++)
{
indicatorId = GetIndicatorId(jj);
indicatorType = GetIndicatorType(indicatorId); /*获取设备类型(原来直接用的类型做的索引,现在改为用ID做索引,需要转换为类型即报警灯类型)*/
cFuncRet = AtsIndicatorPackCheck(indicatorType); /*根据表示灯类型检查表示灯是否需要组包*/
if (CI_SUCCESS == cFuncRet)
{
ciToXianDiDataBuffer[index] = indicatorType; /*表示灯报警灯分类号*/
index++;
indicatorDevId = GetIndicatorDevId(indicatorId);
ciToXianDiDataBuffer[index] = indicatorDevId; /*报警灯设备ID*/
index++;
indicatorState = GetIndicatorState(indicatorId);
ciToXianDiDataBuffer[index] = indicatorState; /*表示灯报警灯状态*/
index++;
wPackIndicatorSum++;
}
else
{
/*不组该表示灯*/
}
}
ShortToChar(wPackIndicatorSum, &ciToXianDiDataBuffer[wSumIndex]); /*表示灯报警灯总数*/
*ii = index;
}
else
{
/*入参检查失败,不处理*/
}
}
/*
* ATS组包使
* UINT8 cIndicatorType
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 AtsIndicatorPackCheck(UINT8 cIndicatorType)
{
UINT8 cRetVal = CI_ERROR;
if ((INDICATOR_TYPE_CIDEVICE_FAULT == cIndicatorType)
|| (INDICATOR_TYPE_COMM_LEU == cIndicatorType)
|| (INDICATOR_TYPE_COMM_ZC == cIndicatorType)
|| (INDICATOR_TYPE_COMM_AXIS == cIndicatorType)
|| (INDICATOR_TYPE_EXPRESS_MAINP == cIndicatorType)
|| (INDICATOR_TYPE_EXPRESS_MAINP_2 == cIndicatorType)
|| (INDICATOR_TYPE_EXPRESS_BACKP == cIndicatorType)
|| (INDICATOR_TYPE_EXPRESS_BACKP_2 == cIndicatorType))
{
cRetVal = CI_SUCCESS; /*需要组包*/
}
else
{
/*不需要组包*/
}
return cRetVal;
}
/**
* @brief RC/CI设备通用状态处理
* @param[in] UINT8* ciToXianDiDataBuffer CI组包给ATS或现地的数据数组
@@ -2901,9 +3112,8 @@ void SendAtsCommonStationStateDeal(UINT8* ciToXianDiDataBuffer, UINT16* wDataInd
UINT8 chVirTailScreStat = TRAIN_VIR_SCREEN_PASS_FLAG_INVALID; /*列车虚拟后筛标志*/
UINT8 virtualCiNum = 0U; /*虚拟联锁数目*/
UINT8 virtualCIid = 0U; /*虚拟联锁ID*/
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG); /*是否支持虚拟联锁开关*/
UINT8 chIndicBelongRtuId = 0U; /*表示灯报警灯RTUID*/
UINT16 indicatorId = 0U; /*表示灯报警灯ID*/
UINT8 indicatorState = 0U; /*表示报警灯状态*/
UINT16 indicatorNum = 0U; /*表示报警灯数目*/
UINT8 indicatorType = 0U; /*表示报警灯类型*/
UINT8 indicatorDevId = 0U; /*标识报警灯设备ID*/
@@ -2912,7 +3122,8 @@ void SendAtsCommonStationStateDeal(UINT8* ciToXianDiDataBuffer, UINT16* wDataInd
UINT8 cFunRetVal = CI_ERROR; /*数据检查返回值*/
UINT8 cTiocMode = REVERSE_MODE_SHADOW; /*TIOC模式*/
UINT8 cTiocCutReason = 0U; /*不允许倒切原因*/
UINT16 wRtuIndicatorNum = 0U;
UINT16 wTempIndex = 0U;
if ((NULL != ciToXianDiDataBuffer) && (NULL != wDataIndex) && (NULL != chSendXiandiorAtsBuf))
{
ii = *wDataIndex;
@@ -3061,47 +3272,36 @@ void SendAtsCommonStationStateDeal(UINT8* ciToXianDiDataBuffer, UINT16* wDataInd
ShortToChar(comTrainSum, &ciToXianDiDataBuffer[wcomTrainSumIndex]);
/*指示灯状态*/
if (FUNC_SWITCH_ON == includeVirFlag)
{
virtualCiNum = GetVirtualCINum();
ciToXianDiDataBuffer[ii++] = virtualCiNum;/*本联锁包含的虚拟联锁数量*/
for (kk = 0u; kk < virtualCiNum; kk++)
{
virtualCIid = GetVirtualCIid(kk);
ciToXianDiDataBuffer[ii++] = virtualCIid;/*虚拟联锁ID*/
/*表示灯报警灯信息*/
indicatorNum = (UINT16)GetVirCIIndicatorConfigDataNum(virtualCIid);
ShortToChar(indicatorNum, &ciToXianDiDataBuffer[ii]);/*表示灯报警灯总数*/
ii += 2u;
for (jj = 0u; jj < indicatorNum; jj++)
{
indicatorId = GetVirCIlocalCiIndicatorId(virtualCIid, jj); /*表示灯报警灯分类号*/
indicatorType = GetVirCIIndicatorType(virtualCIid, (UINT8)indicatorId); /*获取设备类型*/ /*原来直接用的类型做的索引,现在改为用ID做索引,需要转换为类型即报警灯类型*/
indicatorState = GetVirCIIndicatorState(virtualCIid, (UINT8)indicatorId); /*表示灯报警灯状态*/
indicatorDevId = GetVirCIIndicatorDevId(virtualCIid, (UINT8)indicatorId); /*表示灯报警灯ID*/
ciToXianDiDataBuffer[ii++] = indicatorType;
ciToXianDiDataBuffer[ii++] = indicatorDevId;
ciToXianDiDataBuffer[ii++] = indicatorState;
}
}
}
else
virtualCiNum = GetVirtualCINum();
ciToXianDiDataBuffer[ii++] = virtualCiNum; /*本联锁包含的虚拟联锁数量*/
for (kk = 0U; kk < virtualCiNum; kk++)
{
virtualCIid = GetVirtualCIid(kk);
ciToXianDiDataBuffer[ii++] = virtualCIid; /*虚拟联锁ID*/
/*表示灯报警灯信息*/
ciToXianDiDataBuffer[ii++] = 1u;/*适配接口*/
ciToXianDiDataBuffer[ii++] = chLocalCiId;
indicatorNum = GetIndicatorCurSum();
ShortToChar(indicatorNum, &ciToXianDiDataBuffer[ii]);/*表示灯报警灯总数*/
ii += 2u;
for (jj = 0u; jj < indicatorNum; jj++)
wTempIndex = ii;
ii += 2U;
wRtuIndicatorNum = 0U;
for (jj = 0U; jj < indicatorNum; jj++)
{
indicatorId = GetIndicatorId(jj);
indicatorType = GetIndicatorType(indicatorId); /*获取设备类型*/ /*原来直接用的类型做的索引,现在改为用ID做索引,需要转换为类型即报警灯类型*/
ciToXianDiDataBuffer[ii++] = indicatorType; /*表示灯报警灯分类号*/
indicatorDevId = GetIndicatorDevId(indicatorId);
ciToXianDiDataBuffer[ii++] = indicatorDevId;/*报警灯设备ID*/
ciToXianDiDataBuffer[ii++] = GetIndicatorState(indicatorId);/*表示灯报警灯状态*/
chIndicBelongRtuId = GetIndicBelongRtuId(indicatorId);
if (chIndicBelongRtuId == virtualCIid)
{
wRtuIndicatorNum++;
indicatorType = GetIndicatorType(indicatorId); /*获取设备类型*/ /*原来直接用的类型做的索引,现在改为用ID做索引,需要转换为类型即报警灯类型*/
ciToXianDiDataBuffer[ii++] = indicatorType; /*表示灯报警灯分类号*/
indicatorDevId = GetIndicatorDevId(indicatorId);
ciToXianDiDataBuffer[ii++] = indicatorDevId;/*报警灯设备ID*/
ciToXianDiDataBuffer[ii++] = GetIndicatorState(indicatorId);/*表示灯报警灯状态*/
}
else
{
/*不处理*/
}
}
ShortToChar(wRtuIndicatorNum, &ciToXianDiDataBuffer[wTempIndex]);/*表示灯报警灯总数*/
}
UpdataCiSendCmdBack_OrderBack();/*发送数据命令更新*/
@@ -3456,7 +3656,7 @@ UINT8 ReciveAtsCmdDeal(const UINT8* dataBuf, UINT16* dataIndex,const UINT16 wDat
if (wDataLength != (ii- *dataIndex))
{
CiRevCmdStruCurSum = 0u;
CiRevCmdStruCurSum = preAtsRouteSteCmdNum;
chRetVal = CI_ERROR;
}
else
@@ -3718,6 +3918,12 @@ void PackRcOrCiDeciveCommonState(UINT8* ciToXianDiDataBuffer, UINT16* ii)
/*通信设备故障*/
wIndex++;
/*组表示灯*/
PackCommIndicatorToAts(ciToXianDiDataBuffer, &wIndex);
/*组相邻RC/CI通信状态*/
PackNearRciCommStateToAts(ciToXianDiDataBuffer, &wIndex);
*ii = wIndex;
}
else
@@ -433,6 +433,33 @@ UINT8 GetOcPscConfirmFlag(UINT8 index);
*/
void PackCiDataToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii);
/*
* ATS组相邻RC/CI的通信状态使
* UINT8* ciToXianDiDataBuffer buffer
* UINT16* ii
*
* Created By LQ 2026.01.05
*/
void PackNearRciCommStateToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii);
/*
* ATS组通信表示灯使
* UINT8* ciToXianDiDataBuffer buffer
* UINT16* ii
*
* Created By LQ 2026.01.05
*/
void PackCommIndicatorToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii);
/*
* ATS组包使
* UINT8 cIndicatorType
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 AtsIndicatorPackCheck(UINT8 cIndicatorType);
/**
* @brief RC/CI设备通用状态处理
* @param[in] UINT8* ciToXianDiDataBuffer CI组包给ATS或现地的数据数组
File diff suppressed because it is too large Load Diff
+500 -15
View File
@@ -85,12 +85,20 @@
#define BIT_VAL_00000001B ((UINT8)0X01)
#define BIT_VAL_00000010B ((UINT8)0X02)
#define BIT_VAL_00000011B ((UINT8)0X03)
#define BIT_VAL_00000100B ((UINT8)0x04)
#define BIT_VAL_00000101B ((UINT8)0x05)
#define BIT_VAL_00000110B ((UINT8)0x06)
#define BIT_VAL_00010001B ((UINT8)0x11)
#define BIT_VAL_00010010B ((UINT8)0x12)
#define BIT_VAL_00010100B ((UINT8)0x14)
#define BIT_VAL_00011000B ((UINT8)0x18)
#define BIT_VAL_11111111B ((UINT8)0xFF)
#define BIT_PALCE11000000 ((UINT8)0xC0)
#define BIT_PALCE00110000 ((UINT8)0x30)
#define BIT_PALCE00001100 ((UINT8)0x0C)
#define BIT_PALCE00000011 ((UINT8)0x03)
/*物理区段上电锁闭设置标志*/
#define HLHT_STARTLOCK_SET_NO ((UINT8)0xaa) /*未设置*/
#define HLHT_STARTLOCK_SET_YES ((UINT8)0x55) /*设置*/
@@ -100,12 +108,13 @@
#define PHYSEC_LOCKDIRECTION_OPPST_YES ((UINT8)0xAA) /*取反*/
#define PHYSEC_LOCKDIRECTION_OPPST_DEFAULT ((UINT8)0xFF) /*默认值*/
#define CICI_VERSION ((UINT8)30) /*cici接口版本号,每次修改接口需要升级版本号——Last Modified On 2025.11.04*/
#define CICI_BEGIN_TO_STATION_LEN ((UINT16)37) /*20251104更新为HLHT头长度+应用层保温内容前6字节*/
#define CICI_CICIVERINDEX (CICI_BEGIN_TO_STATION_LEN-6U-3U) /*20251104更新后CI接口版本信息索引*/
#define CICI_VERSION ((UINT8)31) /*cici接口版本号,每次修改接口需要升级版本号——Last Modified On 2026.01.04*/
#define CICI_BEGIN_TO_STATION_LEN ((UINT16)31) /*20251104更新为HLHT头长度+应用层保温内容前6字节*/
#define CICI_CICIVERINDEX (CICI_BEGIN_TO_STATION_LEN-3U) /*20251104更新后CI接口版本信息索引*/
#define CICI_ONE_SWITCH_LEN ((UINT16)13) /*一个道岔数据长度*/
#define CICI_ONE_PHYSEC_LEN ((UINT16)23U)/*一个物理区段数据长度*/
#define CICI_ONE_LOGSEC_LEN ((UINT16)11)/*一个逻辑区段数据长度*/
#define CICI_ONE_PHYSEC_LEN ((UINT16)12U)/*一个物理区段数据长度*/
#define CICI_ONE_PHYSEC_UT_LEN ((UINT16)1U)/*一个物理区段坏车占用数据长度*/
#define CICI_ONE_LOGSEC_LEN ((UINT16)9)/*一个逻辑区段数据长度*/
#define CICI_ONE_SIGNAL_LEN ((UINT16)11)/*一个信号机数据长度*/
#define CICI_ONE_PSD_LEN ((UINT16)5)/*一个屏蔽门数据长度*/
#define CICI_ONE_ESB_LEN ((UINT16)4)/*一个ESB数据长度*/
@@ -129,10 +138,22 @@
#define LOCAL_CI_RC_INTER_TYPE ((UINT16)0x0306U) /*本控区CI-RC接口类型*/
#define LOCAL_RC_TO_CI_INFO_DEV_STATE ((UINT16)0x0301U) /*本控区RC发送本控区CI设备状态帧*/
#define LOCAL_CI_TO_RC_INFO_HEART ((UINT16)0x0302U) /*本控区CI发送本控区RC心跳帧*/
#define LOCAL_RCI_INFO_STATE ((UINT16)0x0303U) /*同模式联锁间接口类型*/
#define NEAR_RCI_GENERAL_DEV_INFO ((UINT16)0x0303U) /*通用设备信息帧(相邻主用RC与主用CI间)*/
#define NEAR_RCI_PBTACS_DEV_INFO ((UINT16)0x0304U) /*PBTACS接口特有设备信息帧(相邻RC间)*/
#define NEAR_RCI_HEART_INFO ((UINT16)0x0305U) /*心跳帧(相邻备用RC与主用CI间)*/
#define LOCAL_CI_RC_PRTCL_VER ((UINT8)0x01U) /*本控区CI-RC协议版本号*/
#define TMP_PACKBUF_LEN (UINT16)(10000)/*临时组包数组长度*/
/*给相邻RC/CI组包类型*/
#define RCCI_PACK_TYPE_HEART ((UINT8)0U) /*组心跳帧*/
#define RCCI_PACK_TYPE_GENERAL ((UINT8)0x55U) /*组通用设备信息帧*/
#define RCCI_PACK_TYPE_PBTACS ((UINT8)0xAAU) /*组PB-TACS特有设备信息帧*/
#define RCCI_PACK_TYPE_ALL_DEV ((UINT8)0xFFU) /*组通用设备信息帧+PB-TACS特有设备信息帧*/
/*相邻RC/CI间命令类型*/
#define RCCI_CMD_TYPE_GENERAL ((UINT8)0x55U) /*通用命令*/
#define RCCI_CMD_TYPE_PBTACS ((UINT8)0xAAU) /*PB-TACS特有命令*/
/*物理区段数据结构体*/
typedef struct S_IntconPhySecDataStruct
@@ -259,6 +280,15 @@ extern "C" {
UINT16 wAreaIteCutId[CI_TO_CI_AREA_SNOW_SUM_MAX]; /*区间ID数组*/
} ToCiAreaIteCutStruct;
/*相邻RC发送的帧类型*/
typedef struct S_NeighborCiInfoStruct
{
UINT8 cSourceRcId; /*发送方ID*/
UINT16 cIRctoCInfoType; /*RC发送的帧类型*/
UINT8 cMainUseMode; /*相邻联锁主用方*/
UINT32 dwMainUseCurCyc; /*主用方周期号*/
} NeighborCiInfoStruct;
/*******************************全局变量声明*******************************/
extern ToCiCommandDataStruct RecvCiCmdDataStru[RECVCI_CMD_DATA_STRU_SUM_MAX];
extern UINT16 RecvCiCmdDataStruCurSum;
@@ -277,37 +307,412 @@ extern "C" {
extern ToCiAreaSnowStruct szSendCiAreaSnow[CI_COM_CI_MAX_NUM];
extern ToCiAreaIteCutStruct szRecvCiAreaIteCut[CI_COM_CI_MAX_NUM];
extern ToCiAreaIteCutStruct szSendCiAreaIteCut[CI_COM_CI_MAX_NUM];
extern NeighborCiInfoStruct szNeighborCiInfo[CI_COM_CI_MAX_NUM]; /*接收来自相邻RC的帧类型*/
/*
* CI单帧数据
* UINT8* dataBuf , UINT16 dataLength ,UINT8 chSendCiId id
* UINT8* dataBuf , UINT16 dataLength ,UINT16 wSourceDevId id
* 0:
* 1:
* @note 20220419 wqm
1dsuCheckSameLoc返回值需要变量承接
2
310
*/
UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 sourceId);
UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT16 wSourceDevId);
/*
* CI间单帧数据
* UINT8* dataBuf
* UINT16 dataLength
* UINT16 srcDevTypeId
* UINT8 *errNo
* CI_ERROR:
* CI_SUCCESS:
*/
UINT8 ParseCiToCiDataCheck(UINT8* dataBuf, UINT16 dataLength, UINT8 *errNo);
UINT8 ParseCiToCiDataCheck(UINT8* dataBuf, UINT16 dataLength, UINT8 *errNo, UINT16 srcDevTypeId);
/*
* CI数据
* UINT8 targetDeviceId, ID
* 0:
* 1:
* CI数据
* UINT8 targetDeviceType
* UINT8 targetDeviceId, ID
* 0:
* 1:
*/
UINT8 PackCiToCiData(UINT8 targetDeviceId);
UINT8 PackCiToCiData(UINT8 targetDeviceType, UINT8 targetDeviceId);
/*
* RC/CI需要给相邻RC/CI组包的帧类型
* UINT8 targetDeviceType
* UINT8 targetDeviceId ID
* 0
* 0x55
* 0xAA PB-TACS特有设备信息帧
* 0xFF +PB-TACS特有设备信息帧
* Created By LQ 2026.01.04
*/
UINT8 GetSendToNearRciInfoType(UINT8 targetDeviceType, UINT8 targetDeviceId);
/*
* RC/CI的区段征用命令信息
* UINT8 targetDeviceId ID
*
* Created By LQ 2026.01.04
*/
void UpdateSendToRciSecUseCmd(UINT8 targetDeviceId);
/*
* RC/CI的道岔征用命令信息
* UINT8 targetDeviceId ID
*
* Created By LQ 2026.01.04
*/
void UpdateSendToRciSwtUseCmd(UINT8 targetDeviceId);
/*
* RC/CI的试车命令信息
* UINT8 targetDeviceId ID
*
* Created By LQ 2026.01.04
*/
void UpdateSendToRciTrainTestCmd(UINT8 targetDeviceId);
/*
* RC/CI间组心跳帧应用层信息
* UINT8* dataFrame
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.04
*/
UINT8 PackNearRciHeartAppInfo(UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组通用设备信息帧应用层信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Modefied By LQ 2026.01.05
*/
UINT8 PackNearRciGeneralAppInfo(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组道岔信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciSwitchData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组物理区段坏车占用信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.16
*/
UINT8 PackNearRciPhySecUtOccData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组物理区段状态信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciPhySecStateData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* CI发送的待解析的物理区段坏车占用信息
* const UINT8* dataBuf
* UINT16* index
* 0
* 1
*/
UINT8 CheckCiToCiPhySecUtOccData(const UINT8* dataBuf, UINT16* index);
/*
* RC/CI间组逻辑区段状态信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciLogSecStateData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组信号机信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciSignalData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组屏蔽门信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciPsdData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组紧急停车按钮信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciEsbData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组进路信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciRouteData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组物理区段锁闭信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciPhySecLockData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组SPKS信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciSpksData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组虚拟继电器信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciVirtualRelayData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组防淹门信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciFloodGateData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组保护区段信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciOverlapData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组自动通过进路信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciAutoRouteData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组逻辑区段锁闭信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciLogSecLockData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组区间湿轨信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciAreaSnowData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组区间ITE切除信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciAreaIteCutData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组离去逻辑区段信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciLeaveLogSecData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组其它控区进路的道岔检查结果
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciRouteSwtCheckData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组其它控区保护区段的防护道岔检查结果
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciOlapProSwtCheckData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组防护道岔防护锁闭信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame Buf
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.05
*/
UINT8 PackNearRciProSwtProLockData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组通用命令信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.04
*/
UINT8 PackNearRciGeneralCmdData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组PB-TACS特有设备信息帧应用层信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.04
*/
UINT8 PackNearRciPbtacsAppInfo(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组逻辑区段资源可用信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.04
*/
UINT8 PackNearRciLogSecResUseData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组逻辑区段资源锁闭信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.04
*/
UINT8 PackNearRciLogSecResLockData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组分界点信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.04
*/
UINT8 PackNearRciCfpData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间组PB-TACS特有命令信息
* UINT8 dstCiId RC/CI编号
* UINT8* dataFrame
* UINT16* dataLength
* 0
* 1
* Created By LQ 2026.01.04
*/
UINT8 PackNearRciPbtacsCmdData(UINT8 dstCiId, UINT8* dataFrame, UINT16* dataLength);
/*
* RC/CI间指定ID命令的命令类型PB-TACS特有命令
* UINT16 wCmdId ID
* 0
* 0x55
* 0xAA PB-TACS特有命令
* Created By LQ 2026.01.04
*/
UINT8 CheckNearRciCmdType(UINT16 wCmdId);
/*
* ID数组总数
@@ -552,7 +957,7 @@ void ClearCiRevCiDrCmdData(void);
* CI_ERROR:
* CI_SUCCESS:
*/
UINT8 CheckCiIDAndVer(const UINT8* dataBuf, UINT8* Index);
UINT8 CheckCiIDAndVer(const UINT8* dataBuf, UINT16* Index);
/*
* CI发送的待解析的道岔数据
@@ -581,6 +986,16 @@ UINT8 CheckCiToCiPhySecData(const UINT8* dataBuf, UINT16* index);
*/
UINT8 CheckCiToCiLogSecData(const UINT8* dataBuf, UINT16* index);
/*
* RC发送的的特有逻辑区段数据
* const UINT8* dataBuf
* UINT16* index
* 0
* 1
*Create fan 2026.01.04
*/
UINT8 CheckCiToCiLogSecDataRcOnly(const UINT8* dataBuf, UINT16* index);
/*
* CI发送的待解析的信号机数据
* const UINT8* dataBuf
@@ -599,6 +1014,15 @@ UINT8 CheckCiToCiSignalData(const UINT8* dataBuf, UINT16* index);
*/
UINT8 CheckCiToCiCommandData(const UINT8* dataBuf, UINT16* index);
/*
* CI发送的待解析的命令数据
* const UINT8* dataBuf
* UINT16* index
* 0
* 1
*Create fan 2026.01.04
*/
UINT8 CheckCiToCiCommandDataRcOnly(const UINT8* dataBuf, UINT16* index);
/*
* CI发送的待解析的防淹门数据
@@ -637,6 +1061,16 @@ UINT8 CheckCiToCiAutoRouteData(const UINT8* dataBuf, UINT16* index);
*/
UINT8 CheckCiToCiLogicLockData(const UINT8* dataBuf, UINT16* index);
/*
* CI发送的本联锁中由其他联锁管理的逻辑区段锁闭数据
* const UINT8* dataBuf
* UINT16* index
* 0
* 1
*Create fan 2026.0.1.04
*/
UINT8 CheckCiToCiLogicLockDataRcOnly(const UINT8* dataBuf, UINT16* index);
/*
*
* const UINT8* dataBuf
@@ -1136,6 +1570,57 @@ UINT8 CheckLocalRcToCiPsdData(const UINT8* dataBuf, UINT16* index);
*/
UINT8 CheckLocalRcToCiSnowData(const UINT8* dataBuf, UINT16* index);
/*
* RC间TB-TACS特有单帧数据
* UINT8* dataBuf , UINT16 dataLength
* 0:
* 1:
* Create Fan 2025.12.31
*/
UINT8 ParseRcToRcPbTacsDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 sourceId);
/*
* RC发送本CI的帧类型
* const UINT8 cTargetRcId RC ID
* RC发送本CI的帧类型
* Created By LQ 2026.01.04
*/
UINT16 GetNearRcSendInfoType(const UINT8 cTargetRcId);
/*
* RC发送本CI的帧类型
* const UINT8 cTargetRcId RC ID
* const UINT16 cIRctoCInfoType
*
* Created By LQ 2026.01.04
*/
void SetNearRcSendInfoType(const UINT8 cTargetRcId, const UINT16 cInfoType);
/*
* RC发送本CI的主用模式类型
* const UINT8 cTargetRcId RC ID
* RC发送本CI的帧类型
* Created By fan 2026.01.04
*/
UINT8 GetNearRCISendMainUseMode(const UINT8 cTargetRcId);
/*
*
* const UINT8 cTargetRcId RC ID
* const UINT8 chMode UINT32 dwMainCyc主用方CYC
*
* Created By fan 2026.01.04
*/
void SetNearRCISendMainUseMode(const UINT8 cTargetRcId, const UINT8 chMode,const UINT32 dwMainCyc);
/*
*
* const UINT8 cTargetRcId RC ID
*
* Created By fan 2026.01.04
*/
void ClearNearRCISendInfo(const UINT8 cTargetRcId, const UINT8 chMode);
#ifdef __cplusplus
}
#endif
+327 -85
View File
@@ -1584,10 +1584,12 @@ UINT8 RouteMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dat
UINT8 dcQState = GetRouteDCQState(DeviceId);/*进路调车请求状态*/
UINT8 dcTState = GetRouteDCTYState(DeviceId);/*进路调车同意状态*/
UINT8 chDCAgreeBtnErrState = GetRouteDcAgreeButtonErrState(DeviceId);/*进路调车同意按钮故障状态*/
UINT8 RouteCiId = 0u; /*进路所属联锁*/
UINT8 CiTypeOfRoute = 0u; /*当前进路所属联锁类型*/
UINT8 ciTrainTestState = 0u; /*试车线联锁状态*/
UINT8 routeAutoTriggerFlag = GetRouteAutoTriggerFlag(DeviceId); /*获取进路自动触发标志*/
UINT8 chVirCiId = 0u;
UINT8 chVirCiType = 0u;
switch (MaskType)
{
case MASK_TYPE_ROUTE_IDLE:/*进路空闲码位*/
@@ -1673,10 +1675,11 @@ UINT8 RouteMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dat
break;
case MASK_TYPE_ROUTE_LOCKSTATE:/*CI-ZC码位,基本进路锁闭状态码位:根据接口说明,进路属于办理状态,引导进路均发送0,当进路状态为预选或选排且最后一个区段为锁闭状态则仍发1,解决CBTC模式进路追踪办理动道岔期间不给ZC发进路建立状态*/
/*获取进路所属CI*/
RouteCiId = GetRouteBelongCiId(DeviceId);
chVirCiId = GetRouteBelongVirCiId(DeviceId);
chVirCiType = GetLocalVirCiType(chVirCiId);
/*获取联锁类型*/
CiTypeOfRoute = GetCiType(RouteCiId);
if ((0u != RouteCiId) && (0u != CiTypeOfRoute))
if ((0u != chVirCiId) && (0u != chVirCiType))
{
if ((ROUTE_STATE_IDLE != routeState)
&& (ROUTE_STATE_FIRST_XUANPAI != routeState)
@@ -1693,7 +1696,7 @@ UINT8 RouteMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dat
)
{
ciTrainTestState = GetCiTrainTestStatus();
if ((CI_TYPE_SCX == CiTypeOfRoute) && (CI_TRAIN_TEST_ON != ciTrainTestState))
if ((CI_TYPE_SCX == chVirCiType) && (CI_TRAIN_TEST_ON != ciTrainTestState))
{
;
}
@@ -1881,7 +1884,6 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data
UINT8 mutualLockState = 0u;
UINT8 psdState = 0u;
UINT8 includeVirFlag = GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT8 RelayCollState = 0u;
UINT8 localCi = GetSystemParaLocalCiId();
UINT8 virtualZDZFBelongCiId = 0U;
@@ -1901,13 +1903,19 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data
UINT8 esbErrFlag = ESB_ERROR_FLAG_NO; /*紧急关闭按钮故障标志*/
UINT8 chCleFarePDBFlaLigFlag = 0U;/*清客确认箱PDB按钮闪灯状态*/
UINT8 chPsdVideoQkDriveState = 0U;/*清客确认箱视频清客驱动状态*/
UINT8 chRtnIndicatorDevId = 0U;/*无人折返报警灯设备ID*/
UINT16 wRtnIndicatorDevId = 0U;/*无人折返报警灯设备ID*/
UINT8 chNonRrnAdhesionState = 0U;/*无人折返按钮粘连状态*/
UINT8 cEsbCutErrFlag = ESB_ERROR_FLAG_NO; /*紧急关闭旁路按钮故障标志*/
UINT16 wEsbCollRelayId = 0U; /*ESB采集继电器ID*/
UINT8 cPsdExceptOpenState = 0U; /*屏蔽门异常打开状态*/
UINT8 chJXTCMutualLockFaultState = 0U; /*间隙探测按钮故障状态*/
UINT8 chIBPBtnState = 0U; /*IBP按钮状态*/
UINT8 chIBPBtnFaultState = 0U; /*IBP按钮故障状态*/
UINT8 chJXTCState = 0U; /*间隙探测状态*/
UINT8 cEsbCutBtnState = 0U; /*紧急关闭旁路按钮激活状态*/
UINT8 cOnePlatEsbState = 0U; /*同站紧急按钮激活状态*/
UINT8 cOnePlatEsbCutState = 0U; /*同站紧急旁路按钮激活状态*/
chRtnIndicatorDevId = GetIndicatorRelNonReturnId(DeviceId);
wRtnIndicatorDevId = GetIndicatorRelNonReturnId(DeviceId);
virtualZDZFBelongCiId = GetVirtualZDZFBelongCiId();
virtualZDZFDevType = GetVirtualZDZFDevType();
virtualZDZFButtonState = GetVirtualZDZFButtonState();
@@ -1915,50 +1923,44 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data
switch (MaskType)
{
case MASK_TYPE_PLAT_AUTORETURNSIG_BUTTONSTAT:/*站台无人折返按钮激活状态码位*/
if (FUNC_SWITCH_ON == includeVirFlag)
/*若未配置虚拟联锁,则DeviceId为指示灯ID*/
for (ii = 0u; ii < GetIndicatorCurSum(); ii++)
{
DealAutoReturnButtonMask_Vir(DeviceId, MaskId, dataBuf);/*若配置虚拟联锁,则DeviceId为指示灯表的行ID*/
}
else
{/*若未配置虚拟联锁,则DeviceId为指示灯ID*/
for (ii = 0u; ii < GetIndicatorCurSum(); ii++)
{
if ((DeviceId == GetIndicatorId(ii))
&& (INDICATOR_TYPE_EXPRESS_RETURN == GetIndicatorType(DeviceId)))
{/*设备ID对应且指示灯类型为无人折返灯*/
if ((DeviceId == GetIndicatorId(ii))
&& (INDICATOR_TYPE_EXPRESS_RETURN == GetIndicatorType(DeviceId)))
{/*设备ID对应且指示灯类型为无人折返灯*/
if ((virtualZDZFBelongCiId == localCi) && (CI_DEVICE_TYPE_AUTORETURN == virtualZDZFDevType))
{/*无人折返按钮为虚拟设备*/
if (VIRTUAL_ZDZFAJ_BUTTON_YES == virtualZDZFButtonState)
{/*虚拟设备无人折返按钮按下*/
SetMaskValue(MaskId, dataBuf);
}
if ((virtualZDZFBelongCiId == localCi) && (CI_DEVICE_TYPE_AUTORETURN == virtualZDZFDevType))
{/*无人折返按钮为虚拟设备*/
if (VIRTUAL_ZDZFAJ_BUTTON_YES == virtualZDZFButtonState)
{/*虚拟设备无人折返按钮按下*/
SetMaskValue(MaskId, dataBuf);
}
}
else
{/*无人折返按钮是真实的*/
relaySum = GetIndicatorRelaySum(DeviceId);
relayIdBuf = GetIndicatorRelayIdBuf(DeviceId);
if ((3u != relaySum) || (NULL == relayIdBuf))
{/*继电器数据错误或无人折返按钮为虚拟设备*/
returnValue = CI_ERROR;
break;
}
else
{/*无人折返按钮是真实的*/
relaySum = GetIndicatorRelaySum(DeviceId);
relayIdBuf = GetIndicatorRelayIdBuf(DeviceId);
if ((3u != relaySum) || (NULL == relayIdBuf))
{/*继电器数据错误或无人折返按钮为虚拟设备*/
returnValue = CI_ERROR;
break;
{
RelayCollState = GetRelayCollState(relayIdBuf[2]);
chNonRrnAdhesionState = GetNonRtnAdhesionState(wRtnIndicatorDevId);
if ((RELAY_STATE_UP == RelayCollState) && (RTN_RELAY_ADHESION_NO == chNonRrnAdhesionState))
{/*无人折返按钮继电器吸起*/
SetMaskValue(MaskId, dataBuf);
}
else
{
RelayCollState = GetRelayCollState(relayIdBuf[2]);
chNonRrnAdhesionState = GetNonRtnAdhesionState(chRtnIndicatorDevId);
if ((RELAY_STATE_UP == RelayCollState) && (RTN_RELAY_ADHESION_NO == chNonRrnAdhesionState))
{/*无人折返按钮继电器吸起*/
SetMaskValue(MaskId, dataBuf);
}
else
{
}
}
}
}
}
}
@@ -2028,16 +2030,41 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data
/*码位值发0*/
}
break;
case MASK_TYPE_ESP_PRESS_STATE:
wEsbCollRelayId = GetEsbRelayId(DeviceId); /*获取ESB采集继电器*/
RelayCollState = GetRelayCollState(wEsbCollRelayId); /*获取ESB采集继电器状态*/
if (RELAY_STATE_UP == RelayCollState)
case MASK_TYPE_CUT_ESP_STATE:
/*紧急关闭按钮旁路按钮激活状态*/
cEsbCutBtnState = GetEsbCutState(DeviceId);
if (ESB_CUT_YES == cEsbCutBtnState)
{
SetMaskValue(MaskId, dataBuf); /*ESB未按下,发1*/
SetMaskValue(MaskId, dataBuf); /*旁路有效,码位发1*/
}
else
{
/*ESB按下,发0*/
/*旁路无效,码位发0*/
}
break;
case MASK_TYPE_ONEPLAT_ESP_STATE:
/*紧急关闭按钮同站紧急按钮激活状态*/
cOnePlatEsbState = GetOnePlatEsbState(DeviceId);
cOnePlatEsbCutState = GetOnePlatEsbCutState(DeviceId);
if ((ESB_STATE_VALID_NO == cOnePlatEsbState) || (ESB_CUT_YES == cOnePlatEsbCutState))
{
SetMaskValue(MaskId, dataBuf); /*紧急无效或旁路有效,码位发1*/
}
else
{
/*紧急有效,码位发0*/
}
break;
case MASK_TYPE_ONEPLAT_CUT_ESP_STATE:
/*紧急关闭按钮同站旁路按钮激活状态*/
cOnePlatEsbCutState = GetOnePlatEsbCutState(DeviceId);
if (ESB_CUT_YES == cOnePlatEsbCutState)
{
SetMaskValue(MaskId, dataBuf); /*同站旁路有效,码位发1*/
}
else
{
/*同站旁路无效,码位发0*/
}
break;
case MASK_TYPE_PSD_STATE_ATS:/*站台屏蔽门状态码位;给ATS*/
@@ -2114,6 +2141,30 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data
else
{/*未开始计时或计时未到,给现地和ATS发送无障碍物*/
}
/* 间隙探测停止时间内,继续采信间隙探测结果*/
if(CI_TIME_OUT == SystemOverTimeCheck(GetStopDetectionCycNum(DeviceId), GetwJXTCStopDetectTime()))
{
/*间隙探测停止时间已经到了,不在继续采信间隙探测结果*/
}
else
{
if(0u == GetStopDetectionCycNum(DeviceId))
{
/*未开始计时*/
}
else
{
/* 间隙探测停止时间未到,继续采信间隙探测结果*/
if (PSD_REMORA_YES == GetPsdRemoraState(DeviceId))
{/*1表示间隙探测有障碍物*/
SetMaskValue(MaskId, dataBuf);
}
else
{/*0表示间隙探测无障碍物*/
}
}
}
}
break;
case MASK_TYPE_PSD_JXTC_PANGLU:
@@ -2268,6 +2319,73 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data
/*PSD异常打开,码位组0*/
}
break;
case MASK_TYPE_PSD_JXTCPANGLU_FAULT:
chJXTCMutualLockFaultState= GetPsdJXTCMutualLockFaultState(DeviceId);
if (JXTC_MUTUALLOCKFAULT_YES == chJXTCMutualLockFaultState)
{/*间隙探测互锁解除按钮故障*/
SetMaskValue(MaskId, dataBuf);
}
else
{/*间隙探测互锁解除按钮未故障*/
}
break;
case MASK_TYPE_PSD_IBP_STATE:
chIBPBtnState= GetPsdButtonIbpState(DeviceId);
if (PLATFORM_DEPAR_BUTTON_STATE_VALID == chIBPBtnState)
{/*IBP盘发车按钮有效*/
SetMaskValue(MaskId, dataBuf);
}
else
{/*IBP盘发车按钮无效*/
}
break;
case MASK_TYPE_PSD_IBP_FAULT:
chIBPBtnFaultState= GetPsdButtonIbpState(DeviceId);
if (PLATFORM_DEPAR_BUTTON_STATE_FAULT == chIBPBtnFaultState)
{/*IBP盘发车按钮故障*/
SetMaskValue(MaskId, dataBuf);
}
else
{/*IBP盘发车按钮未故障*/
}
break;
case MASK_TYPE_PSD_JXTC_STATE:
if (JXTC_MUTUALLOCK_REMOVE_YES == GetJXTCMutualLockState(DeviceId))
{/*间隙探测互锁解除*/
}
else
{/*间隙探测未互锁解除*/
if (CI_TIME_OUT == SystemOverTimeCheck(GetStartDetectionCycNum(DeviceId), GetGapDetectCount()))
{
/*间隙探测开始探测有效*/
SetMaskValue(MaskId, dataBuf);
}
else
{
/*未开始计时或计时未到,给现地和ATS发送未启动*/
}
/* 间隙探测停止时间内*/
if(CI_TIME_OUT == SystemOverTimeCheck(GetStopDetectionCycNum(DeviceId), GetwJXTCStopDetectTime()))
{
/*间隙探测停止时间已经到了*/
}
else
{
if(0u == GetStopDetectionCycNum(DeviceId))
{
/*未开始计时*/
}
else
{
/* 间隙探测停止时间未到*/
SetMaskValue(MaskId, dataBuf);
}
}
}
break;
default:
returnValue = CI_ERROR;
break;
@@ -2342,6 +2460,11 @@ UINT8 WashManchineMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UIN
{
UINT8 returnValue = CI_SUCCESS;/*返回值默认成功*/
UINT8 chWashMachineReadyState = 0U;/*洗车机就绪状态*/
UINT8 washAdhesionState = 0U; /*洗车线洗车同意按钮粘连状态*/
UINT8 dccWashAdhesionState = 0U; /*DCC洗车同意按钮粘连状态*/
UINT8 passWashAdhesionState = 0U; /*洗车线反向通过同意按钮粘连状态*/
UINT8 dccPassWashAdhesionState = 0U; /*DCC反向通过同意按钮粘连*/
UINT8 chWashModeState = 0U;/*洗车机工作模式*/
switch (MaskType)
@@ -2367,6 +2490,50 @@ UINT8 WashManchineMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UIN
{
}
break;
case MASK_TYPE_WASHMACHINE_ZNTBUTTN:
/*降级模式洗车线洗车同意按钮粘连码位*/
washAdhesionState = GetDownWashAllowErrState(DeviceId);
if (WASH_BUTTON_STATE_ERR_NO == washAdhesionState)
{
SetMaskValue(MaskId, dataBuf);
}
else
{
}
break;
case MASK_TYPE_DCCWASHACHINE_ZNTBUTTN:
/*降级模式DCC洗车同意按钮粘连码位*/
dccWashAdhesionState = GetDownDccWashAllowErrState(DeviceId);
if (WASH_BUTTON_STATE_ERR_NO == dccWashAdhesionState)
{
SetMaskValue(MaskId, dataBuf);
}
else
{
}
break;
case MASK_TYPE_PASSWASHMACHINE_ZNTBUTTN:
/*降级模式洗车线洗车反向通过同意按钮粘连码位*/
passWashAdhesionState = GetDownWashAllowPassErrState(DeviceId);
if (WASH_BUTTON_STATE_ERR_NO == passWashAdhesionState)
{
SetMaskValue(MaskId, dataBuf);
}
else
{
}
break;
case MASK_TYPE_DCCPASSWASHMACHINE_ZNTBUTTN:
/*降级模式DCC洗车反向通过同意按钮粘连码位*/
dccPassWashAdhesionState = GetDownDccWashAllowPassErrState(DeviceId);
if (WASH_BUTTON_STATE_ERR_NO == dccPassWashAdhesionState)
{
SetMaskValue(MaskId, dataBuf);
}
else
{
}
break;
default:
returnValue = CI_ERROR;
break;
@@ -2790,10 +2957,8 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId)
OverlapConditionSwitchStruct* condSwiDataIdBuf = NULL;
/* overlap防护道岔 */
UINT8 protectSwitchSum = 0u;
UINT8 lockStatus = 0u;
UINT8 ylockStatus = 0u;/*临时变量:引导总锁状态*/
UINT8 fengsuoStateus = 0u;/*临时变量:封锁状态*/
UINT8 switchPos = 0u;/*临时变量:道岔位置*/
OverlapProtectSwitchStruct* protSwiDataIdBuf = NULL;
/*防淹门*/
@@ -2844,22 +3009,30 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId)
{ /* overlap道岔 */
checkSum = GetOverlapSwitchSum(rtOverlapLockedId);
condSwiDataIdBuf = GetOverlapCondSwitchStruct(rtOverlapLockedId);
for (ii = 0u; ii < checkSum; ii++)
if (NULL != condSwiDataIdBuf)
{
if ((SWITCH_LOCK_YINZONG_NO == GetSwitchYLockState(condSwiDataIdBuf[ii].SwitchId)) &&
(SWITCH_LOCK_FENGSUO_NO == GetSwitchFLockState(condSwiDataIdBuf[ii].SwitchId)) &&
(condSwiDataIdBuf[ii].SwitchPosition == GetSwitchCurPosition(condSwiDataIdBuf[ii].SwitchId)))
for (ii = 0U; ii < checkSum; ii++)
{
/* 保护区段所包含的道岔为:非引导总锁且未封锁且道岔位置正确,非连通位置不存在侵入,才发送码位*/
if ((SWITCH_LOCK_YINZONG_NO == GetSwitchYLockState(condSwiDataIdBuf[ii].SwitchId)) &&
(SWITCH_LOCK_FENGSUO_NO == GetSwitchFLockState(condSwiDataIdBuf[ii].SwitchId)) &&
(condSwiDataIdBuf[ii].SwitchPosition == GetSwitchCurPosition(condSwiDataIdBuf[ii].SwitchId)))
{
/* 保护区段所包含的道岔为:非引导总锁且未封锁且道岔位置正确,非连通位置不存在侵入,才发送码位*/
}
else
{
}
else
{
returnValue = CI_ERROR;
break;
returnValue = CI_ERROR;
break;
}
}
}
else
{
returnValue = CI_ERROR;
/*异常分支,返回失败*/
}
}
else
{
@@ -2867,28 +3040,78 @@ UINT8 OverlapValidMaskCheck(const UINT16 rtOverlapLockedId)
}
if (CI_SUCCESS == returnValue)
{ /*保护区段关联防护道岔*/
{
/*检查保护区段关联防护道岔未引导总锁、未封锁*/
protectSwitchSum = GetOverlapRelatedProtSwitSum(rtOverlapLockedId);
protSwiDataIdBuf = GetOverlapRelatedProtSwitStru(rtOverlapLockedId);
for (ii = 0u; ii < protectSwitchSum; ii++)
if (NULL != protSwiDataIdBuf)
{
lockStatus = GetSwitchLockStatus(protSwiDataIdBuf[ii].ProtectSwitchId);
ylockStatus = GetSwitchYLockState(protSwiDataIdBuf[ii].ProtectSwitchId);
switchPos = GetSwitchCurPosition(protSwiDataIdBuf[ii].ProtectSwitchId);
fengsuoStateus = GetSwitchFLockState(protSwiDataIdBuf[ii].ProtectSwitchId);
if ((SWITCH_LOCK_YINZONG_NO == ylockStatus)
&& ((((SWITCH_LOCK_STATUS_PROTECT == lockStatus) || (SWITCH_LOCK_STATUS_DAP == lockStatus)) && (protSwiDataIdBuf[ii].ProtectPosition == switchPos))
|| (FUNC_SWITCH_ON == cSndSideProFuncSwitch))
&& (SWITCH_LOCK_FENGSUO_NO == fengsuoStateus))
for (ii = 0U; ii < protectSwitchSum; ii++)
{
/* 保护区段关联防护道岔:非引导总锁且防护锁闭且(防护道岔位置正确或支持二级侧防)且未封锁,才发送码位*/
}
else
{
returnValue = CI_ERROR;
break;
ylockStatus = GetSwitchYLockState(protSwiDataIdBuf[ii].ProtectSwitchId);
fengsuoStateus = GetSwitchFLockState(protSwiDataIdBuf[ii].ProtectSwitchId);
if ((SWITCH_LOCK_YINZONG_NO == ylockStatus) && (SWITCH_LOCK_FENGSUO_NO == fengsuoStateus))
{
/*防护道岔未引导总锁、未封锁*/
}
else
{
returnValue = CI_ERROR;
break;
}
}
}
else
{
returnValue = CI_ERROR;
/*异常分支,返回失败*/
}
}
else
{
/*不处理*/
}
/*保护区段关联防护道岔【位置正确】*/
if (CI_SUCCESS == returnValue)
{
devId = 0U;
devState = 0U;
returnValue = OvlpRelatedProtSwitchPosCheck(rtOverlapLockedId, &devId, &devState);
if (CI_SUCCESS == returnValue)
{
/* 通过检查 */
}
else
{
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_POSTION_STATE, devState, ESEND_LEVEL_ZERO);
/* 失败返回 */
returnValue = CI_ERROR;
}
}
else
{
/*不处理*/
}
/*保护区段关联防护道岔【防护锁闭】或【单锁且防护锁闭】*/
if (CI_SUCCESS == returnValue)
{
devId = 0U;
devState = 0U;
returnValue = OvlpRelatedProtSwitchLockCheck(rtOverlapLockedId, &devId, &devState);
if (CI_SUCCESS == returnValue)
{
/* 通过检查 */
}
else
{
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_SWITCH, devId, ETYPE_SWT_LOCK_STATUS, devState, ESEND_LEVEL_ZERO);
/* 失败返回 */
returnValue = CI_ERROR;
}
}
else
{
@@ -3036,12 +3259,21 @@ void PackCiToCimCommData(void)
UINT8 cCommVobcNum = 0U; /*通信车数量*/
UINT8 cVobcToCiDataSum = 0U;
VobcToCiDataStruct* pstrVobcToCiData = NULL;
UINT8 chlocalMode = RC_WORK_MODE_TO_AIM_CI;
UINT32 dwCommBadCycCount = 0U;
cLocalWorkMode = GetLocalRcWorkMode();
cLocalCiId = GetSystemParaLocalCiId();
dwCurCycNum = Get2oo2CurCycleNum();
ciToCimDataBuffer[i++] = cLocalWorkMode;
if (RC_WORK_MODE_CI == cLocalWorkMode)
{
chlocalMode = RC_WORK_MODE_TO_AIM_CI;
}
else
{
chlocalMode = RC_WORK_MODE_TO_AIM_TIOC;
}
ciToCimDataBuffer[i++] = chlocalMode;
ciToCimDataBuffer[i++] = cLocalCiId;
transmitDevIndex = i;
@@ -3562,10 +3794,10 @@ void DealAutoReturnButtonMask_Vir(UINT16 DeviceId, UINT16 MaskId, UINT8* pdataBu
UINT8 virtualZDZFBelongCiId = 0U;
UINT8 virtualZDZFDevType = 0U;
UINT8 virtualZDZFButtonState = 0U;
UINT8 chRtnIndicatorDevId = 0U;/*无人折返报警灯设备ID*/
UINT16 wRtnIndicatorDevId = 0U;/*无人折返报警灯设备ID*/
UINT8 chNonRrnAdhesionState = 0U;/*无人折返按钮粘连状态*/
chRtnIndicatorDevId = GetIndicatorRelNonReturnId(DeviceId);
wRtnIndicatorDevId = GetIndicatorRelNonReturnId(DeviceId);
virtualZDZFBelongCiId = GetVirtualZDZFBelongCiId();
virtualZDZFDevType = GetVirtualZDZFDevType();
virtualZDZFButtonState = GetVirtualZDZFButtonState();
@@ -3598,7 +3830,7 @@ void DealAutoReturnButtonMask_Vir(UINT16 DeviceId, UINT16 MaskId, UINT8* pdataBu
else
{
RelayCollState = GetRelayCollState(pRelayIdBuf[2]);
chNonRrnAdhesionState = GetNonRtnAdhesionState(chRtnIndicatorDevId);
chNonRrnAdhesionState = GetNonRtnAdhesionState(wRtnIndicatorDevId);
if ((RELAY_STATE_UP == RelayCollState) && (RTN_RELAY_ADHESION_NO == chNonRrnAdhesionState))
{/*无人折返按钮继电器吸起*/
SetMaskValue(MaskId, pdataBuf);
@@ -4167,6 +4399,7 @@ void PackCiToCimDeviceData(void)
ii += 2u;
ciToCimDataBuffer[ii] = pPsdData[deviceId].cPsdExceptOpenState; /*屏蔽门异常打开状态:0x55-异常打开,0xAA-未异常打开*/
ii++;
ciToCimDataBuffer[ii++] = pPsdData[deviceId].ibpButtonState; /*IBP盘发车按钮状态*/
}
@@ -4272,9 +4505,18 @@ void PackCiToCimDeviceData(void)
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].WashMachineWorkModeDrvtState;/*洗车机工作模式设置驱动状态(动态字段:驱动)*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].WashModeState;/*洗车模式(动态字段:采集)*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].chSetWashWorkModeBack;/*设置洗车机工作模式反馈*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].chDownWashAllowState;/*降级模式洗车同意状态(动态字段:采集)*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].chDownWashAllowPassState;/*降级模式洗车同意通过状态(动态字段:采集)*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].chDownWashAllowState;/**降级模式洗车同意状态(动态字段:融合)*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].chDownWashAllowPassState;/*降级模式洗车同意通过状态(动态字段:融合)*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].chDownWashReqState;/*降级模式洗车请求状态*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].chDownWashPassReqState;/*降级模式反向洗车请求状态*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].chDownWashAllowColState;/*降级模式洗车线洗车同意状态*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].chDownDccWashAllowColState;/*降级模式DCC洗车同意状态*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].chDownWashAllowErrState;/*降级模式洗车线洗车同意粘连状态*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].chDownDccWashAllowErrState;/*降级模式DCC洗车同意粘连状态*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].chDownWashAllowPassColState;/*降级模式洗车线洗车同意反向通过状态*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].chDownDccWashAllowPassColState;/*降级模式DCC洗车同意反向通过状态*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].chDownWashAllowPassErrState;/*降级模式洗车线洗车同意反向通过粘连状态*/
ciToCimDataBuffer[ii++] = pWashMachineData[deviceId].chDownDccWashAllowPassErrState;/*降级模式DCC洗车同意反向通过粘连状态*/
}
@@ -38,7 +38,7 @@
/*CI 和 CI*/
#define RECVCI_CMD_DATA_STRU_SUM_MAX ((UINT16)100) /*CI接受其他联锁数据结构体数组最大值*/
#define SENDCI_CMD_DATA_STRU_SUM_MAX ((UINT16)100) /*CI发送到其他联锁数据结构体数组最大值*/
#define CI_TO_CI_DATA_LEN_MAX ((UINT16)5700) /*联锁到CI组包数据最大值*/
#define CI_TO_CI_DATA_LEN_MAX ((UINT16)5900) /*联锁到CI组包数据最大值*/
#define CI_TO_CI_AREA_SNOW_SUM_MAX ((UINT8)4) /*相邻RC间发送的区间雨雪数量最大值*/
#define CI_TO_CI_LEAVE_LOGSEC_ROUTE_NUM ((UINT16)100) /*相邻RC间发送的离去逻辑区段检查数量最大值*/
+124 -68
View File
@@ -200,7 +200,6 @@ UINT8 ParseOtherSysToCiData(void)
UINT8 devId = 0u;
UINT8 ocInCiId = 0u;
UINT8 locCiId = 0u;
UINT32 curSysCount = 0u; /*当前系统周期*/
UINT8 srcDevTypeIdBuff[2] = { 0 }; /*源设备类型ID数组*/
UINT8 srcLogicIdBuff[2] = { 0 }; /*源逻辑ID数组*/
UINT8 isBreak = 0u; /*退出遍历*/
@@ -214,7 +213,6 @@ UINT8 ParseOtherSysToCiData(void)
cWorkMode = GetLocalRcWorkMode();
curSysCount = MSCP_GetSysCount();
wTiocRcvAtsGtwyDevTypeId = GetTiocTrnsmtGtwyDevTypeId();
while (1)
@@ -274,6 +272,7 @@ UINT8 ParseOtherSysToCiData(void)
{
debug_infor_printf((const)"\nATS_RECV:%d", dataLen);
debug_out_array(0xAA, data, (UINT16)dataLen);
checkResult = ParseAtsOrXianDiToCiDataFrame(data, (UINT16)dataLen, CI_SYSTEM_TYPE_ATS, devId);
chCurSystemAreaState = GetLocalCiBackUpPattern();
@@ -290,9 +289,10 @@ UINT8 ParseOtherSysToCiData(void)
{
debug_infor_printf((const)"\nGATEWAY_RECV:%d", dataLen);
debug_out_array(0xAA, data, (UINT16)dataLen);
checkResult = ParseGateWayToCiDataFrame(data, (UINT16)dataLen);
}
debug_out_array(0xAA, data, (UINT16)dataLen);
if (CI_ERROR == checkResult)
{/*解析失败*/
@@ -337,7 +337,7 @@ UINT8 ParseOtherSysToCiData(void)
/*解析CI数据*/
#ifdef LOGPRINT/*日志打印宏*/
#ifdef PLATFORM_2OO2/*2oo2平台打印*/
debug_infor_printf((const)"\nCI_RECV:%d", (UINT16)dataLen);
debug_infor_printf((const)"\nCI_RECV:%d, SrcDev[0x%x]", (UINT16)dataLen, srcDevTypeId);
debug_out_array(0xAA, data, (UINT16)dataLen);
#endif/*平台打印结束*/
@@ -345,7 +345,7 @@ UINT8 ParseOtherSysToCiData(void)
cLocalDevType = Get2oo2SheBeiType();
cLocalCiId = GetSystemParaLocalCiId();
startLockFlag = GetStartLockFlag();
if (devType == cLocalDevType)
if (cLocalCiId != devId)
{
/*解析RC间或CI间数据*/
/*判断是否是同一条线路的联锁,不同线路联锁使用互联互通联锁接口,同一条线路使用自家联锁接口*/
@@ -354,17 +354,17 @@ UINT8 ParseOtherSysToCiData(void)
{
if (CI_START_LOCK_NO == startLockFlag)
{
checkResult = ParseCiToCiDataCheck(data, (UINT16)dataLen, &errorNO_Type); /*相邻CI间数据传输的校验*/
checkResult = ParseCiToCiDataCheck(data, (UINT16)dataLen, &errorNO_Type, srcDevTypeId); /*相邻CI间数据传输的校验*/
if (CI_SUCCESS != checkResult)
{
debug_infor_printf((const)"check parse ci step %d error", errorNO_Type);
}
else
{
checkResult = ParseCiToCiDataFrame(data, (UINT16)dataLen, devId);
checkResult = ParseCiToCiDataFrame(data, (UINT16)dataLen, srcDevTypeId);
if (CI_SUCCESS != checkResult) /*错误*/
{
debug_infor_printf((const)"parse ci id %d error", devId);
debug_infor_printf((const)"parse ci id[0x%x] error", srcDevTypeId);
}
else
{
@@ -381,7 +381,7 @@ UINT8 ParseOtherSysToCiData(void)
checkResult = ParseCiToCiDataFrameHLHT(data, (UINT16)dataLen, devId);
if (CI_ERROR == checkResult) /*错误*/
{
debug_infor_printf((const)"parse hlht ci id %d error", devId);
debug_infor_printf((const)"parse hlht ci id[0x%x] error", srcDevTypeId);
}
else
{
@@ -389,7 +389,7 @@ UINT8 ParseOtherSysToCiData(void)
}
else
{
debug_infor_printf((const)"ci id %d sameLineCi:%d error", devId, sameLineCi);
debug_infor_printf((const)"ci id[0x%x] sameLineCi:%d error", srcDevTypeId, sameLineCi);
}
}
else
@@ -730,6 +730,8 @@ UINT8 PackCiToOtherSysData(void)
UINT8 cLocalDevType = 0U; /*本地设备类型*/
UINT8 cStartLockFlag = 0U; /*上电解锁标志*/
UINT8 cRcWorkMode = 0U;
UINT8 cControlState = 0U; /*主备用状态*/
UINT8 cNearOtherDevType = 0U; /*相邻控区另外一种设备类型*/
cRcWorkMode = GetLocalRcWorkMode();
@@ -962,97 +964,151 @@ UINT8 PackCiToOtherSysData(void)
; /*do nothing*/
}
/*****组CI数据*****/
deviceSum = 0u;
deviceIdBuf = NULL;
deviceSum = GetCiTransmitSpecifySysDevSum(Get2oo2SheBeiType()); /*获取通信CI设备总数*/
deviceIdBuf = GetCiTransmitSpecifySysDevBuf(Get2oo2SheBeiType()); /*获取通信CI设备ID数组*/
cLocalDevType = Get2oo2SheBeiType();
cControlState = GetLocalCiBackUpPattern();
cLocalCiId = GetSystemParaLocalCiId();
if (((CI_SYSTEM_TYPE_CI == cLocalDevType) && (SYSTEM_WORK_MODE_MAIN == cControlState))
|| ((CI_SYSTEM_TYPE_RC == cLocalDevType) && ((SYSTEM_WORK_MODE_MAIN == cControlState) || (SYSTEM_WORK_MODE_BACKUP == cControlState))))
{
/*仅CI主用或(RC主用或备用)时,才向RC/CI组包*/
/*****组相邻RC/CI数据*****/
deviceSum = 0U;
deviceIdBuf = NULL;
deviceSum = GetCiTransmitSpecifySysDevSum(cLocalDevType); /*获取通信CI设备总数*/
deviceIdBuf = GetCiTransmitSpecifySysDevBuf(cLocalDevType); /*获取通信CI设备ID数组*/
if ((deviceSum > 0u) && (deviceIdBuf != NULL))
{ /*通信设备正确*/
for (ii = 0u; ii < deviceSum; ii++)
{
IsSameLine = IsSameLineCI(GetSystemParaLocalCiId(), deviceIdBuf[ii]);
if (SAME_LINE_YES == IsSameLine)
if ((deviceSum > 0U) && (deviceIdBuf != NULL))
{ /*通信设备正确*/
for (ii = 0U; ii < deviceSum; ii++)
{
/*组CI数据*/
reVal = PackCiToCiData(deviceIdBuf[ii]);
if (CI_ERROR == reVal)
IsSameLine = IsSameLineCI(cLocalCiId, deviceIdBuf[ii]);
if (SAME_LINE_YES == IsSameLine)
{
/*组包错误*/
/*组CI数据*/
reVal = PackCiToCiData(cLocalDevType, deviceIdBuf[ii]);
if (CI_ERROR == reVal)
{
debug_infor_printf((const)"\nPackCiToCiData Error: DstDev[0x%x]", (UINT16)(cLocalDevType) +(UINT16)(deviceIdBuf[ii])); /*组包错误*/
}
else
{
;
}
}
else if (SAME_LINE_NO == IsSameLine)
{
/*组CI数据*/
reVal = PackHLHTCiToCiData(deviceIdBuf[ii]);
if (CI_ERROR == reVal)
{
debug_infor_printf((const)"\nPackHLHTCiToCiData Error: DstDev[0x%x]", (UINT16)(cLocalDevType)+(UINT16)(deviceIdBuf[ii]));/*组包错误*/
}
else
{
;
}
}
else
{
;
/*无操作*/
}
}
else if (SAME_LINE_NO == IsSameLine)
{
/*组CI数据*/
reVal = PackHLHTCiToCiData(deviceIdBuf[ii]);
if (CI_ERROR == reVal)
{
/*组包错误*/
}
else
{
;
}
}
else
{
/*无操作*/
}
}
}
/*组CI-RC数据*/
cStartLockFlag = GetStartLockFlag();
if (CI_START_LOCK_NO == cStartLockFlag)
{
cSysType = GetSystemWorkType();
cSysType = GetSystemWorkType();
cLocalCiType = GetLocalCiType();
if ((SYSTEM_WORK_MODE_ALL == cSysType) && ((CI_TYPE_ZX == cLocalCiType) || (CI_TYPE_SCX == cLocalCiType)))
{
/*双系统下的正线试车线才进行本控区CI-RC的组包*/
cLocalCiId = GetSystemParaLocalCiId();
cLocalDevType = Get2oo2SheBeiType();
/*****双系统正线试车线,组相邻控区另一个设备数据*****/
if (CI_SYSTEM_TYPE_CI == cLocalDevType)
{
reVal = PackCiToLocalRcDataFrame(cLocalCiId); /*CI给本控区RC组包*/
if (CI_SUCCESS == reVal)
cNearOtherDevType = CI_SYSTEM_TYPE_RC;
}
else
{
cNearOtherDevType = CI_SYSTEM_TYPE_CI;
}
deviceSum = 0U;
deviceIdBuf = NULL;
deviceSum = GetCiTransmitSpecifySysDevSum(cNearOtherDevType); /*获取通信RC/CI设备总数*/
deviceIdBuf = GetCiTransmitSpecifySysDevBuf(cNearOtherDevType); /*获取通信RC/CI设备ID数组*/
if ((0U < deviceSum) && (NULL != deviceIdBuf))
{
/*通信设备正确*/
for (ii = 0U; ii < deviceSum; ii++)
{
/*不处理*/
}
else
{
debug_infor_printf((const)"\nPackCiToLocalRcDataFrame Error.");
IsSameLine = IsSameLineCI(cLocalCiId, deviceIdBuf[ii]);
if ((SAME_LINE_YES == IsSameLine) && (cLocalCiId != deviceIdBuf[ii]))
{
/*组相邻RC/CI数据*/
reVal = PackCiToCiData(cNearOtherDevType, deviceIdBuf[ii]);
if (CI_ERROR == reVal)
{
debug_infor_printf((const)"\nPackCiToCiData Error: DstDev[0x%x]", (UINT16)(cNearOtherDevType) +(UINT16)(deviceIdBuf[ii])); /*组包错误*/
}
else
{
;
}
}
else
{
/*跨线设备及同控区RC/CI不组包,*/
}
}
}
else
{
reVal = PackRcToLocalCiDataFrame(cLocalCiId); /*RC给本控区CI组包*/
if (CI_SUCCESS == reVal)
/*不处理*/
}
/*组本控区CI-RC数据*/
cStartLockFlag = GetStartLockFlag();
if (CI_START_LOCK_NO == cStartLockFlag)
{
/*双系统下的正线和试车线才进行本控区CI-RC的组包*/
if (CI_SYSTEM_TYPE_CI == cLocalDevType)
{
/*不处理*/
reVal = PackCiToLocalRcDataFrame(cLocalCiId); /*CI给本控区RC组包*/
if (CI_SUCCESS == reVal)
{
/*不处理*/
}
else
{
debug_infor_printf((const)"\nPackCiToLocalRcDataFrame Error.");
}
}
else
{
debug_infor_printf((const)"\nPackRcToLocalCiDataFrame Error.");
reVal = PackRcToLocalCiDataFrame(cLocalCiId); /*RC给本控区CI组包*/
if (CI_SUCCESS == reVal)
{
/*不处理*/
}
else
{
debug_infor_printf((const)"\nPackRcToLocalCiDataFrame Error.");
}
}
}
else
{
/*未上电,不组包*/
}
}
else
{
/*单系统或场段不涉及,不处理*/
/*不处理*/
}
}
else
{
/*未上电,不组包*/
/*CI备用或不可用、RC不可用时,不向RC/CI组包*/
}
/*****组LEU数据*****/
+105 -14
View File
@@ -1094,8 +1094,6 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
UINT16 ocName = 0u; /*与ci通信的oc Name 0x46*/
UINT16 wCiName = 0U; /*本联锁设备编号 0x3C+ID 或 0x3D+ID*/
UINT8 headRet = HLHT_HEAD_ERROR;
UINT8* sourceId = NULL; /*源ID*/
UINT32 curntCycleNo = 0u; /*当前周期号*/
HLHTGALInfoStruct hlhtGalHead= {0u};
INT32 ocInfoRemainValidity = 0;
@@ -1159,9 +1157,6 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
if (CI_SUCCESS == retVal)
{
/* 暂无项目使用OC100、不支持OC24.1 */
sourceId = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_OC);/*获取与本联锁通信的OC的ID*/
ii+=4u;/*跳4个字节,以后oc处理*/
/*解析通用消息包头*/
hlhtGalHead.devInterInfoType = ShortFromChar(&dataBuf[ii]);
ii += 2u;
@@ -1215,7 +1210,7 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
/*2.接收对方记录的本方周期号大于等于升主周期号 或 同步的主机CI与OC数据中OC周期号晚于当前OC发送*/
if (((hlhtGalHead.recvOppMsgSN >= dwUpToMainCyc)
|| (0U != CiRecvOcSN) && (CiRecvOcSN <hlhtGalHead.crntOwnMsgSN))
&& (0U < ocInfoRemainValidity))
&& (0 < ocInfoRemainValidity))
{
chUsableCycCheck = CI_SUCCESS;
}
@@ -1274,7 +1269,8 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
|| (OC_SWITCH_POSITION_MOVE == tmpDeviceState))
{
pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum = dataBuf[ii++];
if (MAX_OC_SWITCH_INCLUDE_ZZJ_NUM >= pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum)
if ((MAX_OC_SWITCH_INCLUDE_ZZJ_NUM >= pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum)
&&(0U <pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum))
{
for (chZzjStateIndex = 0U; chZzjStateIndex < pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum; chZzjStateIndex++)
{
@@ -1292,7 +1288,7 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
else
{
retVal = CI_ERROR;
debug_infor_printf((const)"SwitchID %d ZZJnum%d, exceed max:%d \n", tmpDeviceId, pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum, MAX_OC_SWITCH_INCLUDE_ZZJ_NUM);
debug_infor_printf((const)"SwitchID %d ZZJnum%d, max:%d \n", tmpDeviceId, pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum, MAX_OC_SWITCH_INCLUDE_ZZJ_NUM);
pTmpOcToCiData->OcDevices[j].chSwitchIncldeZzjNum = 0U;
pTmpOcToCiData->OcDevices[j].szSwitchIncldeZzjState[0U] = OC_SWITCH_POSITION_SIKAI;
}
@@ -1308,7 +1304,8 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
{
tmpSwitchBoardNum = dataBuf[ii++];/*板卡数量*/
if ( MAX_OC_SWITCH_INCLUDE_BOARD_NUM>=tmpSwitchBoardNum)
if ( (MAX_OC_SWITCH_INCLUDE_BOARD_NUM>=tmpSwitchBoardNum)
&&(0U < tmpSwitchBoardNum))
{
pTmpOcToCiData->OcDevices[j].OcId = systemId;/*每个设备的oc id*/
/*板卡地址状态赋值*/
@@ -1341,7 +1338,7 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
{
/*设备(信号机、道岔)超出索引,给出调试警告信息*/
retVal = CI_ERROR;
debug_infor_printf((const)"Swicth devId'index %d Board Num exceed Max %d boardNum%d,\n", tmpDeviceId,MAX_OC_SWITCH_INCLUDE_BOARD_NUM ,tmpSwitchBoardNum );
debug_infor_printf((const)"Swicth devId'index %d, Board Num Max %d, Recv boardNum%d,\n", tmpDeviceId,MAX_OC_SWITCH_INCLUDE_BOARD_NUM ,tmpSwitchBoardNum );
}
}
@@ -1574,7 +1571,7 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
/*************解析SO板卡***********/
if (CI_SUCCESS == retVal)
{
pTmpOcToCiData->OcSOBoardNum += ShortFromChar(&dataBuf[ii]);/*SO板卡数量*/
pTmpOcToCiData->OcSOBoardNum = ShortFromChar(&dataBuf[ii]);/*SO板卡数量*/
ii += 2u;
if (MAX_OC_BOARD_NUM > pTmpOcToCiData->OcSOBoardNum)
{
@@ -1659,6 +1656,49 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
pTmpOcToCiData->szPlusBox[chPbIndex].chPbType = dataBuf[ii++];
/* 空开状态 */
pTmpOcToCiData->szPlusBox[chPbIndex].chAsState = dataBuf[ii++];
if (OC_PBTYPE_SIGNAL == pTmpOcToCiData->szPlusBox[chPbIndex].chPbType)
{
/*类型为信号机*/
if (((OC_AirSwitchStat_NORMAL == (0xf0 & pTmpOcToCiData->szPlusBox[chPbIndex].chAsState) >> 4)
|| (OC_AirSwitchStat_FAULT == (0xf0 & pTmpOcToCiData->szPlusBox[chPbIndex].chAsState) >> 4))
&& (0U == (0x0f & pTmpOcToCiData->szPlusBox[chPbIndex].chAsState)))
{
; /*空开状态合法*/
}
else
{
retVal = CI_ERROR;
}
}
else if (OC_PBTYPE_ZZJ == pTmpOcToCiData->szPlusBox[chPbIndex].chPbType)
{
/*类型为转辙机*/
if (((OC_AirSwitchStat_NORMAL == (0xf0 & pTmpOcToCiData->szPlusBox[chPbIndex].chAsState) >> 4)
|| (OC_AirSwitchStat_FAULT == (0xf0 & pTmpOcToCiData->szPlusBox[chPbIndex].chAsState) >> 4))
&& ((OC_AirSwitchStat_NORMAL == (0x0f & pTmpOcToCiData->szPlusBox[chPbIndex].chAsState))
|| (OC_AirSwitchStat_FAULT == (0x0f & pTmpOcToCiData->szPlusBox[chPbIndex].chAsState))))
{
; /*空开状态合法*/
}
else
{
retVal = CI_ERROR;
}
}
else
{
retVal = CI_ERROR;
}
/*按照高低4位校验空开状态*/
if(CI_ERROR == retVal)
{
/*给出调试警告信息*/
debug_infor_printf((const)"OcPbId: %d, PbType:%d, AirSwitchStat:%d ERROR\n", pTmpOcToCiData->szPlusBox[chPbIndex].chPbId,
pTmpOcToCiData->szPlusBox[chPbIndex].chPbType,pTmpOcToCiData->szPlusBox[chPbIndex].chAsState);
break;
}
}
}
else
@@ -1828,7 +1868,7 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
if (CI_SUCCESS == retVal)
{
/*校验数据长度 发送两次长度,内层长度比外层少记录长度的两字节 */
if ((hlhtGalHead.totalDataLen != ii - 35U) || (wApplyDataLenth != ii - 37U))
if ((hlhtGalHead.totalDataLen != ii - 31U) || (wApplyDataLenth != ii - 33U))
{
/* 31为应用数据帧头长度+报文头前4字节 */
retVal = CI_ERROR;
@@ -1874,8 +1914,59 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
}
else
{
/*给ATS或现地反馈CI-OC数据版本校验失败信息*/
SetCiSendCmdBackInfoData(CI_BACK_DATA_VER_CHECK_FAIL, CI_SYSTEM_TYPE_OC, systemId, 0U, 0U);
/*给ATS或现地反馈OC-CI校验失败信息*/
if (GAL_COMPARE_INFO_TYPE_ERR == (errCode & GAL_COMPARE_INFO_TYPE_ERR))
{
/*给ATS或现地反馈OC-CI数据接口信息类型错误*/
SetErrorData(EFUNC_PARSE_LOCAL_OC2CI_DATA, CI_SYSTEM_TYPE_OC, systemId, ETYPE_COMM_WITH_OC, CI_BACK_DATA_INFO_TYPE_ERR, ESEND_LEVEL_ATS);
}
else if (GAL_COMPARE_SEND_FLAG_ERR == (errCode & GAL_COMPARE_SEND_FLAG_ERR))
{
/*给ATS或现地反馈OC-CI数据发送方标识信息错误*/
SetErrorData(EFUNC_PARSE_LOCAL_OC2CI_DATA, CI_SYSTEM_TYPE_OC, systemId, ETYPE_COMM_WITH_OC, CI_BACK_DATA_SEND_FLAG_ERR, ESEND_LEVEL_ATS);
}
else if (GAL_COMPARE_RECV_FLAG_ERR == (errCode & GAL_COMPARE_RECV_FLAG_ERR))
{
/*给ATS或现地反馈OC-CI数据接收方标志信息错误*/
SetErrorData(EFUNC_PARSE_LOCAL_OC2CI_DATA, CI_SYSTEM_TYPE_OC, systemId, ETYPE_COMM_WITH_OC, CI_BACK_DATA_RECV_FLAG_ERR, ESEND_LEVEL_ATS);
}
else if (GAL_COMPARE_EMAP_VER_COMP_ERR == (errCode & GAL_COMPARE_EMAP_VER_COMP_ERR))
{
/*给ATS或现地反馈OC-CI数据版本校验失败信息*/
SetErrorData(EFUNC_PARSE_LOCAL_OC2CI_DATA, CI_SYSTEM_TYPE_OC, systemId, ETYPE_COMM_WITH_OC, CI_BACK_DATA_VER_CHECK_FAIL, ESEND_LEVEL_ATS);
}
else if (GAL_COMPARE_MSG_BDS_SN_ERR == (errCode & GAL_COMPARE_MSG_BDS_SN_ERR))
{
/*给ATS或现地反馈OC-CI数据本方、对方及收到上一条消息时本方序列号错误*/
SetErrorData(EFUNC_PARSE_LOCAL_OC2CI_DATA, CI_SYSTEM_TYPE_OC, systemId, ETYPE_COMM_WITH_OC, CI_BACK_DATA_MSG_BDS_SN_ERR, ESEND_LEVEL_ATS);
}
#if 0
else if (GAL_COMPARE_MSG_SN_ERR == (errCode & GAL_COMPARE_MSG_SN_ERR))
{
/*给ATS或现地反馈OC-CI数据对方消息序列号及收到上一条消息时本方序列号错误*/
SetErrorData(EFUNC_PARSE_LOCAL_OC2CI_DATA, CI_SYSTEM_TYPE_OC, systemId, ETYPE_COMM_WITH_OC, CI_BACK_DATA_MSG_SN_ERR, ESEND_LEVEL_ATS);
}
#endif
else if (GAL_COMPARE_PROTOCOL_VER_ERR == (errCode & GAL_COMPARE_PROTOCOL_VER_ERR))
{
/*给ATS或现地反馈OC-CI数据协议版本号错误*/
SetErrorData(EFUNC_PARSE_LOCAL_OC2CI_DATA, CI_SYSTEM_TYPE_OC, systemId, ETYPE_COMM_WITH_OC, CI_BACK_DATA_PROTOCOL_VER_ERR, ESEND_LEVEL_ATS);
}
else if (GAL_COMPARE_APP_LEN_ERR == (errCode & GAL_COMPARE_APP_LEN_ERR))
{
/*给ATS或现地反馈OC-CI数据应用层数据长度无效*/
SetErrorData(EFUNC_PARSE_LOCAL_OC2CI_DATA, CI_SYSTEM_TYPE_OC, systemId, ETYPE_COMM_WITH_OC, CI_BACK_DATA_APP_LEN_ERR, ESEND_LEVEL_ATS);
}
else if (GAL_COMPARE_COM_PERIOD == (errCode & GAL_COMPARE_COM_PERIOD))
{
/*给ATS或现地反馈OC-CI数据通信周期错误 */
SetErrorData(EFUNC_PARSE_LOCAL_OC2CI_DATA, CI_SYSTEM_TYPE_OC, systemId, ETYPE_COMM_WITH_OC, CI_BACK_DATA_COM_PERIOD, ESEND_LEVEL_ATS);
}
else
{
/*记录通信故障码*/
SetErrorData(EFUNC_PARSE_LOCAL_OC2CI_DATA, CI_SYSTEM_TYPE_OC, systemId, ETYPE_COMM_WITH_OC, CI_ERROR, ESEND_LEVEL_ATS);
}
retVal = CI_ERROR;
}
}
@@ -78,6 +78,11 @@
#define CHANGE_JK_COMMAND ((UINT16)0x00AA) /*切换机控申请命令*/
#define CHANGE_NO_COMMAND ((UINT16)0x00FF) /*无切换命令*/
#define OC_AirSwitchStat_NORMAL ((UINT8)0x5) /*空开正常*/
#define OC_AirSwitchStat_FAULT ((UINT8)0xa) /*空开故障*/
#define OC_PBTYPE_SIGNAL ((UINT8)0x55) /*执行电插箱类型信号机*/
#define OC_PBTYPE_ZZJ ((UINT8)0xAA) /*执行电插箱类型转辙机*/
typedef struct s_OcDevState
{
@@ -19,7 +19,7 @@
/*按车站编号映射
stationId == 1,platformToCiDataStru[1]
*/
PlatformToCiDataStruct platformToCiDataStru[PLATFORM_TO_CI_SUM_MAX] = {0u};
PlatformToCiDataStruct platformToCiDataStru[PLATFORM_TO_CI_SUM_MAX] = {0u}; /*引用站台门与CI通信数据结构体*/
/*屏蔽门在PlatformToCiDataStruct结构中的位置:Psd映射为行,Psd所处车站映射为第一列,所处PsdToCiDataStruct位置映射为第2列
1platformToCiDataStru中的位置为:PsdPlatformIndex[1][0] ,PsdPlatformIndex[1][1]
@@ -53,7 +53,7 @@ typedef struct S_PlatformToCiDataStruct
PsdToCiDataStruct psdDataStr[PLATFORM_INCLUDE_PSD_MAX_SUM]; /*屏蔽门信息结构体数组*/
}PlatformToCiDataStruct;
extern PlatformToCiDataStruct platformToCiDataStru[PLATFORM_TO_CI_SUM_MAX];
/*
*
File diff suppressed because it is too large Load Diff
@@ -106,7 +106,7 @@
#define VOBC_RC_INTERFACE_INFOTYPE ((UINT16)0x0217U) /*VOBC-RC接口,RC-VOBC接口*/
#define VOBC_RC_INFO_STATE ((UINT16)0x0201U) /*VOBC->RC控制信息,周期发送*/
#define RC_VOBC_HEART_FRAME ((UINT16)0x0201U) /*RC->VOBC心跳信息,周期发送*/
#define RC_VOBC_HEART_FRAME ((UINT16)0x0202U) /*RC->VOBC心跳信息,周期发送*/
#define CI_IVOC_PRTCL_VER ((UINT8)0x01U) /*CI_VOBC协议版本号*/
@@ -175,7 +175,7 @@
#define CI_IVOC_ESB_STATE_VALID ((UINT8)0x55U) /*CI到IVOC(VOBC) ESB按钮按下*/
#define CI_IVOC_ESB_STATE_INVALID ((UINT8)0xAAU) /*CI到IVOC(VOBC) ESB按钮未按下*/
#define CI_IVOC_NO_HAVE_ESB ((UINT8)0xFFU) /*CI到IVOC(VOBC) ESB按钮未按下*/
#define CI_IVOC_NO_HAVE_ESB ((UINT8)0xFFU) /*CI到IVOC(VOBC) ESB按钮默认值*/
#define CI_IVOC_NON_RETURN_STATE_VALID ((UINT8)0x55U) /*CI到IVOC 无人折返按钮按下*/
#define CI_IVOC_NON_RETURN_STATE_INVALID ((UINT8)0xAAU) /*CI到IVOC 无人折返按钮未按下*/
@@ -224,6 +224,7 @@
#define IVOC_CI_FLOODGATE_CLOSE_ALLOW_SUM ((UINT8)50U) /*IVOC到CI防淹门关闭允许的数量最大值*/
#define IVOC_CI_GARAGEDOOR_CLOSE_ALLOW_SUM ((UINT8)50U) /*IVOC到CI车库门关闭允许的数量最大值*/
#define CI_IVOC_YUXIANOPEN_ROUTE_MAX ((UINT8)200U) /*CI到IVOC预先开放进路最大值*/
#define CI_IVOC_URGENT_YES ((UINT8)0x55U) /*CI到IVOC 紧急制动状态有效*/
#define CI_IVOC_URGENT_NO ((UINT8)0xaaU) /*CI到IVOC 紧急制动状态无效*/
@@ -237,6 +238,11 @@
#define CI_VOBC_JXTC_CUT_NO ((UINT8)0xAA) /*间隙探测旁路未故障*/
#define CI_VOBC_JXTC_OFF ((UINT8)0xFF) /*未检测/无此功能*/
#define PSD_INCOUDE_ESB_NUM ((UINT8)2U) /*站台关联ESB*/
#define TRAIN_LEN_MIN 1000U /*最小车长*/
#define TRAIN_LEN_MAX 50000U /*最大车长*/
#ifdef __cplusplus
extern "C" {
#endif
@@ -793,6 +799,16 @@ UINT8 GetIvocToRcSum(void);
* 0xaa
*/
UINT8 GetRecvVobcControlMode(const UINT16 wVobcId);
/*
* Ci到Ivoc未接近开放进路信息()
* UINT8* dataBuf,
* UINT16 *dataLength,
* UINT16 wTrainId ID
* CI_ERROR 0
* CI_SUCCESS 1
* Create fan 20250725
*/
UINT8 PackCiToIvocOpenRouteNotNearInfo(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wTrainId);
#ifdef __cplusplus
}
#endif
@@ -334,11 +334,13 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId)
{/*记录通信故障码*/
SetErrorData(EFUNC_PARSE_ZC2CI_DATA,CI_SYSTEM_TYPE_ZC,systemId,ETYPE_COMM_WITH_ZC,CI_BACK_DATA_MSG_BDS_SN_ERR,ESEND_LEVEL_ATS);
}
#if 0
/*给ATS或现地反馈ZC-CI数据对方消息序列号及收到上一条消息时本方序列号错误*/
else if (GAL_COMPARE_MSG_SN_ERR == (errCode & GAL_COMPARE_MSG_SN_ERR))
{/*记录通信故障码*/
SetErrorData(EFUNC_PARSE_ZC2CI_DATA,CI_SYSTEM_TYPE_ZC,systemId,ETYPE_COMM_WITH_ZC,CI_BACK_DATA_MSG_SN_ERR,ESEND_LEVEL_ATS);
}
#endif
/*给ATS或现地反馈ZC-CI数据协议版本号错误*/
else if (GAL_COMPARE_PROTOCOL_VER_ERR == (errCode & GAL_COMPARE_PROTOCOL_VER_ERR))
{/*记录通信故障码*/
File diff suppressed because it is too large Load Diff
+48 -3
View File
@@ -33,7 +33,8 @@
#include "../SGBJ/SGBJConfigDataManage.h"
#include "../Section/AxisSectionConfigDataManage.h"
#include "../System/SystemParameterManage.h"
#include "LightTestButtonDataManage.h"
#include "LightTestButtonConfigDataManage.h"
#define ORIGIN_TO_TERMINAL ((UINT8)0x55) /*起点到终点*/
#define TERMINAL_TO_ORIGIN ((UINT8)0xAA) /*终点到起点*/
/*用于记录结构成员个数最大值*/
@@ -128,7 +129,7 @@ typedef struct
UINT16 SystemParamStrLen;
CiTransmitStruct CiTransmitStru[CI_SUM_MAX][CI_SUM_MAX]; /* 相关联锁配,CiTransmitStru[CI_SUM_MAX] 以发送方为主,第二层以目标方为主,*/
UINT8 CiTransmitStrLen[CI_SUM_MAX]; /* 表示对应的联锁,有通信对象数据的个数 */
TransmitRelationDataStruct TrsmtRlsDtStr[500]; /*联锁通信对象配置数据数组*/
TransmitRelationDataStruct TrsmtRlsDtStr[TRANSMITRLX_SUM_MAX]; /*联锁通信对象配置数据数组*/
UINT16 TrsmtRlsDtStrLen;
AllAutoReturnConfigDataStruct AllAutoRtnRouteCfgDtStr[ALL_AUTO_RETURN_SUM_MAX]; /*全自动折返进路配置数据数组*/
UINT16 AllAutoRtnRouteCfgDtStrLen;
@@ -186,6 +187,10 @@ typedef struct
SGBJConfigDataStruct SGBJCfgDataStru[SGBJ_SUM_MAX]; /*声光报警器配置数据*/
UINT16 wSGBJCfgLen; /*声光报警器数量*/
LightTestButtonConfigDataStruct LightTestButtonCfgDataStru[LIGHTTESTBUTTON_BUTTON_MAX_NUM]; /*试灯按钮配置数据*/
UINT16 wLightTestButtonCfgLen; /*试灯按钮数量*/
} dquCIConfigDataStr;
@@ -439,6 +444,18 @@ UINT8 TransmitRelationDataStruFrmSZ(UINT16 Data[]);
*********************************************/
UINT8 TransmitRelationDataStructInit(CHAR* FSName);
/*********************************************
*NEW
*FSName文件指针
*01
*********************************************/
UINT8 TransmitDataStructInitNew(CHAR* FSName);
/*********************************************
*
*Data通信数组
*01
*********************************************/
UINT8 TransmitRelationDataStruNew(UINT8 Data[]);
/*********************************************
*----
@@ -591,13 +608,14 @@ UINT8 OCSwitchConfigDataStructInit(CHAR *FSName);
*01
*********************************************/
UINT8 OCSwitchCfgZzjDataStuInit(CHAR* FSName);
#if 0
/*********************************************
*OC OC2.1.6
*FSName文件指针
*01
*********************************************/
UINT8 OCSwitchConfigDataStructInit_OLD(CHAR *FSName);
#endif
/*********************************************
*OC
@@ -966,5 +984,32 @@ CI_ERROR 0 ʧ
*/
UINT8 GetdsuStaticDataCiType(UINT8 chCiID);
/*********************************************
*OC
*FSName文件指针
*01
*********************************************/
UINT8 OCLightTestButtonCfgDataStuInit(CHAR* FSName);
/*********************************************
*OC
*pDataAddr
*01
*********************************************/
UINT8 R_OCLightTestCfgDataFromChar(LightTestButtonConfigDataStruct* pOCLightTestButtonCfgDtStr, UINT8* pDataAddr);
/*********************************************
*
*
*
*-1,-1
*********************************************/
INT16 SetNoRepeatDataToBuf(UINT16* pBuf, UINT16 maxlen, UINT16 dwData, UINT16 currentLen);
/*********************************************
*线
*void
*CI_ERROR CI_SUCCESS
* add by mpt 20260104
*********************************************/
UINT8 SetCldAndScxMergeConfig(void);
#endif
+143 -4
View File
@@ -1763,7 +1763,6 @@ INT16 ReadEsbConfigData(const UINT8 ciId,EsbConfigDataStruct* pEsbConfigDataStru
INT16 DataNum = -1;
UINT16 repEsbRelayId = 0u;/*复视esb继电器ID*/
UINT8 belongCi = 0u;
if ((0u == ciId) || (NULL == pEsbConfigDataStru))
{
DataNum = -1;
@@ -2421,9 +2420,6 @@ UINT8 ReadSystemParamConfDataNew(const UINT8 ciId,SystemParameterStructNew* Syst
/*对向行驶双车间隔最小安全距离(cm)*/
SystemParameterStru->OppositeTrackDistance = dquCICfgDtStr.SystemParaStrNew.OppositeTrackDistance;
/*站台追踪时,列车间隔距离(cm)*/
SystemParameterStru->StationTrackDistance = dquCICfgDtStr.SystemParaStrNew.StationTrackDistance;
/*线路最差情况下紧急制动距离(单位m)*/
SystemParameterStru->MaxMALength = dquCICfgDtStr.SystemParaStrNew.MaxMALength;
@@ -3459,7 +3455,10 @@ void ReadEmapCiConfig(EmapCiConfigStru emapVerArr[])
UINT16 i;
UINT8 ciId;
UINT8 jj = 0U;
UINT8 chLocalCiId = 0U;
chLocalCiId = GetSystemParaLocalCiId();
if (NULL != emapVerArr)
{
wCIStruSum = dsuDataLenStru.wCILen;
@@ -3512,6 +3511,13 @@ void ReadEmapCiConfig(EmapCiConfigStru emapVerArr[])
emapVerArr[ciId].wAdjoinOcId[jj] = dsuStaticHeadStru.pCIStruStru[i].wAdjoinOcId[jj];
emapVerArr[ciId].dwAdjoinOcShareCheckData[jj] = dsuStaticHeadStru.pCIStruStru[i].dwAdjoinOcShareCheckData[jj];
}
if (ciId == chLocalCiId)
{/*试车线与车辆段合设开关*/
SystemParameterStruNew.chCldAndScxMergeFlag = dsuStaticHeadStru.pCIStruStru[i].chCldAndScxMergeFlag;
}
}
else
{
@@ -3571,6 +3577,7 @@ void ReadEmapCiConfig(EmapCiConfigStru emapVerArr[])
emapVerArr[ciId].dwAdjoinOcShareCheckData[jj] = dsuStaticHeadStru.pRCStruStru[i].dwAdjoinOcShareCheckData[jj];
}
}
SystemParameterStruNew.chCldAndScxMergeFlag = CLD_SCX_MERGE_OFF;/*RC系统中,默认不合设*/
}
else
{
@@ -4857,3 +4864,135 @@ UINT16 QueryTrackBelongLink(void)
return retVal;
}
/*********************************************
*OC试灯按钮配置数据
*ciId联锁ID pLightTestConfigDataStru OC试灯按钮配置数据结构体指针
*
*********************************************/
INT16 ReadLightTestConfigData(const UINT8 ciId, LightTestButtonConfigDataStruct* pLightTestConfigDataStru)
{
UINT16 i = 0u;
UINT16 j = 0u;
UINT16 jj = 0u;
INT16 DataNum = -1; /*按钮数量*/
UINT16 lightTestButtonid = 0u;
UINT16 lightCount = 0u; /*按钮ID对应的继电器数量*/
UINT8 findFlag = 0u;
UINT16 ocDeviceSum = 0u; /*OC设备总数*/
UINT8* pOcDeviceIdBuf = NULL; /*OC设备ID数组*/
UINT16 ocID = 0u; /*OC设备ID*/
ocDeviceSum = (UINT16)GetCiTransmitSpecifySysDevSum(CI_SYSTEM_TYPE_OC); /*获取通信OC设备总数*/
pOcDeviceIdBuf = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_OC); /*获取通信OC设备ID数组*/
if ((0u == ciId) || (NULL == pLightTestConfigDataStru))
{
DataNum = -1;
}
else
{
DataNum = 0;
}
/* 配置检查*/
if (0 == DataNum)
{
for (i = 0u; i < dquCICfgDtStr.wLightTestButtonCfgLen; i++)
{
findFlag = 0u;
lightTestButtonid = dquCICfgDtStr.LightTestButtonCfgDataStru[i].LightTestButtonId;
for (j = 0u; j < ocDeviceSum; j++)
{
/* 找到对应的OC设备 */
if (pOcDeviceIdBuf[j] == dquCICfgDtStr.LightTestButtonCfgDataStru[i].BelongOcId)
{
findFlag = 1u;
ocID = pOcDeviceIdBuf[j];
break;
}
}
if (1u == findFlag)
{
findFlag = 0u;
/* 开始查找该ID的按钮是否已经存在*/
for(j = 0u; j < DataNum; j++)
{
/* 按钮ID已存在,*/
if (lightTestButtonid == pLightTestConfigDataStru[j].LightTestButtonId)
{
break;
}
else
{
/* 按钮ID不存在,添加按钮数据*/
}
}
/*
j为该按钮数据存储位置
j = DataNum
*/
/* 按钮ID是否满足条件,添加按钮数据*/
if(LIGHTTESTBUTTON_TYPE_XINGANG == dquCICfgDtStr.LightTestButtonCfgDataStru[i].LightTestButtonType)
{
pLightTestConfigDataStru[j].LightTestButtonId = lightTestButtonid;
pLightTestConfigDataStru[j].BelongOcId = ocID;
pLightTestConfigDataStru[j].LightTestButtonType = LIGHTTESTBUTTON_TYPE_XINGANG;
lightCount = pLightTestConfigDataStru[j].LightTestButtonRelayNum;
/* 添加继电器数据 */
for(jj = 0u; jj < LIGHTTESTBUTTON_LIGHT_MAX_NUM; jj++)
{
if((UINT16_MAX == dquCICfgDtStr.LightTestButtonCfgDataStru[i].LightRelayId[jj])
||(LIGHTTESTBUTTON_LIGHT_SUPPORT_MAX_NUM <= pLightTestConfigDataStru[j].LightTestButtonRelayNum))
{
if(UINT16_MAX == dquCICfgDtStr.LightTestButtonCfgDataStru[i].LightRelayId[jj])
{
;/*继电器数据添加完毕,退出循环*/
}
else
{
DataNum = -1; /* 配置错误,返回-1 */
}
break;
}
else /* 有效数据 */
{
if (0u == pLightTestConfigDataStru[j].LightTestButtonRelayNum)
{
DataNum++; /*首次添加,需要将DataNUm++*/
}
else
{
;
}
pLightTestConfigDataStru[j].LightRelayId[lightCount + jj] = dquCICfgDtStr.LightTestButtonCfgDataStru[i].LightRelayId[jj];
pLightTestConfigDataStru[j].LightTestButtonRelayNum++; /* 继电器数量加1 */
}
}
}
else
{
;/*不处理*/
}
}
else
{
;/* 该行数据,未找到对应的OC设备,继续处理 */
}
if (-1 == DataNum)
{
break; /* 数据异常,退出*/
}
else
{
; /* 不处理 */
}
}
}
else
{
;/*不处理*/
}
return DataNum;
}
@@ -525,6 +525,14 @@ UINT8 ReadPhySecIndexInAxle(const UINT8 chLocalCiId, PhysicalSectionConfigDataSt
* CI_ERROR,ʧ°Ü
*/
UINT16 QueryTrackBelongLink(void);
/*********************************************
*OC试灯按钮配置数据
*ciId联锁ID pLightTestConfigDataStru OC试灯按钮配置数据结构体指针
*
*********************************************/
INT16 ReadLightTestConfigData(const UINT8 ciId, LightTestButtonConfigDataStruct* pLightTestConfigDataStru);
#ifdef __cplusplus
}
#endif
@@ -25,6 +25,7 @@ UINT8 RelayConfigDataStruFromChar(UINT8 * pDataAddr,RelayConfigDataStruct* pRela
UINT16 i=0u;
UINT16 OcIdBuff = 0u;
UINT8 localCiPattern = 0u; /*本CI模式*/
UINT8 chOCBelongVirCIid = 0U;
if ((NULL == pDataAddr) || (NULL == pRelayCfgDtStr) || (NULL == Name))
{
@@ -55,7 +56,16 @@ UINT8 RelayConfigDataStruFromChar(UINT8 * pDataAddr,RelayConfigDataStruct* pRela
pRelayCfgDtStr->BelongCiId = GetCiIdByOcId(OcIdBuff);
pRelayCfgDtStr->BelongOcId = OcIdBuff;
pRelayCfgDtStr->BelongDrvOcId = pRelayCfgDtStr->BelongOcId;
pRelayCfgDtStr->BelongVirCIid = GetOCBelongVirCIid((UINT8)OcIdBuff);
chOCBelongVirCIid = GetOCBelongVirCIid((UINT8)OcIdBuff);
if (0U != chOCBelongVirCIid)
{
pRelayCfgDtStr->BelongVirCIid = chOCBelongVirCIid;
}
else
{
pRelayCfgDtStr->BelongVirCIid = GetCiIdByOcId(OcIdBuff);
}
}
pData += 2u;
@@ -294,129 +304,21 @@ UINT8 R_ScreenStructFromChar(UINT8 * pDataAddr,Relay_ScreenStruct* pScrnStr, UIN
{/*若没有这一列配置*/
pScrnStr->chControlType = PSD_CONTROL_TYPE_RCI; /*由RCI控制*/
}
rtnvalue = 1u;
}
return rtnvalue;
}
/*********************************************
*
*pDataAddr数据地址 pScrnStr屏蔽门继电器配置数据结构体指针,UINT16 rowLen
*01
*********************************************/
UINT8 R_ScreenStructFromCharT(UINT8* pDataAddr, Relay_ScreenStruct* pScrnStr, UINT16 rowLen)
{
UINT8* pData = pDataAddr;
UINT8 rtnvalue = 0u;
UINT8 localCiPattern = 0u; /*本CI模式*/
if ((NULL == pDataAddr) || (NULL == pScrnStr))
{
rtnvalue = 0u;
}
else
{
localCiPattern = GetLocalCiPattern();
pScrnStr->wScreenId = dquCiShortFromChar(pData); /*屏蔽门ID (配置字段)*/
pData += 2u;
if (CI_PATTERN_FULL_ELECTRONIC == localCiPattern)
if (59U < rowLen)
{
pScrnStr->wOcId = dquCiShortFromChar(pData); /*OC ID*/
pScrnStr->wIbpRelayId = dquCiShortFromChar(pData); /*IBP盘发车按钮继电器ID*/
pData += 2u;
}
pScrnStr->wRelayRelatedId = dquCiShortFromChar(pData); /*互锁解除继电器ID */
pData += 2u;
if (CI_PATTERN_FULL_ELECTRONIC == localCiPattern)
{
pScrnStr->wRelayRelatedId2 = dquCiShortFromChar(pData); /*互锁解除继电器ID2 */
pData += 2;
}
pScrnStr->wRelayDoorClosedId = dquCiShortFromChar(pData); /*门关继电器ID */
pData += 2u;
if (CI_PATTERN_FULL_ELECTRONIC == localCiPattern)
{
pScrnStr->wRelayDoorClosedId2 = dquCiShortFromChar(pData); /*门关继电器ID2 */
pData += 2;
}
pScrnStr->wRelayCloseDoorId = dquCiShortFromChar(pData); /*关门继电器ID */
pData += 2u;
pScrnStr->wRelayFourEditGroupOpenDoorId = dquCiShortFromChar(pData); /*4编组开门继电器ID */
pData += 2u;
pScrnStr->wRelaySixEditGroupOpenDoorId = dquCiShortFromChar(pData); /*6编组开门继电器ID */
pData += 2u;
pScrnStr->wRelayEightEditGroupOpenDoorId = dquCiShortFromChar(pData); /*8编组开门继电器ID */
pData += 2u;
pScrnStr->wRelayDoorButtonId = dquCiShortFromChar(pData); /*PSD按钮继电器*/
pData += 2u;
pScrnStr->doorReopenRelayId = dquCiShortFromChar(pData); /*站台门再次开门继电器ID*/
pData += 2u;
pScrnStr->departureConfirmRelayId = dquCiShortFromChar(pData); /*发车确认继电器ID*/
pData += 2u;
pScrnStr->detectStartRelayId = dquCiShortFromChar(pData); /*启动探测继电器ID*/
pData += 2u;
pScrnStr->detectStopRelayId = dquCiShortFromChar(pData); /*停止探测继电器ID*/
pData += 2u;
pScrnStr->obstacleRelayId = dquCiShortFromChar(pData); /*障碍物继电器ID*/
pData += 2u;
pScrnStr->gapDetMuLockRelayId = dquCiShortFromChar(pData); /*间隙探测互锁解除继电器ID*/
pData += 2u;
pScrnStr->closeStateRelayId = dquCiShortFromChar(pData); /*关门状态继电器ID*/
pData += 2u;
if (36U < rowLen)
{
pScrnStr->wClearPasseSteadyLightRelayId = dquCiShortFromChar(pData); /*清客确认按钮指示灯稳灯继电器ID*/
pData += 2u;
pScrnStr->wClearPasseFlashLightRelayId = dquCiShortFromChar(pData); /*清客确认按钮指示灯闪灯继电器ID*/
pData += 2u;
pScrnStr->wClearPassengerButtonRelayId = dquCiShortFromChar(pData); /*清客确认按钮继电器ID*/
pData += 2u;
}
if (42U < rowLen)
{
pScrnStr->wCleFarePCBButtonRelayId = dquCiShortFromChar(pData); /*清客确认箱PCB按钮继电器*/
pData += 2u;
pScrnStr->wCleFarePDBFlaLigRelayId = dquCiShortFromChar(pData); /*清客确认箱PDB按钮指示灯闪灯继电器*/
pData += 2u;
}
if (46U < rowLen)
{
pScrnStr->wPobBsdRelayId = dquCiShortFromChar(pData); /*站台再开门按钮指示灯继电器*/
pData += 2u;
pScrnStr->wPcbBsdRelayId = dquCiShortFromChar(pData); /*站台再关门按钮指示灯继电器*/
pData += 2u;
}
if (50U < rowLen)
{
pScrnStr->wVideoQkLight1RelayId = dquCiShortFromChar(pData); /*清客按钮箱视频清客指示灯1(绿)继电器*/
pData += 2U;
pScrnStr->wVideoQkLight2RelayId = dquCiShortFromChar(pData); /*清客按钮箱视频清客指示灯2(红)继电器*/
pData += 2U;
}
if (54U < rowLen)
{
pScrnStr->chControlType = *pData; /*屏蔽门控制类型*/
pData += 1U;
}
else
{/*若没有这一列配置*/
pScrnStr->chControlType = PSD_CONTROL_TYPE_RCI; /*由RCI控制*/
{
;
}
rtnvalue = 1u;
}
return rtnvalue;
}
/*********************************************
*
*pDataAddr数据地址pPhysclSgmtStr
@@ -590,83 +492,93 @@ UINT8 R_SignalStructFromChar(UINT8 * pDataAddr,Relay_SignalStruct* pSgnlStr)
}
/*********************************************
*
*pDataAddr数据地址 pWashMachineStr
*01
*********************************************/
UINT8 R_WashMachineStructFromChar(UINT8 * pDataAddr,Relay_WashMachineStruct * pWashMachineStr, UINT16 realRowLen)
UINT8 R_WashMachineStructFromChar(UINT8* pDataAddr, Relay_WashMachineStruct* pWashMachineStr)
{
UINT8 * pData = pDataAddr;
UINT8 rtnvalue = 1U;
UINT16 index = 0U;
UINT8* pData = pDataAddr;
UINT8 rtnvalue = 0U;
if ((NULL == pDataAddr) || (NULL == pWashMachineStr))
{
rtnvalue = 0U;
}
if(1U == rtnvalue)
{
pWashMachineStr->wId = dquCiShortFromChar(pData); /*洗车机ID*/
if ((NULL == pDataAddr) || (NULL == pWashMachineStr))
{
}
else
{
pWashMachineStr->wId = dquCiShortFromChar(pData); /*洗车机ID*/
pData += 2U;
pWashMachineStr->WashMachineReadyRelayId = dquCiShortFromChar(pData); /*洗车机就绪继电器ID*/
pWashMachineStr->WashMachineReadyRelayId = dquCiShortFromChar(pData); /*洗车机就绪继电器ID*/
pData += 2U;
pWashMachineStr->WashMachineRequestVerifyRelayId = dquCiShortFromChar(pData); /*洗车请求恢复确认继电器ID*/
pData += 2U;
pWashMachineStr->TrainEmergencyStopRelayId = dquCiShortFromChar(pData); /*列车急停继电器ID*/
pWashMachineStr->TrainEmergencyStopRelayId = dquCiShortFromChar(pData); /*列车急停继电器ID*/
pData += 2U;
pWashMachineStr->HeadWashAllowRelayId = dquCiShortFromChar(pData); /*出发1继电器ID*/
pWashMachineStr->HeadWashAllowRelayId = dquCiShortFromChar(pData); /*出发1继电器ID*/
pData += 2U;
pWashMachineStr->TailWashAllowRelayId = dquCiShortFromChar(pData); /*出发2继电器ID*/
pWashMachineStr->TailWashAllowRelayId = dquCiShortFromChar(pData); /*出发2继电器ID*/
pData += 2U;
pWashMachineStr->WashTrainRequestRelayId= dquCiShortFromChar(pData); /*洗车请求继电器ID*/
pWashMachineStr->WashTrainRequestRelayId = dquCiShortFromChar(pData); /*洗车请求继电器ID*/
pData += 2U;
pWashMachineStr->TrainHeadStopSteadyRelayId = dquCiShortFromChar(pData); /*列车停稳1继电器ID*/
pData += 2U;
pWashMachineStr->TrainTailStopSteadyRelayId = dquCiShortFromChar(pData); /*列车停稳2继电器ID*/
pData += 2U;
pWashMachineStr->TrainOutWashPortAllowRelayId = dquCiShortFromChar(pData);/*允许出库继电器ID*/
pWashMachineStr->TrainHeadStopSteadyRelayId = dquCiShortFromChar(pData); /*列车停稳1继电器ID*/
pData += 2U;
pWashMachineStr->TrainTailStopSteadyRelayId = dquCiShortFromChar(pData); /*列车停稳2继电器ID*/
pData += 2U;
pWashMachineStr->TrainOutWashPortAllowRelayId = dquCiShortFromChar(pData);/*允许出库继电器ID*/
pData += 2U;
pWashMachineStr->PauseTrainWashRequestRelayId = dquCiShortFromChar(pData); /*暂停洗车继电器ID*/
pData += 2U;
pWashMachineStr->TrainPassRequestRelayId = dquCiShortFromChar(pData); /*通过请求继电器ID*/
pData += 2U;
index += 24U;
if (index + 2U <= realRowLen)
{
pWashMachineStr->WashModeBackRelayId = dquCiShortFromChar(pData); /*全自动洗车模式反馈继电器(配置字段:采集继电器)*/
pData += 2U;
pWashMachineStr->WashModeRelayId = dquCiShortFromChar(pData);/*全自动自动洗车模式继电器配置字段:驱动继电器)*/
pData += 2U;
pWashMachineStr->wDownWashAllowRelayId = dquCiShortFromChar(pData);/*降级模式洗车同意按钮继电器ID(配置字段:采集继电器)*/
pData += 2U;
pWashMachineStr->wDownWashAllowLightRelayId = dquCiShortFromChar(pData);/*降级模式洗车同意指示灯继电器ID(配置字段:驱动继电器)*/
pData += 2U;
pWashMachineStr->wDownWashAllowPassRelayId = dquCiShortFromChar(pData);/*降级模式洗车同意通过按钮继电器ID(配置字段:采集继电器)*/
pData += 2U;
pWashMachineStr->wDownWashRelateRoute1Id = dquCiShortFromChar(pData);/*降级模式洗车线控制台表示灯1关联进路ID*/
pData += 2U;
pWashMachineStr->wDownWashRelateRoute1CheckType = *pData;/*降级模式洗车线控制台表示灯1关联进路状态检查类型*/
pData += 1U;
pWashMachineStr->wDownWashRelRoute1LightRelayId = dquCiShortFromChar(pData);/*降级模式洗车线控制台表示灯1继电器ID(配置字段:驱动继电器)*/
pData += 2U;
pWashMachineStr->wDownWashRelateRoute2Id = dquCiShortFromChar(pData);/*降级模式洗车线控制台表示灯2关联进路ID*/
pData += 2U;
pWashMachineStr->wDownWashRelateRoute2CheckType = *pData;/*降级模式洗车线控制台表示灯2关联进路状态检查类型*/
pData += 1U;
pWashMachineStr->wDownWashRelRoute2LightRelayId = dquCiShortFromChar(pData);/*降级模式洗车线控制台表示灯2继电器ID(配置字段:驱动继电器)*/
pData += 2U;
index += 20U;
}
pWashMachineStr->WashModeBackRelayId = dquCiShortFromChar(pData); /*全自动洗车模式反馈继电器(配置字段:采集继电器)*/
pData += 2U;
pWashMachineStr->WashModeRelayId = dquCiShortFromChar(pData);/*全自动自动洗车模式继电器(配置字段:驱动继电器)*/
pData += 2U;
pWashMachineStr->wDownWashAllowRelayId = dquCiShortFromChar(pData);/*降级模式洗车同意按钮继电器ID(配置字段:采集继电器)*/
pData += 2U;
pWashMachineStr->wDownDccWashAllowRelayId = dquCiShortFromChar(pData);/*降级模式DCC洗车同意按钮继电器ID(配置字段:采集继电器)*/
pData += 2U;
pWashMachineStr->wDownWashAllowLightRelayId = dquCiShortFromChar(pData);/*降级模式洗车同意指示灯继电器ID(配置字段:驱动继电器)*/
pData += 2U;
pWashMachineStr->wDownDccWashAllowLightRelayId = dquCiShortFromChar(pData);/*降级模式DCC洗车同意指示灯继电器ID (配置字段:驱动继电器)*/
pData += 2U;
pWashMachineStr->wDownWashAllowPassRelayId = dquCiShortFromChar(pData);/*降级模式洗车同意通过按钮继电器ID(配置字段:采集继电器)*/
pData += 2U;
pWashMachineStr->downDccWashPassAllowRelayId = dquCiShortFromChar(pData);/*降级模式DCC洗车同意反向通过按钮继电器ID(配置字段:采集继电器)*/
pData += 2U;
pWashMachineStr->wDownWashPassAllowLightRelayId = dquCiShortFromChar(pData);/*降级模式洗车同意反向通过指示灯继电器ID(配置字段:驱动继电器)*/
pData += 2U;
pWashMachineStr->dccWashPassAllowLightRelayId = dquCiShortFromChar(pData);/*降级模式DCC洗车同意反向通过指示灯继电器ID(配置字段:驱动继电器)*/
pData += 2U;
pWashMachineStr->wDownWashRelateRoute1Id = dquCiShortFromChar(pData);/*降级模式洗车线控制台表示灯1关联进路ID*/
pData += 2U;
pWashMachineStr->wDownWashRelateRoute1CheckType = *pData;/*降级模式洗车线控制台表示灯1关联进路状态检查类型*/
pData += 1U;
pWashMachineStr->wDownWashRelRoute1LightRelayId = dquCiShortFromChar(pData);/*降级模式洗车线控制台表示灯1继电器ID(配置字段:驱动继电器)*/
pData += 2U;
pWashMachineStr->wDownWashRelateRoute2Id = dquCiShortFromChar(pData);/*降级模式洗车线控制台表示灯2关联进路ID*/
pData += 2U;
pWashMachineStr->wDownWashRelateRoute2CheckType = *pData;/*降级模式洗车线控制台表示灯2关联进路状态检查类型*/
pData += 1U;
pWashMachineStr->wDownWashRelRoute2LightRelayId = dquCiShortFromChar(pData);/*降级模式洗车线控制台表示灯2继电器ID(配置字段:驱动继电器)*/
pData += 2U;
pWashMachineStr->wDownWashReqAllowLightRelayId = dquCiShortFromChar(pData);/*降级模式洗车请求指示灯继电器ID(配置字段:驱动继电器)*/
pData += 2U;
pWashMachineStr->downDccWashApplyLightRelayId = dquCiShortFromChar(pData);/*降级模式DCC洗车请求指示灯继电器ID(配置字段:驱动继电器)*/
pData += 2U;
pWashMachineStr->washPassApplyLightRelayId = dquCiShortFromChar(pData);/*降级模式洗车反向通过请求指示灯继电器ID(配置字段:驱动继电器)*/
pData += 2U;
pWashMachineStr->dccWashPassApplyLightRelayId = dquCiShortFromChar(pData);/*降级模式DCC洗车反向通过请求指示灯继电器ID(配置字段:驱动继电器)*/
pData += 2U;
rtnvalue = 1U;
}
}
return rtnvalue;
}
@@ -778,53 +690,52 @@ UINT8 R_ZhaoChaStruFromChar(UINT8 * pDataAddr,Relay_ZhaoChaStruct* pZCStr,UINT16
UINT8 R_BaoJingDengStruFromChar(UINT8 * pDataAddr,Relay_BaoJingDengStruct* pBjdStr,UINT32 dwRowLen)
{
UINT8 * pData = pDataAddr;
UINT8 rtnvalue = 0u;
UINT16 i=0u;
UINT8 localCiPattern = 0u; /*本CI模式*/
UINT8 includeVirFlag= GetCiFunctionSwitchConfig(FUNC_INCLUDEVIRCI_FLAG);
UINT16 OCid = 0u;
UINT8 rtnvalue = 0U;
UINT16 i=0U;
UINT8 localCiPattern = 0U; /*本CI模式*/
UINT16 OCid = 0U;
UINT8 chRtuId = 0U;
if ((NULL == pDataAddr) || (NULL == pBjdStr))
{
rtnvalue = 0u;
return rtnvalue;
rtnvalue = 0U;
}
else
{
pBjdStr->wId = dquCiShortFromChar(pData); /*ID*/
pData += 2U;
pBjdStr->wBelongCiId = dquCiShortFromChar(pData); /*所属ID*/
pData += 2U;
pBjdStr->wBjdID = dquCiShortFromChar(pData); /*报警灯ID*/
pData += 2U;
pBjdStr->wBjdYouXiao = *pData; /*是否有效*/
pData += 1U;
for (i = 0U; i < BJD_MAX_NUM; i++)
{
pBjdStr->wBjdJdqId[i] = dquCiShortFromChar(pData); /*相关设备ID*/
pData += 2U;
}
localCiPattern = GetLocalCiPattern();
pBjdStr->wId = dquCiShortFromChar(pData); /*ID*/
pData += 2u;
pBjdStr->wBelongCiId = dquCiShortFromChar(pData); /*所属ID*/
if (CI_PATTERN_FULL_ELECTRONIC == localCiPattern)
{
OCid = pBjdStr->wBelongCiId;/*对应全电子联锁,读取到的是OCid*/
pBjdStr->wBelongCiId = (UINT16)GetCiIdByOcId(pBjdStr->wBelongCiId);/*找到0Cid对应联锁id*/
if(FUNC_SWITCH_ON == includeVirFlag)
if (15U < dwRowLen)
{
pBjdStr->wBelongVirCIid = GetOCBelongVirCIid((UINT8)OCid);/*找到0Cid对应虚拟联锁id*/
pBjdStr->cBjdDevId = *pData;
pData += 1U;
}
else
if (16U < dwRowLen)
{
pBjdStr->wBelongVirCIid = 0u;
chRtuId = *pData; /*RTU id*/
pData += 1U;
}
}
pData += 2u;
pBjdStr->wBjdID = dquCiShortFromChar(pData); /*报警灯ID*/
pData += 2u;
pBjdStr->wBjdYouXiao = *pData; /*是否有效*/
pData += 1u;
for(i=0u;i<BJD_MAX_NUM;i++)
{
pBjdStr->wBjdJdqId[i] = dquCiShortFromChar(pData); /*对端继电器ID*/
pData += 2u;
localCiPattern = GetLocalCiPattern();
if (CI_PATTERN_FULL_ELECTRONIC == localCiPattern)
{
OCid = pBjdStr->wBelongCiId; /*对应全电子联锁,读取到的是OCid*/
pBjdStr->wBelongCiId = (UINT16)GetCiIdByOcId(OCid); /*找到0Cid对应联锁id*/
pBjdStr->wBelongVirCIid = chRtuId; /*填写RTUid*/
}
rtnvalue = 1U;
}
if (15U < dwRowLen)
{
pBjdStr->cBjdDevId = *pData;
pData += 1;
}
rtnvalue = 1u;
return rtnvalue;
}
@@ -36,12 +36,6 @@ UINT8 R_EmegencyStopStructFromChar(UINT8 * pDataAddr,Relay_EmgcyStpStruct* pEmgc
*01
*********************************************/
UINT8 R_ScreenStructFromChar(UINT8* pDataAddr, Relay_ScreenStruct* pScrnStr, UINT16 rowLen);
/*********************************************
*
*pDataAddr数据地址 pScrnStr屏蔽门继电器配置数据结构体指针,UINT16 rowLen
*01
*********************************************/
UINT8 R_ScreenStructFromCharT(UINT8* pDataAddr, Relay_ScreenStruct* pScrnStr, UINT16 rowLen);
/*********************************************
*
@@ -65,12 +59,13 @@ UINT8 R_PointStructFromChar(UINT8 * pDataAddr,Relay_PointStruct* pSwitchStr);
*01
*********************************************/
UINT8 R_SignalStructFromChar(UINT8 * pDataAddr,Relay_SignalStruct* pSgnlStr);
/*********************************************
*
*pDataAddr数据地址 pWashMachineStr
*01
*********************************************/
UINT8 R_WashMachineStructFromChar(UINT8 * pDataAddr,Relay_WashMachineStruct * pWashMachineStr,UINT16 realRowLen);
UINT8 R_WashMachineStructFromChar(UINT8 * pDataAddr,Relay_WashMachineStruct * pWashMachineStr);
/*********************************************
*
@@ -211,7 +211,7 @@ UINT8 InitRelay_WashMachineStru(CHAR* CIDataName)
pWashMachineStr = RelayData.pRelayWashMachineStr + j;
/*填充数据结构体*/
rtnValue &= R_WashMachineStructFromChar(pDataAddr, pWashMachineStr, realRowLen);
rtnValue &= R_WashMachineStructFromChar(pDataAddr, pWashMachineStr);
pDataAddr += realRowLen;
}
@@ -353,7 +353,6 @@ UINT8 InitRelay_ScreenStru(CHAR* CIDataName)
UINT32 sheetId = 0U; /*sheet id*/
UINT32 rowLen = 0U; /*行长度*/
UINT8 localCiPattern = 0U; /*本CI模式*/
UINT8 chOcPattern = 0U;
/*已经初始化了,不用老是调用执行过程*/
if (RelayData.pRelayScreenStr != NULL)
{
@@ -423,16 +422,7 @@ UINT8 InitRelay_ScreenStru(CHAR* CIDataName)
pScreenStr = RelayData.pRelayScreenStr + j;
/*填充数据结构体*/
chOcPattern = GetLocalOcPattern();
if(DATA_TYPE_NEW == chOcPattern)
{
rtnValue &= R_ScreenStructFromChar(pDataAddr, pScreenStr, (UINT16)rowLen);
}
else
{
rtnValue &= R_ScreenStructFromCharT(pDataAddr, pScreenStr, (UINT16)rowLen);
}
rtnValue &= R_ScreenStructFromChar(pDataAddr, pScreenStr, (UINT16)rowLen);
pDataAddr += rowLen;
}
+155 -24
View File
@@ -304,7 +304,7 @@ UINT8 MaskCfgDtStruFrmCIATSPsdMask(UINT8* FSDataName)
MASK_TYPE_PSD_PCB,MASK_TYPE_PSD_POB,MASK_TYPE_PSD_PSB,MASK_TYPE_PSD_PCB_INVALID,
MASK_TYPE_PSD_POB_INVALID,MASK_TYPE_PSD_PSB_INVALID,MASK_TYPE_PSD_JXTC_PANGLU,
MASK_TYPE_PSD_PCBPSBDPB_PANGLU_STATE,MASK_TYPE_PSD_PDB_FLASH_STATE,
MASK_TYPE_PSD_VIDEO_QK_LU,MASK_TYPE_PSD_VIDEO_QK_HONG,MASK_TYPE_PSD_EXCEPT_OPEN,0U };
MASK_TYPE_PSD_VIDEO_QK_LU,MASK_TYPE_PSD_VIDEO_QK_HONG,MASK_TYPE_PSD_EXCEPT_OPEN,MASK_TYPE_PSD_JXTCPANGLU_FAULT,MASK_TYPE_PSD_IBP_STATE,MASK_TYPE_PSD_IBP_FAULT,MASK_TYPE_PSD_JXTC_STATE,0U };
#else
UINT8 MaskType[] = { 0u,MASK_TYPE_PSD_STATE_ATS,MASK_TYPE_MUTUALLOCK_STATE,MASK_TYPE_REMORA_STATE, MASK_TYPE_PSD_PCB,MASK_TYPE_PSD_POB,MASK_TYPE_PSD_PSB,MASK_TYPE_PSD_PCB_INVALID,MASK_TYPE_PSD_POB_INVALID,MASK_TYPE_PSD_PSB_INVALID,0 };
#endif
@@ -410,7 +410,8 @@ UINT8 MaskCfgDtStruFrmCIATSEsbMask(UINT8* FSDataName)
UINT16 i = 0U;
UINT8 chBreakFlag = 0U;
UINT8 MaskType[] = { 0u, MASK_TYPE_ESP_STATE, MASK_TYPE_ESS_STEADY_STATE, MASK_TYPE_ESP_FLASH_STATE, MASK_TYPE_CANCEL_ESP_FAULT, MASK_TYPE_ESP_FAULT, MASK_TYPE_CUT_ESP_FAULT, MASK_TYPE_ESP_PRESS_STATE, 0u };
UINT8 MaskType[] = { 0U, MASK_TYPE_ESP_STATE, MASK_TYPE_ESS_STEADY_STATE, MASK_TYPE_ESP_FLASH_STATE, MASK_TYPE_CANCEL_ESP_FAULT, MASK_TYPE_ESP_FAULT, MASK_TYPE_CUT_ESP_FAULT,
MASK_TYPE_CUT_ESP_STATE, MASK_TYPE_ONEPLAT_ESP_STATE, MASK_TYPE_ONEPLAT_CUT_ESP_STATE, 0U };
UINT16 BuChang = 0u;
funcRtn = dquGetConfigDataNew(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_ESB_MASK_ID, &pDataAddr, &DataSize, &realRow);
if (funcRtn == 0u)
@@ -1409,25 +1410,26 @@ UINT8 MaskCfgDtStruFrmCIATSSPKSMask(UINT8 * FSDataName)
funcRtn = 1u;
return funcRtn;
}
/*********************************************
*CI-ATS
*FSDataName件指针
*01
*********************************************/
UINT8 MaskCfgDtStruFrmCIATSWashM(UINT8 * FSDataName)
UINT8 MaskCfgDtStruFrmCIATSWashM(UINT8* FSDataName)
{
UINT8 funcRtn = 0u;
UINT8* pDataAddr, *pDataLin;
UINT8* pDataAddr, * pDataLin;
UINT32 DataSize = 0u;
UINT16 MaskRow=0u;
UINT16 DeviceID=0u;
UINT16 MaskRow = 0u;
UINT16 DeviceID = 0u;
UINT16 residue = 0u;
UINT16 tempMaskId = 0u; /*码位ID临时变量*/
UINT8 MaskType[]={0u,MASK_TYPE_WASHMACHINE_READYSTATE,MASK_TYPE_WASHMACHINE_WORKMODE,0u};
UINT8 MaskType[] = { 0u,MASK_TYPE_WASHMACHINE_READYSTATE,MASK_TYPE_WASHMACHINE_WORKMODE,0u };
UINT16 BuChang = 0u;
funcRtn = dquGetConfigData(FSDataName,CI_ATS_MASK_TYPE,CI_ATS_WASHMACHINE_MASK_ID,&pDataAddr,&DataSize);
if(0u == funcRtn)
funcRtn = dquGetConfigData(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_WASHMACHINE_MASK_ID, &pDataAddr, &DataSize);
if (0u == funcRtn)
{
funcRtn = 0u;
return funcRtn;
@@ -1436,7 +1438,7 @@ UINT8 MaskCfgDtStruFrmCIATSWashM(UINT8 * FSDataName)
{
}
if(0u != DataSize%CI_ATS_WASHMACHINE_MASK_LEN )
if (0u != DataSize % CI_ATS_WASHMACHINE_MASK_LEN)
{
funcRtn = 0u;
return funcRtn;
@@ -1444,7 +1446,7 @@ UINT8 MaskCfgDtStruFrmCIATSWashM(UINT8 * FSDataName)
else
{
}
if(0u == DataSize)
if (0u == DataSize)
{
/*无数据*/
funcRtn = 1u;
@@ -1454,17 +1456,17 @@ UINT8 MaskCfgDtStruFrmCIATSWashM(UINT8 * FSDataName)
{
}
for(;DataSize>0u;DataSize-=2u)
{
residue = BuChang%(CI_ATS_WASHMACHINE_MASK_LEN/2u);
if(0u == residue)
for (; DataSize > 0u; DataSize -= 2u)
{
residue = BuChang % (CI_ATS_WASHMACHINE_MASK_LEN / 2u);
if (0u == residue)
{
DeviceID = ShortFromChar(pDataAddr);
pDataLin = pDataAddr + CI_ATS_WASHMACHINE_MASK_LEN - 2u;
MaskRow = ShortFromChar(pDataLin);
/*访问数组不能越界,越界直接返回失败*/
if(CI_SUM_MAX <= MaskRow)
if (CI_SUM_MAX <= MaskRow)
{
funcRtn = 0u;
return funcRtn;
@@ -1473,25 +1475,25 @@ UINT8 MaskCfgDtStruFrmCIATSWashM(UINT8 * FSDataName)
{
}
pDataAddr+=2u;
pDataAddr += 2u;
BuChang++;
}
else if(3u >residue)
else if (3u > residue)
{
/*获取码位ID*/
tempMaskId = ShortFromChar(pDataAddr);
/*0和0xFFFF是无效的码位*/
if((0xFFFFu != tempMaskId)&&(0u != tempMaskId))
if ((0xFFFFu != tempMaskId) && (0u != tempMaskId))
{
ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID;
ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_WASHMACHINE;
ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId = tempMaskId;
ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskType = (UINT8)(MaskType[BuChang%(CI_ATS_WASHMACHINE_MASK_LEN/2U)]);
ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskType = (UINT8)(MaskType[BuChang % (CI_ATS_WASHMACHINE_MASK_LEN / 2U)]);
/*统计最大的有效码位*/
if(ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId > ConfigCiToAtsMaskIdMax[MaskRow])
if (ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId > ConfigCiToAtsMaskIdMax[MaskRow])
{
ConfigCiToAtsMaskIdMax[MaskRow] = ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId;
}
@@ -1505,12 +1507,12 @@ UINT8 MaskCfgDtStruFrmCIATSWashM(UINT8 * FSDataName)
else
{
}
pDataAddr+=2u;
pDataAddr += 2u;
BuChang++;
}
else
{
pDataAddr+=2u;
pDataAddr += 2u;
BuChang++;
}
}
@@ -1518,6 +1520,126 @@ UINT8 MaskCfgDtStruFrmCIATSWashM(UINT8 * FSDataName)
return funcRtn;
}
/*********************************************
*CI-ATS
*FSDataName件指针
*01
*********************************************/
UINT8 MaskCfgDtStruFrmCIATSWash(UINT8* FSDataName)
{
UINT8 funcRtn = 0u;
UINT8* pDataAddr, * pDataLin;
UINT32 DataSize = 0u;
UINT16 MaskRow = 0u;
UINT16 DeviceID = 0u;
UINT16 residue = 0u;
UINT16 tempMaskId = 0u; /*码位ID临时变量*/
UINT16 rowCount = 0u;
UINT8 rowLenth = 0u;/*行字节数*/
UINT8 MaskType[] = { 0u,MASK_TYPE_WASHMACHINE_READYSTATE,MASK_TYPE_WASHMACHINE_WORKMODE,MASK_TYPE_WASHMACHINE_ZNTBUTTN, MASK_TYPE_DCCWASHACHINE_ZNTBUTTN,MASK_TYPE_PASSWASHMACHINE_ZNTBUTTN,MASK_TYPE_DCCPASSWASHMACHINE_ZNTBUTTN,0u };
UINT16 BuChang = 0u;
funcRtn = dquGetConfigDataNew(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_WASHMACHINE_MASK_ID, &pDataAddr, &DataSize, &rowCount);
if (0U == funcRtn)
{
funcRtn = CI_ERROR;
}
else
{
funcRtn = CI_SUCCESS;
if ((0u < DataSize) && (0u < rowCount))
{
if (0u == DataSize % rowCount)
{
/*一行字节数*/
rowLenth = (UINT8)(DataSize / rowCount);
for (; DataSize > 0u; DataSize -= 2u)
{
residue = (UINT16)(BuChang % ((UINT16)rowLenth / 2U));
if (0u == residue)
{
DeviceID = ShortFromChar(pDataAddr);
pDataLin = pDataAddr + rowLenth - 2u;
MaskRow = ShortFromChar(pDataLin);
/*访问数组不能越界,越界直接返回失败*/
if (CI_SUM_MAX > MaskRow)
{
pDataAddr += 2u;
BuChang++;
}
else
{
funcRtn = CI_ERROR;
}
}
else if (residue < ((rowLenth / 2u) - 1u))
{
/*获取码位ID*/
tempMaskId = ShortFromChar(pDataAddr);
if ((0xFFFFu != tempMaskId) && (0u != tempMaskId))
{
/*0和0xFFFF是无效的码位*/
if ((CI_SUM_MAX > MaskRow) && (CI_TO_ATS_MASK_SUM_MAX > tempMaskId) && (0u < tempMaskId))/*检查是否为有效码位值*/
{
ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID;
ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_WASHMACHINE;
ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId = tempMaskId;
ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskType = (UINT8)(MaskType[BuChang % ((UINT16)rowLenth / 2u)]);
/*统计最大的有效码位*/
if (ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId > ConfigCiToAtsMaskIdMax[MaskRow])
{
ConfigCiToAtsMaskIdMax[MaskRow] = ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].MaskId;
}
else
{
/*do nothing*/
}
ConfigCiToAtsMaskCurSum[MaskRow]++;
}
else
{
funcRtn = CI_ERROR;
}
}
pDataAddr += 2u;
BuChang++;
}
else
{
pDataAddr += 2u;
BuChang++;
}
if (CI_ERROR == funcRtn)
{
break;
}
else
{
;
}
}
}
else
{
funcRtn = CI_ERROR;
}
}
else
{
funcRtn = CI_SUCCESS;
}
}
return funcRtn;
}
/*********************************************
*CI-ATS
*FSDataName文件件指针
@@ -4620,7 +4742,16 @@ UINT8 MaskInit(UINT8 * FSDataName)
funcRtn *= MaskCfgDtStruFrmCIATSSPKSMask(FSDataName);
/*CI-ATS 洗车机码位*/
funcRtn *= MaskCfgDtStruFrmCIATSWashM(FSDataName);
if (DATA_TYPE_NEW == chPulicData)
{
/*主线*/
funcRtn *= MaskCfgDtStruFrmCIATSWash(FSDataName);
}
else
{
/*杭德*/
funcRtn *= MaskCfgDtStruFrmCIATSWashM(FSDataName);
}
/*CI-ATS 车库门码位*/
funcRtn *= MaskCfgDtStruFrmCIATSGarageDoor(FSDataName);
@@ -222,6 +222,13 @@ UINT8 MaskCfgDtStruFrmCIATSSPKSMask(UINT8 * FSDataName);
*********************************************/
UINT8 MaskCfgDtStruFrmCIATSWashM(UINT8 * FSDataName);
/*********************************************
*CI-ATS
*FSDataName件指针
*01
*********************************************/
UINT8 MaskCfgDtStruFrmCIATSWash(UINT8* FSDataName);
/*********************************************
*CI-ATS
*FSDataName文件件指针
+14 -1
View File
@@ -198,6 +198,9 @@
/*调车同意继电器表ID*/
#define OC_RELAY_DCAGREE_ID ((UINT8)36)
/* 试灯继电器表 */
#define OC_RELAY_LIGHTTESTBUTTON_ID ((UINT8)39)
/*紧急停车按钮继电器结构体*/
typedef struct S_Relay_EmegencyStopStruct
{
@@ -251,6 +254,7 @@ typedef struct S_Relay_ScreenStruct
UINT16 wVideoQkLight1RelayId; /*清客按钮箱视频清客指示灯1(绿)继电器*/
UINT16 wVideoQkLight2RelayId; /*清客按钮箱视频清客指示灯2(红)继电器*/
UINT8 chControlType; /*屏蔽门控制类型*/
UINT16 wIbpRelayId; /*IBP盘发车按钮继电器ID*/
} Relay_ScreenStruct;
/*物理区段继电器结构体*/
@@ -437,19 +441,28 @@ typedef struct S_Relay_WashMachineStruct
UINT16 TrainHeadStopSteadyRelayId; /*全自动车头停稳继电器(配置字段:驱动继电器)*/
UINT16 TrainTailStopSteadyRelayId; /*全自动车尾停稳继电器(配置字段:驱动继电器)*/
UINT16 TrainPassRequestRelayId; /*全自动通过请求继电器(配置字段:驱动继电器)*/
UINT16 TrainOutWashPortAllowRelayId; /*全自动允许列车出库继电器(配置字段:采集继电器)*/
UINT16 TrainOutWashPortAllowRelayId; /*全自动允许列车出库继电器(配置字段:采集继电器)*/
UINT16 PauseTrainWashRequestRelayId; /*全自动暂停洗车继电器(配置字段:驱动继电器)*/
UINT16 WashModeBackRelayId; /*全自动洗车模式反馈继电器(配置字段:采集继电器)*/
UINT16 WashModeRelayId; /*全自动自动洗车模式继电器(配置字段:驱动继电器)*/
UINT16 wDownWashAllowRelayId; /*降级模式洗车同意按钮继电器ID(配置字段:采集继电器)*/
UINT16 wDownWashAllowLightRelayId; /*降级模式洗车同意指示灯继电器ID(配置字段:驱动继电器)*/
UINT16 wDownDccWashAllowRelayId; /*降级模式DCC洗车同意按钮继电器ID (配置字段:采集继电器)*/
UINT16 wDownDccWashAllowLightRelayId; /*降级模式DCC洗车同意指示灯继电器ID (配置字段:驱动继电器)*/
UINT16 wDownWashAllowPassRelayId; /*降级模式洗车同意通过按钮继电器ID(配置字段:采集继电器)*/
UINT16 wDownWashPassAllowLightRelayId; /*降级模式洗车同意反向通过指示灯继电器ID(配置字段:驱动继电器)*/
UINT16 downDccWashPassAllowRelayId; /*降级模式DCC洗车同意反向通过按钮继电器ID(配置字段:采集继电器)*/
UINT16 dccWashPassAllowLightRelayId; /*降级模式DCC洗车同意反向通过指示灯继电器ID(配置字段:驱动继电器)*/
UINT16 wDownWashRelateRoute1Id; /*降级模式洗车线控制台表示灯1关联进路ID*/
UINT8 wDownWashRelateRoute1CheckType; /*降级模式洗车线控制台表示灯1关联进路状态检查类型*/
UINT16 wDownWashRelRoute1LightRelayId; /*降级模式洗车线控制台表示灯1继电器ID(配置字段:驱动继电器)*/
UINT16 wDownWashRelateRoute2Id; /*降级模式洗车线控制台表示灯2关联进路ID*/
UINT8 wDownWashRelateRoute2CheckType; /*降级模式洗车线控制台表示灯2关联进路状态检查类型*/
UINT16 wDownWashRelRoute2LightRelayId; /*降级模式洗车线控制台表示灯2继电器ID(配置字段:驱动继电器)*/
UINT16 wDownWashReqAllowLightRelayId; /*降级模式洗车请求指示灯继电器ID(配置字段:驱动继电器)*/
UINT16 downDccWashApplyLightRelayId; /*降级模式DCC洗车请求指示灯继电器ID(配置字段:驱动继电器)*/
UINT16 washPassApplyLightRelayId; /*降级模式洗车反向通过请求指示灯继电器ID(配置字段:驱动继电器)*/
UINT16 dccWashPassApplyLightRelayId; /*降级模式DCC洗车反向通过请求指示灯继电器ID(配置字段:驱动继电器)*/
} Relay_WashMachineStruct;
+1
View File
@@ -96,6 +96,7 @@
#define SIGNAL_YXJ_TYPE ((UINT8)0x09) /*YXJ继电器*/
#define SIGNAL_DXJ_TYPE ((UINT8)0x0A) /*DXJ继电器*/
#define CHECK_ZCJ_TYPE ((UINT8)0x0B) /*ZCJ继电器*/
#define SWITCH_IBP_TYPE ((UINT8)0x0C) /*IBP继电器*/
/*继电器混线相关*/
#define RELAY_HUNXIAN_NUM ((UINT8)10) /*继电器混线容忍最大周期*/
@@ -140,6 +140,7 @@ UINT8 SetRouteState(const UINT16 routeId, const UINT8 routeState)
RouteDataStru[bufIndex].chRoutCouplinkFlag = ROUTE_COUPLINK_FLAG_NO;/*清除进路联挂标志*/
RouteDataStru[bufIndex].chCouplinkSuccessFlag = ROUTE_COUPLINK_RESULT_NOT; /*清除进路联挂成功标志*/
RouteDataStru[bufIndex].chCouplinkErrorFlag = ROUTE_COUPLINK_RESULT_NOT; /*清除进路联挂失败标志*/
RouteDataStru[bufIndex].dwRouteIdleCycNum = dwCurCycleNum; /*进路空闲起始周期号*/
ClearRouteResReqTrainBuf(routeId);
}
else if ((ROUTE_STATE_FIRST_XUANPAI == routeState)
@@ -6166,4 +6167,29 @@ void SetRouteStopensureFlagCC(const UINT16 routeId, const UINT8 stopensureFlag)
{
/*不处理*/
}
}
/*
*
* const UINT16 routeId ID
*
* by cgh 20251210
*/
UINT32 GetRouteIdleCycNum(const UINT16 routeId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT32 reVal = 0U;
bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/
if (ROUTE_SUM_MAX > bufIndex)
{
reVal = RouteDataStru[bufIndex].dwRouteIdleCycNum;
}
else
{
/*不做处理*/
}
return reVal;
}
@@ -112,6 +112,7 @@ typedef struct S_RouteDataStruct
UINT8 chRoutCouplinkFlag; /*进路联挂标志*/
UINT8 chCouplinkSuccessFlag; /*进路联挂成功*/
UINT8 chCouplinkErrorFlag; /*进路联挂失败*/
UINT32 dwRouteIdleCycNum; /*进路空闲起始周期号*/
} RouteDataStruct;
/*进路动态数据结构体-车车*/
@@ -1779,6 +1780,14 @@ UINT8 GetRouteStopensureFlagCC(const UINT16 routeId);
*/
void SetRouteStopensureFlagCC(const UINT16 routeId, const UINT8 stopensureFlag);
/*
*
* const UINT16 routeId ID
*
* by cgh 20251210
*/
UINT32 GetRouteIdleCycNum(const UINT16 routeId);
#ifdef __cplusplus
}
#endif
@@ -24,8 +24,9 @@ LogicSectionDataStruct LogicSectionDataStru[LOGIC_SECTION_SUM_MAX]; /*
LogicSectionDataStructCC LogicSectionDataStruCC[LOGIC_SECTION_SUM_MAX]; /*定义逻辑区段数据结构体-车车*/
static TsrDataStruct g_TsrDataStru[TSR_MAX_SUM] = { 0u }; /*临时限速数据*/
static UINT8 g_TsrSum = 0u; /* 临时限速数量 */
UINT8 WholeLineLinShiXianSuFlag = WHOLE_LINE_LINSHIXIANSUSET_NO; /*全线临时限速标志,默认无*/
UINT8 g_ResOppositeLockSum = 0U; /*资源对顶点数目*/
struct_PathPoint g_ResOppositeLockInfo[RES_OPPOSITE_LOCK_SUM_MAX] = { 0U }; /*资源对顶点信息*/
/*
*
@@ -6080,4 +6081,319 @@ void SetLogSecTXOccupyStateCC(const UINT16 logSectionId, const UINT8 curOccupySt
{
; /*不处理*/
}
}
/*
*
*
* CI_ERROR
* CI_SUCCESS
* by cgh 202512088
*/
UINT8 ReqAlignmentInfoCalc(void)
{
UINT8 jj = 0U;
UINT8 mm = 0U;
UINT8 chRetVal = CI_ERROR;
UINT16 wLogicSecSum = 0U;/*逻辑区段数目*/
UINT16 wLogicSecIndex = 0U;/*逻辑区段索引*/
UINT16 wLogicSecId = 0U;/*逻辑区段ID*/
UINT16 wRLockRouteId = 0U;/*逻辑区段进路锁闭所属进路*/
UINT16 wPLockRouteId = 0U;/*逻辑区段防护锁闭所属进路*/
UINT8 chRelateLogSecSum = 0U;/*逻辑区段关联逻辑区段数目*/
UINT16* wRelateLogSecId = NULL;/*逻辑区段关联逻辑区段ID*/
UINT8 chLogLockDir = 0U;/*逻辑区段锁闭方向*/
UINT8 chLogRelateLogLockDir = 0U;/*逻辑区段关联逻辑区段锁闭方向*/
UINT8 chLinkLogicDirUpAndDown = CI_SYSTEM_DIRECTION_NONE;/*逻辑区段与上下行的关系*/
UINT8 chLogSecLogicLockDir = 0U;/*逻辑区段锁闭方向对应的逻辑方向*/
UINT16 wSendLinkId = 0U;/*资源对顶点LINK编号*/
UINT32 wSendLinkOffset = 0U;/*资源对顶点LINK偏移量*/
UINT8 chLogSecHaveResOpp = 0U;/*逻辑区段是否具备资源对顶前提条件*/
UINT16 wLogSecBelongPhyId = 0U;/*逻辑区段所属物理区段*/
UINT16 wPhySecRLockRouteId = 0U;/*物理区段锁闭所属进路*/
UINT8 chLockDirOpposedFlag = ROUTE_PHYSEC_SHOULD_NOT_OPPOSE_LOCK;/*物理区段锁闭方向是否可以取反*/
LOD_STRU pAPoint = { 0U }; /*A进路始端位置*/
LOD_STRU pBPoint = { 0u }; /*B进路始端位置*/
UINT8 chDirChangedNum = 0U;/*方向变化点数量*/
UINT16 wRouteLogSecSum = 0U;/*进路包含逻辑区段数量*/
UINT16* pRouteLogSecId = NULL;/*进路包含逻辑区段ID*/
UINT8 chTempBreakFlag = 0U;/*临时跳出循环标志*/
UINT16 wSameLinkId = 0U;/*同位点LINK编号*/
UINT32 wSameLinkOffset = 0U;/*同位点LINK偏移量*/
UINT16 wOverlapLockedId = 0U;/*进路锁闭保护区段ID*/
/*每周期均先清空数据重新计算*/
g_ResOppositeLockSum = 0U;
(void)CommonMemSet((void*)&g_ResOppositeLockInfo, (UINT32)sizeof(struct_PathPoint), 0U, (UINT32)sizeof(struct_PathPoint));
wLogicSecSum = GetLogicSecCurSum();
if (LOGIC_SECTION_SUM_MAX > wLogicSecSum)
{
chRetVal = CI_SUCCESS;
chLinkLogicDirUpAndDown = GetLinkLogicDirUpAndDown();
for (wLogicSecIndex = 0U; wLogicSecIndex < wLogicSecSum; wLogicSecIndex++)
{
wLogicSecId = GetLogicSecId(wLogicSecIndex);
if ((0U < wLogicSecId) && (UINT16_MAX > wLogicSecId))
{
chLogSecHaveResOpp = GetLogSecHaveResOpp(wLogicSecId);
if (CI_SUCCESS == chLogSecHaveResOpp)
{
/*逻辑区段具备资源对顶前提条件才有以下逻辑*/
wRLockRouteId = GetLogSecLockBelongRoute(wLogicSecId);
wPLockRouteId = GetLogSecPLockRouteId(wLogicSecId);
chLogLockDir = GetLogSecLockDir(wLogicSecId);
pAPoint.Lnk = 0U;
pAPoint.Off = 0U;
chTempBreakFlag = 0U;
pRouteLogSecId = NULL;
if (0U < wRLockRouteId)
{
wRouteLogSecSum = GetRouteLogSectionSum(wRLockRouteId);
pRouteLogSecId = GetRouteLogSectionIdBuf(wRLockRouteId);
}
else if (0U < wPLockRouteId)
{
wOverlapLockedId = GetRouteOverlapLockedId(wPLockRouteId);
wRouteLogSecSum = GetOverlapLogicSectionSum(wOverlapLockedId);
pRouteLogSecId = GetOverlapLogicSectionBuf(wOverlapLockedId);
}
else
{
; /*继续下一个*/
}
if (NULL != pRouteLogSecId)
{
pAPoint.Lnk = GetLgcSecOrgnLink(pRouteLogSecId[0]);
pAPoint.Off = 0U;
}
else
{
;
}
if ((CI_SYSTEM_DIRECTION_UP == chLogLockDir) || (CI_SYSTEM_DIRECTION_DOWN == chLogLockDir))
{
/*将锁闭方向转换为和逻辑方向之间的关系*/
if (chLinkLogicDirUpAndDown == chLogLockDir)
{
chLogSecLogicLockDir = EMAP_CONVER_DIR;
}
else
{
chLogSecLogicLockDir = EMAP_SAME_DIR;
}
wLogSecBelongPhyId = GetLgcSecRelativePhySecId(wLogicSecId);
wPhySecRLockRouteId = GetPhySecRLockBelongRouteId(wLogSecBelongPhyId);
chLockDirOpposedFlag = GetRoutePhySecShouldLockOppose(wPhySecRLockRouteId, wLogSecBelongPhyId);
if (ROUTE_PHYSEC_SHOULD_OPPOSE_LOCK == chLockDirOpposedFlag)
{
/*进路最后一个物理区段锁闭方向需要取反则转换逻辑方向*/
chLogSecLogicLockDir = ~chLogSecLogicLockDir;
}
else
{
; /*不需要取反*/
}
if (EMAP_SAME_DIR == chLogSecLogicLockDir)
{
/*当前逻辑区段锁闭方向与逻辑方向一致,根据终点相邻逻辑区段锁闭方向判断是否为资源对顶点*/
chRelateLogSecSum = GetLogEndLogSecSum(wLogicSecId);
wRelateLogSecId = GetLogEndLogSecData(wLogicSecId);
wSendLinkId = GetLgcSecTmnlLink(wLogicSecId);
wSendLinkOffset = GetLgcSecTmnlOffset(wLogicSecId);
}
else if (EMAP_CONVER_DIR == chLogSecLogicLockDir)
{
/*当前逻辑区段锁闭方向与逻辑方向相反,若起点逻辑区段锁闭方向与之相反,则为资源对顶点*/
chRelateLogSecSum = GetLogBeginLogSecSum(wLogicSecId);
wRelateLogSecId = GetLogBeginLogSecData(wLogicSecId);
wSendLinkId = GetLgcSecOrgnLink(wLogicSecId);
wSendLinkOffset = 0U;
}
else
{
/*错误,停止组包*/
chRetVal = CI_ERROR;
debug_infor_printf((const)"\n PackCiToIvocReqAndReplyInfo LogSecLogicLockDir_Error, Dir : %d \n", chLogSecLogicLockDir);
}
if (CI_SUCCESS == chRetVal)
{
(void)dsuCheckSameLoc(wSendLinkId, wSendLinkOffset, &wSameLinkId, &wSameLinkOffset);
for (mm = 0U; mm < g_ResOppositeLockSum; mm++)
{
/*去重,当前已发送数组中是否已存在对应位置点及同位点*/
if (((g_ResOppositeLockInfo[mm].wLinkId == wSendLinkId) && (g_ResOppositeLockInfo[mm].dwOffset == wSendLinkOffset))
|| ((g_ResOppositeLockInfo[mm].wLinkId == wSameLinkId) && (g_ResOppositeLockInfo[mm].dwOffset == wSameLinkOffset)))
{
break;
}
else
{
; /*已有数据中不存在*/
}
}
if (mm == g_ResOppositeLockSum)
{
for (jj = 0U; jj < chRelateLogSecSum; jj++)
{
chLogRelateLogLockDir = GetLogSecLockDir(wRelateLogSecId[jj]);
wRLockRouteId = GetLogSecLockBelongRoute(wRelateLogSecId[jj]);
wPLockRouteId = GetLogSecPLockRouteId(wRelateLogSecId[jj]);
pBPoint.Lnk = 0U;
pBPoint.Off = 0U;
if (0U < wRLockRouteId)
{
wRouteLogSecSum = GetRouteLogSectionSum(wRLockRouteId);
pRouteLogSecId = GetRouteLogSectionIdBuf(wRLockRouteId);
if (NULL != pRouteLogSecId)
{
/*可能涉及到相邻联锁,如果数据没做,指针可能为空,此时需要防一下*/
pBPoint.Lnk = GetLgcSecOrgnLink(pRouteLogSecId[0]);
pBPoint.Off = 0U;
}
}
else if (0U < wPLockRouteId)
{
pBPoint.Lnk = GetLgcSecOrgnLink(wRelateLogSecId[jj]);
pBPoint.Off = 0U;
}
else
{
; /*继续查找*/
}
if ((NULL != pRouteLogSecId) && (0U < pAPoint.Lnk) && (0U < pBPoint.Lnk))
{
/*可能涉及到相邻联锁,如果数据没做,指针可能为空,此时需要防一下*/
/*两个比较的区段均有锁闭才去检查方向变化点数目和锁闭方向*/
if ((CI_SYSTEM_DIRECTION_UP == chLogRelateLogLockDir) || (CI_SYSTEM_DIRECTION_DOWN == chLogRelateLogLockDir))
{
/*当前逻辑区段锁闭方向和关联逻辑区段锁闭方向必须有效*/
chDirChangedNum = GetDirChangeNumBtwPoints(&pAPoint, &pBPoint);
if (0U == (chDirChangedNum % 2U))
{
/*2条进路之间方向变化点数目为偶数,则锁闭方向不一致则资源对顶*/
if (chLogLockDir != chLogRelateLogLockDir)
{
/*资源对顶*/
chTempBreakFlag = 1U;
}
else
{
; /*资源不对顶*/
}
}
else
{
/*2条进路之间方向变化点数目为奇数,则锁闭方向一致则资源对顶*/
if (chLogLockDir == chLogRelateLogLockDir)
{
/*资源对顶*/
chTempBreakFlag = 1U;
}
else
{
; /*资源不对顶*/
}
}
if (1U == chTempBreakFlag)
{
break;
}
else
{
; /*资源不对顶*/
}
}
else
{
; /*继续查找下一个*/
}
}
else
{
; /*不存在资源对顶*/
}
}
if (1U == chTempBreakFlag)
{
if (g_ResOppositeLockSum < RES_OPPOSITE_LOCK_SUM_MAX)
{
g_ResOppositeLockInfo[g_ResOppositeLockSum].wLinkId = wSendLinkId;
g_ResOppositeLockInfo[g_ResOppositeLockSum].dwOffset = wSendLinkOffset;
g_ResOppositeLockSum++;
}
else
{
chRetVal = CI_ERROR;
debug_infor_printf((const)"\n ReqAlignmentInfoCalc g_ResOppositeLockSum: %d Error\n", g_ResOppositeLockSum);
}
}
else
{
; /*不存在资源对顶*/
}
}
else
{
; /*已存在不再继续判断*/
}
}
else
{
;
}
}
else
{
/*错误,停止组包*/
chRetVal = CI_ERROR;
debug_infor_printf((const)"\n ReqAlignmentInfoCalc LogicSecId: %d,LogLockDir_Error, LockDir : %d \n", wLogicSecId, chLogLockDir);
}
}
else
{
; /*继续查找*/
}
}
else
{
/*逻辑区段ID错误*/
chRetVal = CI_ERROR;
debug_infor_printf((const)"\n ReqAlignmentInfoCalc LogicSecId_Error, ID : %d \n", wLogicSecId);
}
if (CI_SUCCESS != chRetVal)
{
break;
}
else
{
/*继续执行*/
}
}
}
else
{
/*逻辑区段数量错误*/
chRetVal = CI_ERROR;
debug_infor_printf((const)"\n ReqAlignmentInfoCalc LogicSecSum_Error, sum : %d _MAX: %d \n", wLogicSecSum, LOGIC_SECTION_SUM_MAX);
}
return chRetVal;
}
@@ -19,6 +19,7 @@
#include "LogicSectionConfigDataManage.h"
#include "CommonTypes.h"
#include "../DataManage/DeviceDataManage.h"
#include "LinkConfigDataManage.h"
@@ -114,6 +115,9 @@ typedef struct S_TsrDataStruct
extern LogicSectionDataStruct LogicSectionDataStru[LOGIC_SECTION_SUM_MAX]; /*定义逻辑区段数据结构体*/
extern LogicSectionDataStructCC LogicSectionDataStruCC[LOGIC_SECTION_SUM_MAX]; /*定义逻辑区段数据结构体-车车*/
extern UINT8 WholeLineLinShiXianSuFlag; /*全线临时限速标志,默认无*/
extern UINT8 g_ResOppositeLockSum; /*资源对顶点数目*/
extern struct_PathPoint g_ResOppositeLockInfo[RES_OPPOSITE_LOCK_SUM_MAX]; /*资源对顶点信息*/
/*
*
* void
@@ -1402,6 +1406,15 @@ UINT8 GetLogSecTXOccupyStateCC(const UINT16 logSectionId);
*/
void SetLogSecTXOccupyStateCC(const UINT16 logSectionId, const UINT8 curOccupyState);
/*
*
*
* CI_ERROR
* CI_SUCCESS
* by cgh 202512088
*/
UINT8 ReqAlignmentInfoCalc(void);
#ifdef __cplusplus
}
#endif
@@ -1623,15 +1623,21 @@ UINT16 GetTrackBelongLink(UINT32 trackId)
{
UINT16 i = 0u;
UINT16 linkId = 0u;
for (i = 0u; i < gTrackSectionCurSum;i++)
if (0U < trackId)
{
if (gTrackSecConfigDataStru[i].trackSecId == trackId)
for (i = 0u; i < gTrackSectionCurSum;i++)
{
linkId = gTrackSecConfigDataStru[i].linkId;
break;
if (gTrackSecConfigDataStru[i].trackSecId == trackId)
{
linkId = gTrackSecConfigDataStru[i].linkId;
break;
}
}
}
else
{
/*不处理*/
}
return linkId;
}
+4 -2
View File
@@ -38,7 +38,7 @@
#define LOGSEC_RELATE_CON_SW_SUM_MAX ((UINT16)4) /*定义逻辑区段关联联络线道岔数量最大值*//* add 20230504 cgh*/
#define PHYSEC_RELATE_ROUTE_SUM_MAX ((UINT16)24) /*定义物理区段关联进路数量最大值*//* add 20231113 lq*/
#define LOGSEC_RELATE_PSD_MAX ((UINT8)0X04U) /*定义逻辑区段关联屏蔽门数量最大值*//* add 20240410 fan*/
#define LOGSEC_RELATE_ESB_MAX ((UINT8)0X04U) /*定义逻辑区段关联紧急按钮数量最大值*//* add 20240410 fan*/
#define LOGSEC_RELATE_ESB_MAX ((UINT8)10U) /*定义逻辑区段关联紧急按钮数量最大值*//* add 20240410 fan*/
#define TRCAK_SECTION_SUM_MAX ((UINT16)5000) /*定义轨道区段数量最大值*/
#define QINXIAN_SWITCH_MAX_NUM ((UINT8)0X16U) /*定义侵限区段关联条件道岔的最大数量 add 20240607 LC */
@@ -46,7 +46,9 @@
#define PHYSEC_ADJACENT_SEC_SUM_MAX ((UINT8)15) /*定义物理区段直接相邻物理区段最大个数*//* add 20240821 fan*/
#define PHYSEC_INDIRECTNEAR_SEC_SUM_MAX ((UINT8)100) /*定义距离一定范围内间接邻近物理区段最大个数*//* add 20240821 fan*/
#define PHY_SEC_RESET_CMD_FLAG_SUM_MAX ((UINT8)15) /*定义物理区段复位命令标签最大值*/
#define PHY_SEC_RESET_CMD_FLAG_SUM_MAX ((UINT8)15U) /*定义物理区段复位命令标签最大值*/
#define RES_OPPOSITE_LOCK_SUM_MAX ((UINT8)20U) /*资源对顶点最大数目*/
/*物理区段类型*/
#define PHYSICAL_SEC_TYPE_NOSWITCH ((UINT8)0x55) /*无岔区段*/
@@ -1490,14 +1490,41 @@ UINT8 GetSignalShine(const UINT16 signalId)
if (bufIndex < SIGNAL_SUM_MAX)
{
chRetVal = SignalConfigDataStru[bufIndex].chShineSignal;
/*只取bit0 和 bit1的值*/
chRetVal &= 0x03u;
}
else
{
chRetVal = CI_ERROR;
;
}
return chRetVal;
}
/*
* ID信号机亮灭功能标志Bit2
* const UINT16 signalId, ID
* UINT8_MAX:
* : Link OFF
* qw.liu 2022-03-04
*/
UINT8 GetSignalShineBit2(const UINT16 signalId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 chRetVal = UINT8_MAX;
bufIndex = GetSignalConfigBufIndex(signalId); /*获取区段数组下标*/
if (bufIndex < SIGNAL_SUM_MAX)
{
chRetVal = SignalConfigDataStru[bufIndex].chShineSignal;
/*只取bit2的值*/
chRetVal = (chRetVal >> 2) & 0x01u;
}
else
{
;
}
return chRetVal;
}
/*
* ID信号机外方第一link
* const UINT16 signalId, ID
@@ -608,7 +608,14 @@ UINT16* GetSignalFushiSignalIdBuf(const UINT16 signalId);
* qw.liu 2022-03-04
*/
UINT8 GetSignalShine(const UINT16 signalId);
/*
* ID信号机亮灭功能标志Bit2
* const UINT16 signalId, ID
* UINT8_MAX:
* : Link OFF
* qw.liu 2022-03-04
*/
UINT8 GetSignalShineBit2(const UINT16 signalId);
/*
* ID信号机防护点所处OFF
* const UINT16 signalId, ID
+4 -4
View File
@@ -3756,7 +3756,7 @@ UINT8 RefreshSignalLightUpState(void)
{
wCfpId = GetCfpIdByPoint(wLink, dwOffset);
strCfpOther = GetCfpOtherOcTrainInfo(wCfpId);
chTransmitStat = GetCiTransmitState(CI_SYSTEM_TYPE_RCI, chLinkOcId);
chTransmitStat = GetRcPbTacsTransmitState(chLinkOcId);
dwLeftLen = dwDdLen - dwUsedLen;
if ((TRANSMIT_STATE_GOOD != chTransmitStat) || ((UINT32_MAX != strCfpOther.dwDis) && (dwLeftLen <= strCfpOther.dwDis)))
@@ -3797,7 +3797,7 @@ UINT8 RefreshSignalLightUpState(void)
{
wCfpId = GetCfpIdByPoint(wLink, dwOffset);
strCfpOther = GetCfpOtherOcTrainInfo(wCfpId);
chTransmitStat = GetCiTransmitState(CI_SYSTEM_TYPE_RCI, chLinkOcId);
chTransmitStat = GetRcPbTacsTransmitState(chLinkOcId);
dwLeftLen = dwDdLen - dwUsedLen;
if ((0u == wCfpId) || (TRANSMIT_STATE_GOOD != chTransmitStat))
{/* 相邻TIOC通信故障,亮灯 */
@@ -3863,7 +3863,7 @@ UINT8 RefreshSignalLightUpState(void)
{
/*信号机外方第一物理区段位于相邻RC,通过相邻RC间接口中的休眠车点亮信号机标志,点亮信号机*/
cCommState = GetCiTransmitState(CI_SYSTEM_TYPE_RCI, cPhySecBelongCiId);
cCommState = GetRcPbTacsTransmitState(cPhySecBelongCiId);
if (TRANSMIT_STATE_GOOD == cCommState)
{
/*与信号机外方第一区段所属RC通信正常,通过休眠车点亮信号机标志刷新信号机亮灭状态*/
@@ -5720,7 +5720,7 @@ UINT8 GetSignalCrossStateCC(const UINT16 signalId)
if (bufIndex < SIGNAL_SUM_MAX)
{
if ((SIGNAL_CROSS_STATE_NO == SignalDataStru[bufIndex].SignalCrossState) || (SIGNAL_CROSS_STATE_YES == SignalDataStru[bufIndex].SignalCrossState))
if ((SIGNAL_CROSS_STATE_NO == SignalDataStruCC[bufIndex].SignalCrossState) || (SIGNAL_CROSS_STATE_YES == SignalDataStruCC[bufIndex].SignalCrossState))
{
reVal = SignalDataStruCC[bufIndex].SignalCrossState;
}
+5
View File
@@ -280,11 +280,16 @@
#define MAX_SIGNAL_LIGHTUPLINK_NUM 50u /* 信号机点灯区段最大link数量 *//* 2022.3.4创建 */
#define SIGNAL_LIGHT_CONFIG_CBTC_CI_LIGHT ((UINT8)0x05u) /*常亮,CBTC接近灭灯,联锁驱亮灯*/
#define SIGNAL_LIGHT_CONFIG_LIGHT ((UINT8)0x03u) /*常亮信号机*/
#define SIGNAL_LIGHT_CONFIG_CBTC_CLOSE ((UINT8)0x01u) /*常亮,CBTC接近时灭灯*/
#define SIGNAL_LIGHT_CONFIG_CBTC_LIGHT ((UINT8)0x02u) /*常灭,CBTC接近时亮灯*/
#define SIGNAL_LIGHT_CONFIG_GEN ((UINT8)0x00u) /*常灭信号机*/
#define SIGNAL_LIGHT_CONFIG_CBTC_CLOSE_BIT2 ((UINT8)0x00u) /*CBTC灭灯,CI驱动灭灯*/
#define SIGNAL_LIGHT_CONFIG_CBTC_LIGHT_BIT2 ((UINT8)0x01u) /*CBTC灭灯,CI驱动亮灯*/
/*信号机工程车接近状态*/
#define SIG_ENGINEERVEHICNEAR_STE_NO ((UINT8)0x55) /*未接近*/
#define SIG_ENGINEERVEHICNEAR_STE_YES ((UINT8)0xaa) /*接近*/
@@ -1445,3 +1445,26 @@ ZzjPowerConfigDataStruct* GetSwitchZzjPowerConfigData(const UINT16 switchId)
}
return pRetVal;
}
/*
* ID的IBP盘道岔旁路表示灯驱动继电器ID线使
* const UINT16 switchId, ID
* 0:
* >0: IBP盘道岔旁路表示灯驱动继电器ID
*/
UINT16 GetSwitchIbpDrvRelayId(const UINT16 switchId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 retVal = CI_ERROR;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (bufIndex < SWITCH_SUM_MAX)
{
retVal = SwitchConfigDataStru[bufIndex].IbpDrvRelayId;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
@@ -85,6 +85,7 @@ typedef struct S_SwitchConfigDataStruct
UINT16 DsHRelayId; /*道岔单锁后节点继电器ID*/
UINT16 ByPassRelayId; /*道岔旁路继电器ID*/
UINT16 wProtectSwitchNum; /*防护道岔数组长度 add by qw.liu 2022-02-08*/
UINT16 wszProtectSwitchIdBuf[SWITCH_PROTECT_SWITCH_MAX_NUM];/*防护主体道岔ID数组 add by qw.liu 2022-02-08*/
@@ -96,7 +97,7 @@ typedef struct S_SwitchConfigDataStruct
UINT16 DsDrvRelayId; /*道岔单锁驱动继电器ID (配置字段-联络线使用)*/
UINT16 DsDrvQRelayId; /*道岔单锁前节点驱动继电器ID (配置字段-联络线使用)*/
UINT16 DsDrvHRelayId; /*道岔单锁后节点驱动继电器ID (配置字段-联络线使用)*/
UINT16 IbpDrvRelayId; /*IBP盘道岔旁路驱动继电器ID (配置字段-联络线使用)*/
ZzjPowerConfigDataStruct ZzjPowerData[SWITCH_ZZJ_POWER_STATE_MAX_NUM]; /*转辙机供电配置数据*/
} SwitchConfigDataStruct;
@@ -584,6 +585,15 @@ UINT16 GetSwitchDsDrvRelayId(const UINT16 switchId);
*/
ZzjPowerConfigDataStruct* GetSwitchZzjPowerConfigData(const UINT16 switchId);
/*
* ID的IBP盘道岔旁路表示灯驱动继电器ID线使
* const UINT16 switchId, ID
* 0:
* >0: IBP盘道岔旁路表示灯驱动继电器ID
*/
UINT16 GetSwitchIbpDrvRelayId(const UINT16 switchId);
#ifdef __cplusplus
}
#endif
+4 -1
View File
@@ -292,7 +292,7 @@ extern UINT8 CI_SYSTEM_TYPE_RCI;
#define CONTRAL_POWER_YES ((UINT8)0xaa)/*有控制权*/
/*联锁与计轴系统通信的最大数量*/
#define CI_TRAINSMIT_AXIS_MAX_NUM ((UINT8)3) /*联锁与计轴系统通信的最大数量*/
#define CI_TRAINSMIT_AXIS_MAX_NUM ((UINT8)10) /*联锁与计轴系统通信的最大数量*/
/*联锁与联锁系统通信的最大数量*/
#define CI_TRAINSMIT_CI_MAX_NUM ((UINT8)6) /*联锁与联锁系统通信的最大数量*/
@@ -311,5 +311,8 @@ extern UINT8 CI_SYSTEM_TYPE_RCI;
#define CI_LOCAL_SNOW_UNVALID ((UINT8)0x55) /*本地雨雪模式命令无效*/
#define CI_LOCAL_SNOW_VALID ((UINT8)0xAA) /*本地雨雪模式命令有效*/
#define CLD_SCX_MERGE_ON ((UINT8)0x55) /*试车与车辆段合设*/
#define CLD_SCX_MERGE_OFF ((UINT8)0xAA) /*试车与车辆段不合设*/
#endif
@@ -59,7 +59,7 @@
/*联锁V13.0版本升级数据结构 2018.8.3*/
/*版本号*/
#define VER_MAIN_SUBCI_CI_CID ((UINT8)24) /*子系统主版本号*/
#define VER_MAIN_SUBCI_CI_CID ((UINT8)25) /*子系统主版本号*/
#define VER_SUB_SUBCI_CI_CID ((UINT8)0) /*子系统子版本号*/
#define VER_BRUNCH_CI_CID ((UINT8)0) /*分支版本号..........主线填0....分支填1 调试填2 */
#define VER_RETURN_SUBCI_CI_CID ((UINT8)0) /*子系统回归版本号*/
@@ -75,14 +75,14 @@
/*手写软件版本号*/
#define VER_SOFT_PRODUCT ((UINT8)40) /*产品编号*/
#define VER_SOFT_MODUAL_APP ((UINT8)1) /*模块编号*/
#define VER_SOFT_MIANVERSION ((UINT8)24) /*主版本号*/
#define VER_SOFT_MIANVERSION ((UINT8)25) /*主版本号*/
#define VER_SOFT_SUBVERSION ((UINT8)1) /*子版本号*/
#endif
/*可兼容的公共数据结构版本号*/
#define VER_1_PUBLIC_FS_1 ((UINT8)31)
#define VER_1_PUBLIC_FS_2 ((UINT8)1)
#define VER_1_PUBLIC_FS_2 ((UINT8)4)
#define VER_1_PUBLIC_FS_3 ((UINT8)0)
#define VER_1_PUBLIC_FS_4 ((UINT8)0)
@@ -94,11 +94,11 @@
#define VER_3_PUBLIC_FS_1 ((UINT8)28)
#define VER_3_PUBLIC_FS_2 ((UINT8)0)
#define VER_3_PUBLIC_FS_3 ((UINT8)0)
#define VER_3_PUBLIC_FS_4 ((UINT8)17)
#define VER_3_PUBLIC_FS_4 ((UINT8)22)
/*可兼容的私有数据结构版本号*/
#define VER_1_PRIVATE_FS_1 ((UINT8)47)
#define VER_1_PRIVATE_FS_1 ((UINT8)49)
#define VER_1_PRIVATE_FS_2 ((UINT8)0)
#define VER_2_PRIVATE_FS_1 ((UINT8)0xFF)
@@ -108,9 +108,9 @@
#define VER_3_PRIVATE_FS_2 ((UINT8)0xFF)
/*可兼容OC数据结构版本号*/
#define VER_1_OCDATA_FS_1 ((UINT8)33) /*oc 3.0 较新数据版本*/
#define VER_1_OCDATA_FS_1 ((UINT8)36) /*oc 3.0 较新数据版本*/
#define VER_1_OCDATA_FS_2 ((UINT8)0)
#define VER_2_OCDATA_FS_1 ((UINT8)29) /*oc 2.1.11*/
#define VER_2_OCDATA_FS_2 ((UINT8)0)
#define VER_2_OCDATA_FS_1 ((UINT8)0xFF)
#define VER_2_OCDATA_FS_2 ((UINT8)0xFF)
#endif
+110 -18
View File
@@ -109,11 +109,14 @@ UINT16 wArbNearSecProtectDistance = 0U; /*ARB
UINT32 dwArbNearSecNoUtCount = 0U; /*ARB防护时间周期*/
UINT32 dwNonReturnBtnErrEnsureTime = 0U;/*无人折返按钮故障判断周期数*/
UINT32 dwOcCollTolerateCount = 0U; /*OC采集容忍周期数*/
UINT32 dwDownWashWaitAcceptTime = 0U; /*降级模式洗车等待值班员同意最大时间(S)*/
static UINT32 wJXTCMutualLockFaultTime = 0U; /*间隙探测旁路按钮故障判断时间(s)*/
UINT8 gCTFlyingRedunCount = 0u;
UINT16 StationTrackDistance = 0U; /*公共数据-站台追踪时,列车间隔距离(cm)*/
UINT32 LineMinTrainLength = 0U; /*公共数据-线路最小车长*/
CiOcRelateion CiOcRelationArr[CI_SUM_MAX];/*ci oc关系数组*/
UINT32 wJXTCStopDetectTime = 0U; /*间隙探测停止检测时间(s*/
static UINT16 g_TiocFsVersion[TIOCFS_VERSION_LENGTH] = { 0u };/* TIOC数据版本号 */
UINT32 gSystemUpdateMainUseCycNum = 0U; /*系统升级主用起始周期号*/
@@ -295,7 +298,7 @@ void SystemParaTimeToCycleCount(void)
dwSelfButCollCount = TimeToCycleCount((UINT32)paraVal, appCycleTime); /*自复式按钮对应继电器采集时间(ms)(初始化字段)*/
paraVal = GetSystemParaValue(ZFS_BUTTON_FAULT_ENSURE_TIME);
dwSelfButErrCount = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*自复式扣车/紧急按钮故障判断时间(s)*/
dwSelfButErrCount = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*自复式扣车/紧急/调车同意按钮/降级模式洗车同意按钮/降级模式反向通过同意按钮故障判断时间(s*/
paraVal = GetSystemParaValue(TRAIN_RECYCLE_RES_TIME);
dwTrainRecycleCount = TimeToCycleCount((UINT32)paraVal, appCycleTime); /*资源回收计时时间(ms*/
@@ -323,7 +326,6 @@ void SystemParaTimeToCycleCount(void)
paraVal = GetSystemParaValue(ARB_CHECK_ALXE_TIME);
dwArbNearSecNoUtCount = TimeToCycleCount((UINT32)paraVal, appCycleTime); /*ARB区段检查相邻区段上次UT占用经过时间 (配置单位ms)*/
StationTrackDistance = SystemParameterStruNew.StationTrackDistance; /*公共数据-站台追踪时,列车间隔距离(cm)*/
LineMinTrainLength = SystemParameterStruNew.dwLineMinTrainLength; /*公共数据-线路最小车长*/
paraVal = GetSystemParaValue(NONRETURN_BTN_ERR_ENSURE_TIME);
@@ -331,6 +333,15 @@ void SystemParaTimeToCycleCount(void)
paraVal = GetSystemParaValue(OC_COLL_TOLERATE_TIME);
dwOcCollTolerateCount = TimeToCycleCount((UINT32)paraVal, appCycleTime); /*C采集容忍周期数(ESB/PSD/SPKS/扣车)(ms*/
paraVal = GetSystemParaValue(WDOWNWASH_WAIT_ACCEPT_TIME);
dwDownWashWaitAcceptTime = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*降级模式洗车等待值班员同意最大时间(S)*/
paraVal = GetSystemParaValue(JXTCJXTC_MUTUALLOCK_FAULT_TIME);
wJXTCMutualLockFaultTime = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*间隙探测旁路按钮故障判断时间(s)*/
paraVal = GetSystemParaValue(JXTC_STOP_DETECTION_TIME);
wJXTCStopDetectTime = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*JXTC停止检测时间(s*/
}
/*
@@ -1258,18 +1269,6 @@ UINT16 GetSigCrossMaxLen(void)
return wSigCrossMaxLen;
}
/*
* 退
* void
* UINT32
* qw.liu 2022-03-03
*/
UINT16 GetBackProtectMaxLen(void)
{
return StationTrackDistance;
}
/*
* 线
* void
@@ -2365,6 +2364,39 @@ UINT16 GetTiocSystemParameterData(UINT32* pConfigDataAdderBuf, UINT16* pConfigDa
pConfigDataLenBuf[wTmpConfigDataSum] = (UINT16)sizeof(UINT32);
wTmpConfigDataSum++;
}
/* 降级模式洗车等待值班员同意最大时间(S) */
wTmpLen = 1U + wTmpConfigDataSum;
if (wBufMaxLen >= wTmpLen)
{
pConfigDataAdderBuf[wTmpConfigDataSum] = &dwDownWashWaitAcceptTime;
pConfigDataLenBuf[wTmpConfigDataSum] = (UINT16)sizeof(UINT32);
wTmpConfigDataSum++;
}
else
{
;/* 无处理 */
}
/* 间隙探测旁路按钮故障判断时间(s) */
wTmpLen = 1U + wTmpConfigDataSum;
if (wBufMaxLen >= wTmpLen)
{
pConfigDataAdderBuf[wTmpConfigDataSum] = &wJXTCMutualLockFaultTime;
pConfigDataLenBuf[wTmpConfigDataSum] = (UINT16)sizeof(UINT32);
wTmpConfigDataSum++;
}
else
{
;/* 无处理 */
}
/* 间隙探测停止检测时间(s */
wTmpLen = 1U + wTmpConfigDataSum;
if (wBufMaxLen >= wTmpLen)
{
pConfigDataAdderBuf[wTmpConfigDataSum] = &wJXTCStopDetectTime;
pConfigDataLenBuf[wTmpConfigDataSum] = (UINT16)sizeof(UINT32);
wTmpConfigDataSum++;
}
else
{
;/* 无处理 */
@@ -2866,9 +2898,9 @@ UINT8 SetLocalOcPattern(UINT8 localOcPattern)
return rtn;
}
#if 0
/*
* OC版本
* OC版本 -----
* OC版本
* 0x55 0xaa
* Create: fan 20250210
@@ -2877,6 +2909,7 @@ UINT8 GetLocalOcPattern(void)
{
return gLocalOcType;
}
#endif
/*
* RC联络线属性
@@ -2947,6 +2980,26 @@ UINT32 GetOcCollTolerateCount(void)
return dwOcCollTolerateCount;
}
/*
*
* void
*
* Created By hh 2025.12.04
*/
UINT32 GetDownWashWaitAcceptTime(void)
{
return dwDownWashWaitAcceptTime;
}
/*
*
* void
*
*/
UINT32 GetwJXTCMutualLockFaultTime(void)
{
return wJXTCMutualLockFaultTime;
}
/*
*
* UINT8 chSystemWorkType系统工作类型
@@ -3123,4 +3176,43 @@ void UpdateSystemMainUseCyc(void)
UINT32 GetSystemUpdateMainUseCycNum(void)
{
return gSystemUpdateMainUseCycNum;
}
}
/*
*
* void
*
*/
UINT32 GetwJXTCStopDetectTime(void)
{
return wJXTCStopDetectTime;
}
/*
* 线
*
* aa不合设 55
* by mpt 20260104
*/
UINT8 GetCldAndScxMergeFlag(void)
{
return SystemParameterStruNew.chCldAndScxMergeFlag;
}
/*
*
* INT32 FunctionConfigIndex
chSwitchVal
* void
* add by mpt 20260105
*/
void SetCiFunctionSwitchConfig(UINT8 chFunctionConfigIndex,UINT8 chSwitchVal)
{
if (CI_FUNCTION_SWITCH_SUM_MAX > chFunctionConfigIndex)
{
CiFuncSwitConfStruNew[chFunctionConfigIndex].wCiFuncSwitchVal = chSwitchVal;
}
else
{/*无处理*/
}
}
@@ -104,6 +104,9 @@ extern "C" {
#define FUNC_SWITCH_ZX_ALLCLOSE_USEBLUE ((UINT8)69) /*杭德需求:正线灭灯均亮蓝灯开关:0xAA打开 0x55关闭*/
#define FUNC_SWITCH_SND_SIDE_PROTECT ((UINT8)70) /*二级侧防开关:0xAA-支持二级侧防 0x55-不支持二级侧防*/
#define FUNC_ATS_INTERFACE_IDENTIFIER ((UINT8)71) /*联锁与ATS接口标识:01:不存在GAL报文头 02:存在GAL报文头*/
#define FUNC_WDOWNWASH_ZIFUSHI_BUTTON ((UINT8)72) /*降级模式洗车同意按钮是否为自复式(0X55非自复式、0XAA自复式)*/
#define FUNC_REOPRN_SET_NEAR ((UINT8)73) /*重开信号是否记忆进路接近锁闭状态开关:0xAA-重开后默认设置接近 0x55-重开后根据接近区段占用状态设置接近/未接近*/
#define FUNC_OVERLAP_UT_UNLOCK_MODE ((UINT8)74) /*UT列车占压停车区域时,保护区段解锁方式*/
#define CiSum_ID ((UINT16)1)/*实际联锁集中站数量 编号*/
@@ -165,7 +168,7 @@ extern "C" {
#define EA_MODE_ID (57u)/*区间疏散防护区域建立方式*/
#define EA_STATION_MODE_ID (58u)/*站台疏散防护区域建立方式*/
#define ZFS_BUTTON_RELAY_COLL_TIME (59U) /* 自复式按钮对应继电器采集时间(ms)*/
#define ZFS_BUTTON_FAULT_ENSURE_TIME (60U) /* 自复式扣车/紧急按钮故障判断时间(s)*/
#define ZFS_BUTTON_FAULT_ENSURE_TIME (60U) /* 自复式扣车/紧急/调车同意按钮/降级模式洗车同意按钮/降级模式反向通过同意按钮故障判断时间(s*/
#define CONFIG_MJJSOPENDELAY_TIME (61u) /*门禁解锁延时时间(秒)*/
#define TRAIN_RECYCLE_RES_TIME (62U) /*回收列车资源延时时间(ms*/
#define ZFS_CANCEL_BTN_ERR_ENSURE_TIME (63U) /* 自复式取消扣车/紧急按钮故障判断时间(s)*/
@@ -175,10 +178,15 @@ extern "C" {
#define SWITCH_BYPASS_DELAY_TIME (67U) /*本线路联络线道岔未及时取消旁路等待时间(S)*/
#define LOG_SUBPACK_DATA_LENGTH (68U) /*联锁UDP传输日志时,每个分包的长度(Byte)*/
#define ZFS_CANCEL_BTN_ERR_TRIGGER_TIME (69U) /*自复式取消扣车紧急按钮误触发判断时间(s)*/
#define ARB_CHECK_ALXE_SEC_LEN (70U) /*区段ARB向相邻区段检查计轴长度米(M)*/
#define ARB_CHECK_ALXE_TIME (71U) /*区段ARB向相邻区段检查最近无坏车时间ms*/
#define ARB_CHECK_ALXE_SEC_LEN (70U) /*区段ARB向相邻区段检查计轴长度米(M)*/
#define ARB_CHECK_ALXE_TIME (71U) /*区段ARB向相邻区段检查最近无坏车时间ms*/
#define NONRETURN_BTN_ERR_ENSURE_TIME (72U) /*无人折返按钮故障判断时间(秒/S)*/
#define OC_COLL_TOLERATE_TIME (73U) /*OC采集容忍时间(ESB/PSD/SPKS/扣车)(ms*/
#define OC_COLL_TOLERATE_TIME (73U) /*OC采集容忍时间(ESB/PSD/SPKS/扣车)(ms*/
#define WDOWNWASH_WAIT_ACCEPT_TIME (74U) /*降级模式洗车等待值班员同意最大时间(S)*/
#define JXTCJXTC_MUTUALLOCK_FAULT_TIME (75U) /*间隙探测旁路按钮故障判断时间(s)*/
#define JXTC_STOP_DETECTION_TIME (76U) /*JXTC停止检测时间(s*/
#define FUNC_SWITCH_ON ((UINT8)0xAA) /*功能配置开关打开*/
#define FUNC_SWITCH_OFF ((UINT8)0x55) /*功能配置开关关闭*/
@@ -215,6 +223,8 @@ extern "C" {
#define RC_WORK_MODE_CI ((UINT8)0x3Cu) /*联锁工作模式*/
#define RC_WORK_MODE_TIOC ((UINT8)0x3Du) /*TIOC工作模式*/
#define RC_WORK_MODE_TO_AIM_CI ((UINT8)0x55u) /*联锁工作模式-0x55*/
#define RC_WORK_MODE_TO_AIM_TIOC ((UINT8)0xAAu) /*TIOC工作模式 0xAA*/
#define SYSTEM_WORK_MODE_ONLY ((UINT8)0x55u) /*RC/CI单系统运行模式*/
#define SYSTEM_WORK_MODE_ALL ((UINT8)0xAAu) /*RC/CI双系统运行模式*/
@@ -312,7 +322,6 @@ typedef struct S_SystemParameterStruct
UINT16 MALengthForATOParking; /*满足ATO精准停车条件的MA长度,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT8 LinkLogicDirUpAndDown; /*系统定义逻辑方向与上下行方向的关系,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT16 OppositeTrackDistance; /*对向行驶双车间隔最小安全距离(cm),add by yt,2022年3月1日,适配车车系统配置数据*/
UINT16 StationTrackDistance; /*站台追踪时,列车间隔距离(cm),add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 MaxMALength; /*线路最差情况下紧急制动距离(单位m),add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 VobcAtsCommunicationErrorTime;/*VOBCATS通信故障判断时间*/
@@ -372,7 +381,6 @@ typedef struct S_SystemParaStruct
UINT16 MALengthForATOParking; /*满足ATO精准停车条件的MA长度,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT8 LinkLogicDirUpAndDown; /*系统定义逻辑方向与上下行方向的关系,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT16 OppositeTrackDistance; /*对向行驶双车间隔最小安全距离(cm),add by yt,2022年3月1日,适配车车系统配置数据*/
UINT16 StationTrackDistance; /*站台追踪时,列车间隔距离(cm),add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 MaxMALength; /*线路最差情况下紧急制动距离(单位m),add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 VobcAtsCommunicationErrorTime;/*VOBCATS通信故障判断时间*/
UINT32 dwLineMinTrainLength; /*系统配置数据,线路最小车长*/
@@ -389,6 +397,7 @@ typedef struct S_SystemParaStruct
UINT8 dwCDOccuCheckFlag; /*场段进路占用检查 0x55检查 0xaa不检查*/
UINT8 chNoCGFollowUtSwitch; /*无C轨站型B轨有UT车是可追踪功能开关 aa打开 55关闭*/
OtherCiParaStruct otherCICiParaStru[CI_SUM_MAX]; /*其他联锁参数配置*/
UINT8 chCldAndScxMergeFlag; /*车辆段与试车线合设开关,0x55 合设,0xaa 不合设*/
/************************************************/
}SystemParameterStructNew;
@@ -496,7 +505,9 @@ extern UINT32 dwOcCollTolerateCount; /*OC
extern UINT8 gCTFlyingRedunCount;
extern CiOcRelateion CiOcRelationArr[CI_SUM_MAX];/*ci oc关系数组*/
extern UINT32 gSystemUpdateMainUseCycNum; /*系统升级主用起始周期号*/
extern UINT8 localBackUpFlag; /*本机备用/主用模式*/; /* 原共享内存主备系区分标志*/
extern UINT8 localBackUpFlag; /*本机备用/主用模式 原共享内存主备系区分标志*/
extern UINT32 dwDownWashWaitAcceptTime; /*降级模式洗车等待值班员同意最大时间(S)*/
extern UINT32 LineMinTrainLength; /*系统配置数据,线路最小车长*/
/*
*
* void
@@ -1024,14 +1035,6 @@ UINT16 GetSigLightUpExAxleSecLen(void);
*/
UINT16 GetSigCrossMaxLen(void);
/*
* 退
* void
* UINT32
* qw.liu 2022-03-03
*/
UINT16 GetBackProtectMaxLen(void);
/*
* 线
* void
@@ -1388,14 +1391,15 @@ UINT32 GetdwNonReturnBtnErrEnsureCount(void);
* Create: fan 20250210
*/
UINT8 SetLocalOcPattern(UINT8 localOcPattern);
#if 0
/*
* OC版本
* OC版本-----OC兼容需求
* OC版本
* 0x55 0xaa
* Create: fan 20250210
*/
UINT8 GetLocalOcPattern(void);
#endif
/*
* RC联络线属性
@@ -1436,6 +1440,16 @@ UINT8 GetLocalPublicDataType(void);
*/
UINT32 GetOcCollTolerateCount(void);
/*
*
* void
*
* Created By hh 2025.12.04
*/
UINT32 GetDownWashWaitAcceptTime(void);
/*
*
* UINT8 chSystemWorkType系统工作类型
@@ -1500,6 +1514,34 @@ void UpdateSystemMainUseCyc(void);
* @note by cgh 20251110
*/
UINT32 GetSystemUpdateMainUseCycNum(void);
/*
*
* void
*
*/
UINT32 GetwJXTCMutualLockFaultTime(void);
/*
*
* void
*
*/
UINT32 GetwJXTCStopDetectTime(void);
/*
* 线
*
* aa不合设 55
* by mpt 20260104
*/
UINT8 GetCldAndScxMergeFlag(void);
/*
*
* INT32 FunctionConfigIndex
chSwitchVal
* void
* add by mpt 20260105
*/
void SetCiFunctionSwitchConfig(UINT8 chFunctionConfigIndex, UINT8 chSwitchVal);
#ifdef __cplusplus
}

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