[9.8] 9.8首版二回代码,基线版本

This commit is contained in:
lh
2026-05-22 15:44:34 +08:00
parent 6d6ddaec6b
commit e0a4ce32c2
111 changed files with 12084 additions and 2912 deletions
+59 -58
View File
@@ -20,77 +20,23 @@ LD = $(CC)
#INCLUDES += -I/path/to/my/lib/include #INCLUDES += -I/path/to/my/lib/include
#INCLUDES += -I../mylib/public #INCLUDES += -I../mylib/public
INCLUDES += -I ./src/APP \ INCLUDES += -I ./src/commoncode/common \
-I ./src/APP/ciapp/2oo2 \
-I ./src/APP/ciapp/AllAutoReturn \
-I ./src/APP/ciapp/AutoReturn \
-I ./src/APP/ciapp/AutoRoute \
-I ./src/APP/ciapp/AxisAssert \
-I ./src/APP/ciapp/AxisSort \
-I ./src/APP/ciapp/CutoffPoint \
-I ./src/APP/ciapp/DataManage \
-I ./src/APP/ciapp/DebugPrint \
-I ./src/APP/ciapp/Deployment \
-I ./src/APP/ciapp/DiffLineDev \
-I ./src/APP/ciapp/EnvelopeManage \
-I ./src/APP/ciapp/ERROR \
-I ./src/APP/ciapp/ESB \
-I ./src/APP/ciapp/FloodGate \
-I ./src/APP/ciapp/Garagedoor \
-I ./src/APP/ciapp/HLHTMsgHead \
-I ./src/APP/ciapp/Indicator \
-I ./src/APP/ciapp/Initial \
-I ./src/APP/ciapp/InvadeSection \
-I ./src/APP/ciapp/IO \
-I ./src/APP/ciapp/LogicManage \
-I ./src/APP/ciapp/LogicProcess \
-I ./src/APP/ciapp/LogRecord \
-I ./src/APP/ciapp/Main \
-I ./src/APP/ciapp/Mask \
-I ./src/APP/ciapp/NonAutoReturn \
-I ./src/APP/ciapp/NonRoute \
-I ./src/APP/ciapp/Overlap \
-I ./src/APP/ciapp/ParsePack \
-I ./src/APP/ciapp/PSC \
-I ./src/APP/ciapp/PSD \
-I ./src/APP/ciapp/QueryFiles \
-I ./src/APP/ciapp/Relay \
-I ./src/APP/ciapp/RemoteRM \
-I ./src/APP/ciapp/ReverseCut \
-I ./src/APP/ciapp/ReverseRoute \
-I ./src/APP/ciapp/Route \
-I ./src/APP/ciapp/Section \
-I ./src/APP/ciapp/SectionStateProcess \
-I ./src/APP/ciapp/SGBJ \
-I ./src/APP/ciapp/Signal \
-I ./src/APP/ciapp/SPKS \
-I ./src/APP/ciapp/Switch \
-I ./src/APP/ciapp/System \
-I ./src/APP/ciapp/Train \
-I ./src/APP/ciapp/Transmit \
-I ./src/APP/ciapp/VirtualDevice \
-I ./src/APP/ciapp/WashMachine \
-I ./src/APP/ciapp/WLScreen \
-I ./src/APP/ciapp/WLBrake \
-I ./src/APP/PU13_integration_config \
-I ./src/commoncode/common \
-I ./src/commoncode/commoncode_config_vxworks \ -I ./src/commoncode/commoncode_config_vxworks \
-I ./src/dqu_common/dqu_idmap_common \ -I ./src/dqu_common/dqu_idmap_common \
-I ./src/dqu_common/dqu_emap_common \ -I ./src/dqu_common/dqu_emap_common \
-I ./src/dqu_common/dqu_dfs_common \ -I ./src/dqu_common/dqu_dfs_common \
-I ./src/dqu_common/dqu_cbtc_common \ -I ./src/dqu_common/dqu_cbtc_common \
-I .\src\protocol\fsfb\common_dqu_fsfb \
-I .\src\protocol\fsfb\common_fsfb \
-I .\src\protocol\protocol_cbtc\common_protocol_config \ -I .\src\protocol\protocol_cbtc\common_protocol_config \
-I .\src\protocol\protocol_cbtc\common_dqu_protocol \ -I .\src\protocol\protocol_cbtc\common_dqu_protocol \
-I .\src\protocol\protocol_cbtc\common_protocol \ -I .\src\protocol\protocol_cbtc\common_protocol \
-I .\src\protocol\protocol_cbtc\common_protocol_sfp_rsspi-config \
-I .\src\protocol\redun_record_cbtc\common_dqu_rp \ -I .\src\protocol\redun_record_cbtc\common_dqu_rp \
-I .\src\protocol\redun_record_cbtc\common_redun \ -I .\src\protocol\redun_record_cbtc\common_redun \
-I .\src\protocol\redun_record_cbtc\common_redun_record_config \ -I .\src\protocol\redun_record_cbtc\common_redun_record_config \
-I .\src\protocol\rsr_record_cbtc\common_dqu_rsr \ -I .\src\protocol\rsr_record_cbtc\common_dqu_rsr \
-I .\src\protocol\rsr_record_cbtc\common_rsr \
-I .\src\protocol\rsr_record_cbtc\common_rsr\rssp \ -I .\src\protocol\rsr_record_cbtc\common_rsr\rssp \
-I .\src\protocol\rsr_record_cbtc\common_rsr\sig \ -I .\src\protocol\rsr_record_cbtc\common_rsr\sig \
-I .\src\protocol\rsr_record_cbtc\common_rsr \
-I .\src\protocol\rsr_record_cbtc\common_rsr_record_config \ -I .\src\protocol\rsr_record_cbtc\common_rsr_record_config \
-I .\src\protocol\rssp_record_cbtc1\common_dqu_rssp \ -I .\src\protocol\rssp_record_cbtc1\common_dqu_rssp \
-I .\src\protocol\rssp_record_cbtc1\common_rssp \ -I .\src\protocol\rssp_record_cbtc1\common_rssp \
@@ -101,6 +47,8 @@ INCLUDES += -I ./src/APP \
-I .\src\protocol\sfp_record_cbtc1\common_dqu_sfp \ -I .\src\protocol\sfp_record_cbtc1\common_dqu_sfp \
-I .\src\protocol\sfp_record_cbtc1\common_sfp \ -I .\src\protocol\sfp_record_cbtc1\common_sfp \
-I .\src\protocol\sfp_record_cbtc1\common_sfp_nr_config \ -I .\src\protocol\sfp_record_cbtc1\common_sfp_nr_config \
-I .\src\protocol\fsfb\common_dqu_fsfb \
-I .\src\protocol\fsfb\common_fsfb \
-I ./src/DRV \ -I ./src/DRV \
-I ./src/MSCP \ -I ./src/MSCP \
-I ./src/MSCP/CM \ -I ./src/MSCP/CM \
@@ -109,7 +57,60 @@ INCLUDES += -I ./src/APP \
-I ./src/MSCP/SFM \ -I ./src/MSCP/SFM \
-I ./src/MSCP/PFM \ -I ./src/MSCP/PFM \
-I ./src/MSCP_CFG \ -I ./src/MSCP_CFG \
-I ./src/APP \
-I ./src/APP/ciapp/2oo2 \
-I ./src/APP/ciapp/AllAutoReturn \
-I ./src/APP/ciapp/AutoReturn \
-I ./src/APP/ciapp/AutoRoute \
-I ./src/APP/ciapp/DataManage \
-I ./src/APP/ciapp/DebugPrint \
-I ./src/APP/ciapp/DiffLineDev \
-I ./src/APP/ciapp/ERROR \
-I ./src/APP/ciapp/ESB \
-I ./src/APP/ciapp/FloodGate \
-I ./src/APP/ciapp/Garagedoor \
-I ./src/APP/ciapp/HLHTMsgHead \
-I ./src/APP/ciapp/Indicator \
-I ./src/APP/ciapp/Initial \
-I ./src/APP/ciapp/InvadeSection \
-I ./src/APP/ciapp/IO \
-I ./src/APP/ciapp/LightTestButtonManage \
-I ./src/APP/ciapp/LogicManage \
-I ./src/APP/ciapp/LogicProcess \
-I ./src/APP/ciapp/LogRecord \
-I ./src/APP/ciapp/Main \
-I ./src/APP/ciapp/Mask \
-I ./src/APP/ciapp/NonRoute \
-I ./src/APP/ciapp/Overlap \
-I ./src/APP/ciapp/ParsePack \
-I ./src/APP/ciapp/PSC \
-I ./src/APP/ciapp/PSD \
-I ./src/APP/ciapp/QueryFiles \
-I ./src/APP/ciapp/Relay \
-I ./src/APP/ciapp/ReverseRoute \
-I ./src/APP/ciapp/Route \
-I ./src/APP/ciapp/Section \
-I ./src/APP/ciapp/Signal \
-I ./src/APP/ciapp/SPKS \
-I ./src/APP/ciapp/Switch \
-I ./src/APP/ciapp/System \
-I ./src/APP/ciapp/Transmit \
-I ./src/APP/ciapp/VirtualDevice \
-I ./src/APP/ciapp/WashMachine \
-I ./src/APP/PU13_integration_config \
-I ./src/APP/ciapp/AxisSort \
-I ./src/APP/ciapp/Train \
-I ./src/APP/ciapp/EnvelopeManage \
-I ./src/APP/ciapp/CutoffPoint \
-I ./src/APP/ciapp/SectionStateProcess \
-I ./src/APP/ciapp/AxisAssert \
-I ./src/APP/ciapp/ReverseCut \
-I ./src/APP/ciapp/WLScreen \
-I ./src/APP/ciapp/WLBrake \
-I ./src/APP/ciapp/RemoteRM \
-I ./src/APP/ciapp/NonAutoReturn \
-include stdarg.h
#LIBS += -L/path/to/my/lib/$(PLATFORM)/usr/lib -lmylib #LIBS += -L/path/to/my/lib/$(PLATFORM)/usr/lib -lmylib
#LIBS += -L../mylib/$(OUTPUT_DIR) -lmylib #LIBS += -L../mylib/$(OUTPUT_DIR) -lmylib
@@ -30,6 +30,6 @@
#define VER_INTE_PROJECT 220 /*项目编号*/ #define VER_INTE_PROJECT 220 /*项目编号*/
#define VER_INTE_PRODUCT 40 /*产品编号*/ #define VER_INTE_PRODUCT 40 /*产品编号*/
#define VER_INTE_EXE 1 /*可执行编号*/ #define VER_INTE_EXE 1 /*可执行编号*/
#define VER_INTE_TIME 112 /*集成次数编号*/ #define VER_INTE_TIME 116 /*集成次数编号*/
#endif/*endif of #define _CI_INTEGRATE_CONFIG_H*/ #endif/*endif of #define _CI_INTEGRATE_CONFIG_H*/
+153 -32
View File
@@ -443,17 +443,17 @@ UINT32 CopyValidSetRcVobcDataStru(const UINT8* pCurCiAppDataPointer, void* pData
for (i = 0u; i < ValidIdNum; i++) for (i = 0u; i < ValidIdNum; i++)
{ {
pDstAddr = (UINT8*)pDataStru + struLength * i; if (i < struNum)
/*ԪǰֽIDΪ0ʱЧ,˴˵Ч*/
if (0u != ShortFromCharLE(pDstAddr))
{ {
(void)memcpy(pDstAddr, pCurCiAppDataPointer + curIndex, struLength); pDstAddr = (UINT8*)pDataStru + struLength * i;
(void)CommonMemCpy((void*)pDstAddr, (UINT32)struLength, (const void*)(pCurCiAppDataPointer + curIndex), (UINT32)struLength);
curIndex += (UINT32)struLength; curIndex += (UINT32)struLength;
} }
else else
{ {
/*ִκβ*/ curIndex += (UINT32)struLength;
debug_infor_printf((const)"ERROR: SetValidIdNum = %d\n", i);
} }
} }
} }
@@ -1618,19 +1618,22 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer)
pCiAppDataPointer[curIndex] = gDyTestNum; pCiAppDataPointer[curIndex] = gDyTestNum;
curIndex += 1U; curIndex += 1U;
/*гԶɸѡ*/ /*ZCCBTCгѹϢ*/
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(TrainAtsScreenStru)* TRAIN_SUM_MAX), (void*)(&gszAtsScreenInfo), (UINT32)(sizeof(TrainAtsScreenStru)* TRAIN_SUM_MAX)); pCiAppDataPointer[curIndex] = gCbtcCrossNumZc;
curIndex = curIndex + (UINT32)(sizeof(TrainAtsScreenStru) * TRAIN_SUM_MAX); curIndex += 1u;
for (ii = 0u; ii < gCbtcCrossNumZc; ii++)
/*Զɸѡг*/ {
pCiAppDataPointer[curIndex] = gAtsScreenNum; ShortToChar(gCbtcCrossStructZc[ii].wSignalId, &pCiAppDataPointer[curIndex]);
curIndex += 1U; curIndex += 2u;
pCiAppDataPointer[curIndex] = gCbtcCrossStructZc[ii].wTrainId;
curIndex += 1u;
}
/*һCRC*/ /*һCRC*/
crcLength = curIndex - crcIndex; crcLength = curIndex - crcIndex;
crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength); crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength);
debug_infor_printf((const)"2oo2 RecvCiCmdDataStruCurSum-szNeighborCiInfo CRC:%x, Length:%d\n", crcResult, crcLength); debug_infor_printf((const)"2oo2 RecvCiCmdDataStruCurSum-gDyTestNum CRC:%x, Length:%d\n", crcResult, crcLength);
} }
return curIndex; return curIndex;
} }
@@ -2463,9 +2466,17 @@ UINT8 SetCiAppData(const UINT8 *pCiAppDataPointer,const UINT32 len)
gDyTestNum = pCiAppDataPointer[curIndex]; gDyTestNum = pCiAppDataPointer[curIndex];
curIndex += 1U; curIndex += 1U;
/*гԶɸѡ*/ /*ZCCBTCгѹϢ*/
(void)CommonMemCpy((void*)(&gszAtsScreenInfo), (UINT32)(sizeof(TrainAtsScreenStru)* TRAIN_SUM_MAX), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(TrainAtsScreenStru)* TRAIN_SUM_MAX)); gCbtcCrossNumZc = pCiAppDataPointer[curIndex];
curIndex = curIndex + (UINT32)(sizeof(TrainAtsScreenStru) * TRAIN_SUM_MAX); curIndex += 1u;
for (ii = 0u; ii < gCbtcCrossNumZc; ii++)
{
gCbtcCrossStructZc[ii].wSignalId = ShortFromChar(&pCiAppDataPointer[curIndex]);
curIndex += 2u;
gCbtcCrossStructZc[ii].wTrainId = pCiAppDataPointer[curIndex];
curIndex += 1u;
}
rtn = 1U; rtn = 1U;
} }
@@ -2921,12 +2932,12 @@ UINT32 GetCiGeneralData(UINT8* pCiAppDataPointer)
curIndex = curIndex + curResult; curIndex = curIndex + curResult;
/*ͬѩϢ*/ /*ͬѩϢ*/
curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void*)(szSendCiAreaSnow), CI_COM_CI_MAX_NUM, (UINT16)sizeof(ToCiAreaSnowStruct)); (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM), (void*)(szSendCiAreaSnow), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM));
curIndex = curIndex + curResult; curIndex = curIndex + (UINT32)(sizeof(ToCiAreaSnowStruct) * CI_COM_CI_MAX_NUM);
/*ͬѩϢ*/ /*ͬѩϢ*/
curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void*)(szRecvCiAreaSnow), CI_COM_CI_MAX_NUM, (UINT16)sizeof(ToCiAreaSnowStruct)); (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM), (void*)(szRecvCiAreaSnow), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM));
curIndex = curIndex + curResult; curIndex = curIndex + (UINT32)(sizeof(ToCiAreaSnowStruct) * CI_COM_CI_MAX_NUM);
/* ѩ */ /* ѩ */
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_LocalSnowModel), (UINT32)sizeof(UINT8)); (void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_LocalSnowModel), (UINT32)sizeof(UINT8));
@@ -2958,6 +2969,56 @@ UINT32 GetCiGeneralData(UINT8* pCiAppDataPointer)
/*뱾CIͨŵRcͨͷ*/ /*뱾CIͨŵRcͨͷ*/
curResult = CopyValidGetHlhtHeadCtxs(pCiAppDataPointer + curIndex, CI_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), gSzRcHLHTHeadCtxs); curResult = CopyValidGetHlhtHeadCtxs(pCiAppDataPointer + curIndex, CI_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), gSzRcHLHTHeadCtxs);
curIndex = curIndex + curResult; curIndex = curIndex + curResult;
/*ZCCBTCгѹϢ*/
pCiAppDataPointer[curIndex] = gCbtcCrossNumZc;
curIndex += 1u;
for (ii = 0u; ii < gCbtcCrossNumZc; ii++)
{
ShortToChar(gCbtcCrossStructZc[ii].wSignalId, &pCiAppDataPointer[curIndex]);
curIndex += 2u;
pCiAppDataPointer[curIndex] = gCbtcCrossStructZc[ii].wTrainId;
curIndex += 1u;
}
/**/
for (ii = 0U; ii < g_VirtualCIStructData.virtualCiNum; ii++)
{
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_VirtualCIStructData.virtualCi[ii].virtualCiId), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_VirtualCIStructData.virtualCi[ii].chAllSignalBrightFlag) , (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_VirtualCIStructData.virtualCi[ii].chAllSwitchYLockFlag), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8) , (const void*)(&g_VirtualCIStructData.virtualCi[ii].autoTriggerflag) , (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_VirtualCIStructData.virtualCi[ii].cimode), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_VirtualCIStructData.virtualCi[ii].chLabourCancelLinShiXianState) , (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwFlag), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwjHunXianFLag) , (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT32), (const void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwStartCycNum) , (UINT32)sizeof(UINT32));
curIndex = curIndex + (UINT32)sizeof(UINT32);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT32), (const void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwValidCycNum) , (UINT32)sizeof(UINT32));
curIndex = curIndex + (UINT32)sizeof(UINT32);
/*ָʾ״̬*/
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(VIRTUAL_CI_INDICATOR_SUM_MAX) * sizeof(IndicatorDataStruct) ,(const void*)(&g_VirtualCIStructData.virtualCi[ii].IndicatorData) , (UINT32)(VIRTUAL_CI_INDICATOR_SUM_MAX) * sizeof(IndicatorDataStruct));
curIndex = curIndex + (UINT32)((VIRTUAL_CI_INDICATOR_SUM_MAX) * sizeof(IndicatorDataStruct));
}
} }
return curIndex; return curIndex;
@@ -3216,12 +3277,12 @@ UINT8 SetCiGeneralData(const UINT8* pCiAppDataPointer, const UINT32 len)
curIndex = curIndex + curResult; curIndex = curIndex + curResult;
/*ͬѩϢ*/ /*ͬѩϢ*/
curResult = CopyValidSetDataStru(pCiAppDataPointer + curIndex, (void*)(szSendCiAreaSnow), CI_COM_CI_MAX_NUM, (UINT16)sizeof(ToCiAreaSnowStruct)); (void)CommonMemCpy((void*)(szSendCiAreaSnow), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM));
curIndex = curIndex + curResult; curIndex = curIndex + (UINT32)(sizeof(ToCiAreaSnowStruct) * CI_COM_CI_MAX_NUM);
/*ͬѩϢ*/ /*ͬѩϢ*/
curResult = CopyValidSetDataStru(pCiAppDataPointer + curIndex, (void*)(szRecvCiAreaSnow), CI_COM_CI_MAX_NUM, (UINT16)sizeof(ToCiAreaSnowStruct)); (void)CommonMemCpy((void*)(szRecvCiAreaSnow), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM));
curIndex = curIndex + curResult; curIndex = curIndex + (UINT32)(sizeof(ToCiAreaSnowStruct) * CI_COM_CI_MAX_NUM);
/* ѩ */ /* ѩ */
(void)CommonMemCpy((void*)(&g_LocalSnowModel), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8)); (void)CommonMemCpy((void*)(&g_LocalSnowModel), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
@@ -3254,6 +3315,56 @@ UINT8 SetCiGeneralData(const UINT8* pCiAppDataPointer, const UINT32 len)
curResult = CopyValidSetHlhtHeadCtxs(pCiAppDataPointer + curIndex, CI_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), gSzRcHLHTHeadCtxsCiToRc); curResult = CopyValidSetHlhtHeadCtxs(pCiAppDataPointer + curIndex, CI_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), gSzRcHLHTHeadCtxsCiToRc);
curIndex = curIndex + curResult; curIndex = curIndex + curResult;
/*ZCCBTCгѹϢ*/
gCbtcCrossNumZc = pCiAppDataPointer[curIndex];
curIndex += 1u;
for (ii = 0u; ii < gCbtcCrossNumZc; ii++)
{
gCbtcCrossStructZc[ii].wSignalId = ShortFromChar(&pCiAppDataPointer[curIndex]);
curIndex += 2u;
gCbtcCrossStructZc[ii].wTrainId = pCiAppDataPointer[curIndex];
curIndex += 1u;
}
/**/
for (ii = 0U; ii < g_VirtualCIStructData.virtualCiNum; ii++)
{
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].virtualCiId) , (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].chAllSignalBrightFlag), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].chAllSwitchYLockFlag), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].autoTriggerflag), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].cimode) , (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].chLabourCancelLinShiXianState) , (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwFlag), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwjHunXianFLag), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwStartCycNum) , (UINT32)sizeof(UINT32), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT32));
curIndex = curIndex + (UINT32)sizeof(UINT32);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwValidCycNum), (UINT32)sizeof(UINT32), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT32));
curIndex = curIndex + (UINT32)sizeof(UINT32);
/*ָʾ״̬*/
(void)CommonMemCpy((void*)(g_VirtualCIStructData.virtualCi[ii].IndicatorData), (UINT32)(VIRTUAL_CI_INDICATOR_SUM_MAX) * sizeof(IndicatorDataStruct), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(VIRTUAL_CI_INDICATOR_SUM_MAX) * sizeof(IndicatorDataStruct));
curIndex = curIndex + (UINT32)((VIRTUAL_CI_INDICATOR_SUM_MAX) * sizeof(IndicatorDataStruct));
}
rtn = 1u; rtn = 1u;
} }
else else
@@ -3409,6 +3520,8 @@ UINT32 CopyValidGetSigDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum, Signal
curIndex++; curIndex++;
*(pCurCiAppDataPointer + curIndex) = pstSignalDataStruCC[i].SignalCrossState; *(pCurCiAppDataPointer + curIndex) = pstSignalDataStruCC[i].SignalCrossState;
curIndex++; curIndex++;
*(pCurCiAppDataPointer + curIndex) = pstSignalDataStruCC[i].wCrossTacsTrainId;
curIndex++;
} }
else else
{ {
@@ -3475,6 +3588,8 @@ UINT32 CopyValidSetSigDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum, Signal
curIndex++; curIndex++;
pstSignalDataStruCC[devId].SignalCrossState = *(pCurCiAppDataPointer + curIndex); pstSignalDataStruCC[devId].SignalCrossState = *(pCurCiAppDataPointer + curIndex);
curIndex++; curIndex++;
pstSignalDataStruCC[devId].wCrossTacsTrainId = *(pCurCiAppDataPointer + curIndex);
curIndex++;
} }
else else
@@ -3648,19 +3763,19 @@ UINT32 CopyValidGetLogicSecDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum,Lo
for (j = 0U; j < pstLogSecDataStruCC[i].chTrainInfoSum; j++) for (j = 0U; j < pstLogSecDataStruCC[i].chTrainInfoSum; j++)
{ {
ShortToChar(pstLogSecDataStruCC[i].szTrainResData->wTrainId, (pCurCiAppDataPointer + curIndex)); ShortToChar(pstLogSecDataStruCC[i].szTrainResData[j].wTrainId, (pCurCiAppDataPointer + curIndex));
curIndex += 2U; curIndex += 2U;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData->chTrainApplyState; *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData[j].chTrainApplyState;
curIndex++; curIndex++;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData->chLogicResUsable; *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData[j].chLogicResUsable;
curIndex++; curIndex++;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData->chLogicReturnState; *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData[j].chLogicReturnState;
curIndex++; curIndex++;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData->chLogicUnlockState; *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData[j].chLogicUnlockState;
curIndex++; curIndex++;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData->chTrainLevel; *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData[j].chTrainLevel;
curIndex++; curIndex++;
LongToChar(pstLogSecDataStruCC[i].szTrainResData->dwRcvUnlockCmdCyc, (pCurCiAppDataPointer + curIndex)); LongToChar(pstLogSecDataStruCC[i].szTrainResData[j].dwRcvUnlockCmdCyc, (pCurCiAppDataPointer + curIndex));
curIndex += 4U; curIndex += 4U;
} }
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].cResReqOtherCIId; *(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].cResReqOtherCIId;
@@ -4586,6 +4701,7 @@ UINT32 CopyValidSetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcTo
{ {
m_OcToCiOrginDataNum = (UINT8)ValidIdNum; 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))); /*սṹֹ*/ (void)CommonMemSet(OcRecvData, (UINT32)((OC_SUM_MAX)* sizeof(OcToCiOriginDataStruct)), 0U, (UINT32)((OC_SUM_MAX)* sizeof(OcToCiOriginDataStruct))); /*սṹֹ*/
for (i = 0U; i < ValidIdNum; i++) for (i = 0U; i < ValidIdNum; i++)
{ {
@@ -4621,6 +4737,8 @@ UINT32 CopyValidSetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcTo
curIndex++; curIndex++;
pOcDevice->BoardState[j] = *(pCurCiAppDataPointer + curIndex); pOcDevice->BoardState[j] = *(pCurCiAppDataPointer + curIndex);
curIndex++; curIndex++;
pOcDevice->MainStandbyState[j] = *(pCurCiAppDataPointer + curIndex);
curIndex++;
} }
} }
@@ -4786,6 +4904,7 @@ UINT32 CopyValidGetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcTo
/*Ч*/ /*Ч*/
ShortToChar(m_OcToCiOrginDataNum, pCurCiAppDataPointer); ShortToChar(m_OcToCiOrginDataNum, pCurCiAppDataPointer);
curIndex += (UINT32)sizeof(UINT16); /*ֽ*/ curIndex += (UINT32)sizeof(UINT16); /*ֽ*/
//printf("m_OcToCiOrginDataNum = %d\n", m_OcToCiOrginDataNum);
if (struNum > ValidIdNum) if (struNum > ValidIdNum)
{ {
for (i = 0U; i < m_OcToCiOrginDataNum; i++) for (i = 0U; i < m_OcToCiOrginDataNum; i++)
@@ -4819,6 +4938,8 @@ UINT32 CopyValidGetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcTo
curIndex++; curIndex++;
*(pCurCiAppDataPointer + curIndex) = pOcDevice->BoardState[j]; *(pCurCiAppDataPointer + curIndex) = pOcDevice->BoardState[j];
curIndex++; curIndex++;
*(pCurCiAppDataPointer + curIndex) = pOcDevice->MainStandbyState[j];
curIndex++;
} }
} }
ShortToChar(OcRecvData[i].OcGdNum, (pCurCiAppDataPointer + curIndex)); ShortToChar(OcRecvData[i].OcGdNum, (pCurCiAppDataPointer + curIndex));
@@ -204,7 +204,7 @@ UINT32 GetCiTranCiDataCheckVer(const UINT8 ciId, const UINT16 deviceName)
UINT8 ii = 0U; UINT8 ii = 0U;
UINT8 chBreakFlag = 0U; UINT8 chBreakFlag = 0U;
UINT8 chDevType = 0U; UINT8 chDevType = 0U;
chDevType = (UINT8)((deviceName & 0xFF00) >> 8U); chDevType = (UINT8)((deviceName & 0xFF00u) >> 8U);
if ((ciId > 0U) && (ciId < CI_SUM_MAX) && if ((ciId > 0U) && (ciId < CI_SUM_MAX) &&
((RC_WORK_MODE_CI == chDevType)||(RC_WORK_MODE_TIOC == chDevType))) ((RC_WORK_MODE_CI == chDevType)||(RC_WORK_MODE_TIOC == chDevType)))
{ {
+139 -33
View File
@@ -1292,17 +1292,13 @@ edit cgh 20241203
UINT8 RouteLockDriveSwitch(const UINT16 routeId, const UINT8 NeedForDrvRoutAssoSwit) UINT8 RouteLockDriveSwitch(const UINT16 routeId, const UINT8 NeedForDrvRoutAssoSwit)
{ {
UINT8 ii = 0u; UINT8 ii = 0u;
UINT8 switchSum = 0u;
UINT16 switchId = 0u; UINT16 switchId = 0u;
UINT8 switchExpPosition = SWITCH_POSITION_INVALID; /*道岔期望位置*/ UINT8 switchExpPosition = SWITCH_POSITION_INVALID; /*道岔期望位置*/
UINT8 switchDancaoPosition = SWITCH_POSITION_INVALID; /*单操有效位置*/ UINT8 switchDancaoPosition = SWITCH_POSITION_INVALID; /*单操有效位置*/
RouteSwitchStruct* pRouteSwitchStru = NULL; /*道岔数据结构指针*/
UINT8 innerSwitchRetVal = CI_ERROR; /*检查进路内道岔是否可被驱动的结果*/ UINT8 innerSwitchRetVal = CI_ERROR; /*检查进路内道岔是否可被驱动的结果*/
UINT8 assocSwitchRetVal = CI_ERROR; /*检查带动道岔是否可被驱动的结果*/ UINT8 assocSwitchRetVal = CI_ERROR; /*检查带动道岔是否可被驱动的结果*/
UINT8 assocSwitchSum = 0u; /*道岔数目*/ UINT8 assocSwitchSum = 0u; /*道岔数目*/
RouteAssocSwitchStruct routeAssocSwitchStru = {0,0}; /*道岔数据*/ RouteAssocSwitchStruct routeAssocSwitchStru = {0,0}; /*道岔数据*/
UINT8 routeProtectSwitchSum = 0u; /*防护道岔数目*/
RouteProtectSwitchStruct* pRouteProtectSwitchStru = NULL; /*防护道岔数据*/
UINT8 chAutoCheck = 0U; UINT8 chAutoCheck = 0U;
UINT8 chSendLevel = 0U; UINT8 chSendLevel = 0U;
chAutoCheck = AutoSignalOrRouteValid(routeId); chAutoCheck = AutoSignalOrRouteValid(routeId);
@@ -3236,7 +3232,6 @@ UINT8 GetSwitchRouteLockState(UINT16 switchId)
{ {
UINT16 bufIndex = 0u; /*数组下标*/ UINT16 bufIndex = 0u; /*数组下标*/
UINT16 belongSecId = 0u; /*所属区段ID*/ UINT16 belongSecId = 0u; /*所属区段ID*/
UINT16 doubleSwitchId = 0u; /*双动道岔ID*/
UINT8 belongPhySecState = 0u; /*所属物理区段的进路状态*/ UINT8 belongPhySecState = 0u; /*所属物理区段的进路状态*/
UINT8 reVal = CI_ERROR; UINT8 reVal = CI_ERROR;
@@ -3258,21 +3253,7 @@ UINT8 GetSwitchRouteLockState(UINT16 switchId)
} }
else else
{ {
doubleSwitchId = GetDSwitchOtherId(switchId);/*获取双动道岔ID*/ /*双动道岔锁闭状态不处理*/
if (doubleSwitchId != 0u)
{/*双动道岔非空*/
belongSecId = GetSwitchPhySectionId(doubleSwitchId);
belongPhySecState = GetPhySecLockState(belongSecId);
if ((PHYSICAL_SECTION_LOCK_NORMAL == belongPhySecState) ||
(PHYSICAL_SECTION_LOCK_PROTECT == belongPhySecState) ||
(PHYSICAL_SECTION_LOCK_DELAY == belongPhySecState) ||
(PHYSICAL_SECTION_LOCK_FAULTDELAY == belongPhySecState))
{
reVal = CI_SUCCESS;
}
}
} }
} }
return reVal; return reVal;
@@ -5128,8 +5109,9 @@ UINT8 GetOtherCiDevStatus(UINT16 const devType,UINT16 const devId,UINT16 const c
devState = 0u; devState = 0u;
} }
break; break;
case CI_DEVICE_TYPE_PSD_EXCEPT_OPEN: /*站台屏蔽门(异常打开*/ case CI_DEVICE_TYPE_PSD_EXCEPT_OPEN: /*站台屏蔽门(异常)*/
devState = GePsdExceptOpenState(devId); devState = GePsdExceptState(devId);
/*宁象需求:屏蔽门异常打开又关闭、尚未取消异常状态时不开放信号*/
break; break;
case CI_DEVICE_TYPE_GARAGEDOOR: /*车库门*/ case CI_DEVICE_TYPE_GARAGEDOOR: /*车库门*/
tmpDevState = GetGaragedoorState(devId); tmpDevState = GetGaragedoorState(devId);
@@ -5928,6 +5910,8 @@ UINT8 CheckJumpLockApply(UINT16 axisSectionId)
UINT8 routeTrainNear = 0u; UINT8 routeTrainNear = 0u;
UINT8 physicalCheck = 0u; UINT8 physicalCheck = 0u;
UINT8 phyPLockRouteState = 0u; UINT8 phyPLockRouteState = 0u;
UINT16 devId = 0u; /*设备ID*/
UINT8 devState = 0u; /*设备状态*/
physicalSecId = GetAxisSecRelativePhySecId(axisSectionId); physicalSecId = GetAxisSecRelativePhySecId(axisSectionId);
routeRlockId = GetPhySecRLockBelongRouteId(physicalSecId);/*物理区段进路锁闭所属进路ID*/ routeRlockId = GetPhySecRLockBelongRouteId(physicalSecId);/*物理区段进路锁闭所属进路ID*/
@@ -6072,6 +6056,21 @@ UINT8 CheckJumpLockApply(UINT16 axisSectionId)
} }
} }
} }
if (CI_SUCCESS == reVal)
{/*检查防护道岔位置*/
devId = 0u;
devState = 0u;
reVal = AxisSecAllProtSwitchPosCheck(axisSectionId, &devId, &devState);
}
if (CI_SUCCESS == reVal)
{/*检查防护道岔封锁状态*/
devId = 0u;
devState = 0u;
reVal = AxisSecProtSwitchFLockCheck(axisSectionId, &devId, &devState);
}
return reVal; return reVal;
} }
@@ -6466,6 +6465,20 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId)
reVal = CI_SUCCESS; reVal = CI_SUCCESS;
} }
} }
if (CI_SUCCESS == reVal)
{/*防护道岔封锁状态检查*/
devId = 0u; /*设备ID*/
devState = 0u; /*设备状态*/
reVal = LogicSecRltvPrtctSwFlockCheck(logSectionId, &devId, &devState);/*封锁检查*/
}
if (CI_SUCCESS == reVal)
{/*防护道岔位置检查*/
devId = 0u; /*设备ID*/
devState = 0u; /*设备状态*/
reVal = LogicSecRltvPrtctSwPosCheck(logSectionId, &devId, &devState);/*位置检查*/
}
} }
else else
{ {
@@ -6767,10 +6780,17 @@ UINT8 JumpLockDriveSwitch(const UINT16 axisSecId)
AxisSwitchStruct* pRouteSwitchStru = NULL; /*道岔数据结构指针*/ AxisSwitchStruct* pRouteSwitchStru = NULL; /*道岔数据结构指针*/
UINT8 innerSwitchRetVal = CI_ERROR; /*检查计轴区段内道岔是否可被驱动的结果*/ UINT8 innerSwitchRetVal = CI_ERROR; /*检查计轴区段内道岔是否可被驱动的结果*/
AxisSwitchStruct* pProtectSwitchStru = NULL; /*防护道岔数据结构指针*/
UINT8 protectSwitchSum = 0u;
switchSum = GetAxisSwitchSum(axisSecId); switchSum = GetAxisSwitchSum(axisSecId);
pRouteSwitchStru = GetAxisSwitchIdStru(axisSecId); pRouteSwitchStru = GetAxisSwitchIdStru(axisSecId);
if((0u == axisSecId) || (axisSecId >= AXIS_SECTION_SUM_MAX)) protectSwitchSum = GetAxisSecRelateProSwSum(axisSecId);
pProtectSwitchStru = GetAxisSecRelateProSwStru(axisSecId);
if((0u == axisSecId) || (axisSecId >= AXIS_SECTION_SUM_MAX)||(NULL == pRouteSwitchStru) || (NULL == pProtectSwitchStru))
{ {
innerSwitchRetVal = CI_ERROR; innerSwitchRetVal = CI_ERROR;
} }
@@ -6798,6 +6818,32 @@ UINT8 JumpLockDriveSwitch(const UINT16 axisSecId)
break; break;
} }
} }
if (innerSwitchRetVal == CI_SUCCESS)
{
/* 单操相反位置取消驱动检查 */
for (ii = 0u; ii < protectSwitchSum; ii++)
{
switchId = pProtectSwitchStru[ii].SwitchId;
switchExpPosition = pProtectSwitchStru[ii].SwitchPosition;
switchDancaoPosition = GetSwitchDanCaoPostition(switchId);
if ((SWITCH_POSITION_INVALID == switchDancaoPosition)
||
(switchDancaoPosition == switchExpPosition))
{/*单操无效 或者 单操位置与动作位置一样*/
innerSwitchRetVal = CI_SUCCESS;
}
else
{
/*单操到相反位置取消道岔的驱动*/
innerSwitchRetVal = CI_ERROR;
break;
}
}
}
if(innerSwitchRetVal == CI_SUCCESS) if(innerSwitchRetVal == CI_SUCCESS)
{ {
@@ -6831,20 +6877,35 @@ void AxisSecDrvInnerSwitch(const UINT16 axisSecId, const UINT8 DrivFlag)
UINT8 ii = 0u; /*循环变量*/ UINT8 ii = 0u; /*循环变量*/
UINT8 funRtn = CI_ERROR; UINT8 funRtn = CI_ERROR;
AxisSwitchStruct* pProtectSwitchStru = NULL; /*防护道岔数据结构指针*/
UINT8 protectSwitchSum = 0u;
switchSum = GetAxisSwitchSum(axisSecId); /*获取计轴区段道岔数目*/ switchSum = GetAxisSwitchSum(axisSecId); /*获取计轴区段道岔数目*/
pAxisSecSwitchStru = GetAxisSwitchIdStru(axisSecId); /*获取计轴区段内道岔数据*/ pAxisSecSwitchStru = GetAxisSwitchIdStru(axisSecId); /*获取计轴区段内道岔数据*/
protectSwitchSum = GetAxisSecRelateProSwSum(axisSecId);
pProtectSwitchStru = GetAxisSecRelateProSwStru(axisSecId);
if(SWITCH_NEED_DRIV_TRUE == DrivFlag) if ((NULL != pAxisSecSwitchStru) && (NULL != pProtectSwitchStru))
{/*需要驱动计轴区段内道岔*/ {
if (SWITCH_NEED_DRIV_TRUE == DrivFlag)
{/*需要驱动计轴区段内道岔*/
for (ii = 0u; ii < switchSum; ii++)
{
switchId = pAxisSecSwitchStru[ii].SwitchId;
switchExpPos = pAxisSecSwitchStru[ii].SwitchPosition;
funRtn = SwitchDriveProcess(switchId, switchExpPos); /*设置计轴区段内道岔的驱动状态为驱动中*/
}
for (ii = 0u; ii < protectSwitchSum; ii++)
{
switchId = pProtectSwitchStru[ii].SwitchId;
switchExpPos = pProtectSwitchStru[ii].SwitchPosition;
(void) SwitchDriveProcess(switchId, switchExpPos); /*设置计轴区段防护道岔的驱动状态为驱动中*/
}
for(ii = 0u; ii < switchSum; ii++)
{
switchId = pAxisSecSwitchStru[ii].SwitchId;
switchExpPos = pAxisSecSwitchStru[ii].SwitchPosition;
funRtn = SwitchDriveProcess(switchId, switchExpPos); /*设置计轴区段内道岔的驱动状态为驱动中*/
} }
} }
} }
@@ -7298,7 +7359,7 @@ UINT8 GetSwitchLogSecLockState(UINT16 switchId, UINT16* logOccOrLockId, UINT8* p
UINT8 retValue = CI_ERROR; UINT8 retValue = CI_ERROR;
UINT8 chLogSecLogLockState = 0U; /*逻辑区段逻辑锁闭状态*/ UINT8 chLogSecLogLockState = 0U; /*逻辑区段逻辑锁闭状态*/
UINT8 cLockBelongLogicRouteNum = 0U; /*逻辑区段逻辑锁闭所属逻辑进路数量*/ UINT8 cLockBelongLogicRouteNum = 0U; /*逻辑区段逻辑锁闭所属逻辑进路数量*/
UINT8 chLogSecJumpLockState = 0U;
/*获取道岔关联逻辑区段信息*/ /*获取道岔关联逻辑区段信息*/
logSecSum = GetSwitchLogSecSum(switchId); logSecSum = GetSwitchLogSecSum(switchId);
logSecBuf = GetSwitchLogSecBuf(switchId); logSecBuf = GetSwitchLogSecBuf(switchId);
@@ -7322,8 +7383,9 @@ UINT8 GetSwitchLogSecLockState(UINT16 switchId, UINT16* logOccOrLockId, UINT8* p
/*检查逻辑区段逻辑锁闭状态*/ /*检查逻辑区段逻辑锁闭状态*/
chLogSecLogLockState = GetLogSecLogLockState(logSecBuf[i]); chLogSecLogLockState = GetLogSecLogLockState(logSecBuf[i]);
cLockBelongLogicRouteNum = GetLogSecLockBelLogRouteSum(logSecBuf[i]); cLockBelongLogicRouteNum = GetLogSecLockBelLogRouteSum(logSecBuf[i]);
chLogSecJumpLockState = GetLogSecJumpLockState(logSecBuf[i]);
if ((LOG_SECTION_LOGLOCK_NO == chLogSecLogLockState) && (0U == cLockBelongLogicRouteNum)) if ((LOG_SECTION_LOGLOCK_NO == chLogSecLogLockState) && (0U == cLockBelongLogicRouteNum)&&(LOGIC_SECTION_JUMP_LOCK_NO== chLogSecJumpLockState))
{ {
retValue = CI_SUCCESS; retValue = CI_SUCCESS;
} }
@@ -11591,4 +11653,48 @@ UINT8 GetLocalVirCiType(UINT8 chVirCiId)
} }
return ret; return ret;
}
/*
*
*
* ZC通信正常返回成功
* Created :LYJ
*/
UINT8 CheckLocalCiLSXSStata(void)
{
UINT8 cLocalCiId = 0U;
UINT8 chRet = 0U;
UINT8 chVirCINum = 0U;
UINT8 i = 0U;
UINT8 chXiansuState = 0U;
UINT8 chVirtualCIid = 0U;
UINT8 chTsrSureFlag = 0U;
cLocalCiId = GetSystemParaLocalCiId();
chVirCINum = GetVirtualCINum();
chTsrSureFlag = GetTsrSureFlag(); /*获取临时限速确认标志*/
if (CI_TSR_SURE_YES == chTsrSureFlag)
{
chRet = CI_SUCCESS;
}
else
{
/*临时限速未确认,判断是否做了限速确认*/
for (i = 0U; i < chVirCINum; i++)
{
chVirtualCIid = GetVirtualCIid(i);
chXiansuState = GetVirCILabourCancelLSXianSta(chVirtualCIid);
if ((LINSHIXIANSU_COMM_GOOD_STATE == chXiansuState) || (LINSHIXIANSU_LABOURCANCLE_YES_STATE == chXiansuState))
{
chRet = CI_SUCCESS;
}
else
{
chRet = CI_ERROR;
break;
}
}
}
return chRet;
} }
@@ -72,8 +72,13 @@ typedef struct S_AreaSnowInfoStruct
* 其他联锁条件状态定义 * 其他联锁条件状态定义
*--------------------------------------------------------------------------*/ *--------------------------------------------------------------------------*/
/* 其他联锁条件检查配置状态相关定义 */ /* 其他联锁条件检查配置状态相关定义 */
#define LOCAL_AREA_SNOW_SUM_MAX ((UINT8)20) /*本控区及相邻控区发送的区间雨雪站台数量*/ #define LOCAL_AREA_SNOW_SUM_MAX ((UINT8)20) /*本控区及相邻控区发送的区间雨雪站台数量*/
#define ALL_AREA_SNOW_SUM_MAX ((UINT8)254) /*TMC发送的全线区间雨雪站台数量*/ #define ALL_AREA_SNOW_SUM_MAX ((UINT8)254) /*TMC发送的全线区间雨雪站台数量*/
#define ALL_CBTC_CROSS_SUM_MAX ((UINT8)253) /*CBTC跨压最大数量*/
#define ALL_TACS_CROSS_SUM_MAX ((UINT8)253) /*TACS跨压最大数量*/
#define CROSS_SIGNAL_ID_MAX ((UINT8)1499) /*跨压信号机ID最大值*/
#define CBTC_CROSS_ID_MAX ((UINT8)253) /*CBTC跨压最大列车ID*/
#define TACS_CROSS_ID_MAX ((UINT8)253) /*TACS跨压最大列车ID*/
/* 1 信号机 /* 1 信号机
开放0x55 开放0x55
@@ -1975,4 +1980,12 @@ void SetLocalSnowModelCC(UINT8 setmodle);
add by mpt 20260104 add by mpt 20260104
*/ */
UINT8 GetLocalVirCiType(UINT8 chVirCiId); UINT8 GetLocalVirCiType(UINT8 chVirCiId);
/*
* 功能描述:判断本联锁临时限速状态
* 参数说明:无
* 返 回 值:临时限速有效返回失败,清除或与ZC通信正常返回成功
* Created :LYJ
*/
UINT8 CheckLocalCiLSXSStata(void);
#endif #endif
@@ -1529,7 +1529,7 @@ UINT8 elm_PrepareEnvelopeIsSelf(IN const EnvelopeStruct* ptemp)
/** 在一个OC*/ /** 在一个OC*/
ret = ELM_BELONG_OWNER; ret = ELM_BELONG_OWNER;
} }
else if((localOCid != pointABelongOcid) && (localOCid != pointBBelongOcid)) else if ((localOCid != pointABelongOcid) && (localOCid != pointBBelongOcid))
{ {
/** 不在同一OC*/ /** 不在同一OC*/
ret = ELM_BELONG_OTHER; ret = ELM_BELONG_OTHER;
File diff suppressed because it is too large Load Diff
+71 -4
View File
@@ -328,12 +328,17 @@ void OcSwitchDeviceOutput(void);
UINT8 GetOcSignalColor(UINT16 signalId); UINT8 GetOcSignalColor(UINT16 signalId);
/* /*
* 功能描述: 获取OC道岔设备颜色 * 功能描述: 获取OC道岔设备状态
* 参数说明: * 参数说明:
UINT16 signalId:信号机id UINT16 switchId:道岔id
* 返回值 void UINT8 mainControlOCId 主控OCId
* 返回值
* ((UINT8)0x01) 道岔定位
* ((UINT8)0x02) 道岔反位
* ((UINT8)0x04) 道岔四开
* ((UINT8)0x08) 道岔移动
*/ */
UINT8 GetOcSwitchState(UINT16 switchId); UINT8 GetOcSwitchState(UINT16 switchId, UINT8 mainControlOCId);
/* /*
* 功能描述: 间隙探测脉冲接口方式启动驱动处理 * 功能描述: 间隙探测脉冲接口方式启动驱动处理
@@ -1136,6 +1141,68 @@ UINT8 PsdIbpRelToDevStaProc(const UINT16 wPsdId);
*/ */
void OnePlatEsbAndCutBtnProc(void); void OnePlatEsbAndCutBtnProc(void);
/*
* 功能描述:取消当前未异常打开的站台门的异常状态
* 参数说明: const UINT16 doorId,屏蔽门ID
* 返回值 :无
*Create fan 2026.03.26
*/
void CancelPsdExceptState(UINT16 doorId);
/*
* 功能描述: 设置道岔的每一个OC的主控状态
* 参数说明:
UINT16 switchId:道岔id
* 返回值 void
* add by mpt 20260326
*/
void SetOcSwitchControlState(UINT16 switchId);
/*
* 功能描述: 仲裁当前道岔的主控OC
* 参数说明: UINT16 switchCurSum 道岔总数
* 返回值
* add by mpt 20260326
*/
void SetAllSwitchCurMainControlOC(UINT16 switchCurSum);
/*
* 功能描述: OC道岔主控命令生成处理
* 参数说明: UINT16 switchId 道岔ID
* 返回值 void
*/
void OutSwitchControlModeCmd(UINT16 switchId);
/*
* 功能描述: 道岔无主控时产生主备控命令处理
* 参数说明: UINT16 switchId
* 返回值 void
*/
void SwitchMainControlCmdOut(UINT16 switchId, UINT8 ocId);
/*
* 功能描述: OC道岔主控状态管理
* 参数说明: void
* 返回值 void
*/
void OcSwitchControlModeCmdOutput(void);
/*
* 功能描述: 双主防护模块
* 参数说明: UINT16 switchId 道岔ID
* 返回值 void
*/
void SwitchDoubleMainProtect(UINT16 switchId);
/*
* 功能描述:道岔寻表模块
* 参数说明: UINT16 switchId 道岔ID
* 返回值 void
* add by mpt 20260328
*/
void FindSwitchPostionCmdOut(UINT16 switchId);
/*
* 功能描述:道岔寻表超时检测模块
* 参数说明: UINT16 switchId 道岔ID
* 返回值 void
* add by mpt 20260330
*/
void FindSwitchPostionCmdTimeOutCheck(UINT16 switchId);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
File diff suppressed because it is too large Load Diff
+7
View File
@@ -537,6 +537,13 @@ void SignalTrainCrossPro(void);
* 返回值 void * 返回值 void
*/ */
void ProcessIvocToRCData(void); void ProcessIvocToRCData(void);
/*
* 功能描述: Vobc点连式信息清除
* 参数说明: UINT16 wTrainIdVOBCid
* 返回值 void
* by lyj 20260316
*/
void VobcBlocLinkDataClear(const UINT16 wTrainId);
#ifdef __cplusplus #ifdef __cplusplus
} }
+320 -2
View File
@@ -81,10 +81,12 @@ void OutputDataProcess(void)
UINT8 CiPattern = 0u; UINT8 CiPattern = 0u;
UINT8 chDsnLinSwitch = 0U; UINT8 chDsnLinSwitch = 0U;
UINT8 chTiocSysMode = 0U; UINT8 chTiocSysMode = 0U;
UINT8 chLocalCiOCSswitch = 0U;
chTiocSysMode = GetTiocSystemMode(); chTiocSysMode = GetTiocSystemMode();
chDsnLinSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH); chDsnLinSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH);
CiPattern = GetLocalCiPattern(); CiPattern = GetLocalCiPattern();
chLocalCiOCSswitch = GetLocalCiOCSswitch();
if (REVERSE_MODE_MAIN != chTiocSysMode) if (REVERSE_MODE_MAIN != chTiocSysMode)
{ {
@@ -118,6 +120,12 @@ void OutputDataProcess(void)
/*道岔输出处理*/ /*道岔输出处理*/
OcSwitchDeviceOutput(); OcSwitchDeviceOutput();
if (OC_S_ON == chLocalCiOCSswitch)
{/*OCS开关打开*/
/*道岔主控命令和寻表命令输出管理*/
OcSwitchControlModeCmdOutput();
}
/*信号机输出处理*/ /*信号机输出处理*/
OcSignalDeviceOutput(); OcSignalDeviceOutput();
} }
@@ -217,6 +225,9 @@ void OutputDataProcess(void)
/*后备列车发送数据处理*/ /*后备列车发送数据处理*/
VobcBackUpOutputProcess(); VobcBackUpOutputProcess();
/*点连式列车发送数据处理*/
VobcBlocLinkOutputProcess();
/*资源对顶点数据计算*/ /*资源对顶点数据计算*/
(void)ReqAlignmentInfoCalc(); (void)ReqAlignmentInfoCalc();
@@ -441,11 +452,11 @@ UINT8 GetAtsBackInfoParam(const UINT8 functionId,const UINT8 deviceStateType, co
case ETYPE_SIG_CLOSE_OVER_TIME: case ETYPE_SIG_CLOSE_OVER_TIME:
returnValue = CI_BACK_SIG_CLOSE_OT; /*信号机关闭超时*/ returnValue = CI_BACK_SIG_CLOSE_OT; /*信号机关闭超时*/
break; break;
#if 0
case ETYPE_SIG_RETURN_OPENED_STATE: case ETYPE_SIG_RETURN_OPENED_STATE:
returnValue = CI_BACK_AS_RETR_ENDSIG_RT_SET;/*以该信号机为终端信号机的折返进路已经办理*/ returnValue = CI_BACK_AS_RETR_ENDSIG_RT_SET;/*以该信号机为终端信号机的折返进路已经办理*/
break; break;
#endif
case ETYPE_SIG_LEAD_ALL_LOCK: case ETYPE_SIG_LEAD_ALL_LOCK:
returnValue = CI_BACK_SIG_LEAD_OPEN_FAIL; /*引导信号开放条件不满足,全站已下发引导总锁*/ returnValue = CI_BACK_SIG_LEAD_OPEN_FAIL; /*引导信号开放条件不满足,全站已下发引导总锁*/
break; break;
@@ -3538,6 +3549,7 @@ void NonRouteRelayStateProc(void)
UINT8 interfaceType = FUNC_SWITCH_UNDEF;/*试车线与车辆段接口类型*/ UINT8 interfaceType = FUNC_SWITCH_UNDEF;/*试车线与车辆段接口类型*/
UINT8 i = 0u; UINT8 i = 0u;
UINT16 agreeTryTrainRelayId = 0u;/*同意试车继电器ID*/ UINT16 agreeTryTrainRelayId = 0u;/*同意试车继电器ID*/
UINT16 wColWaysideTryTrainIndRelayId = 0u;/*轨旁试车指示器继电器ID*/
NonRouteDataStruct* pNonRoute = NULL; NonRouteDataStruct* pNonRoute = NULL;
UINT8 localCiId = 0U; /*本联锁ID*/ UINT8 localCiId = 0U; /*本联锁ID*/
UINT8 nonRouteBelongCiId = 0U; /*非进路所属联锁ID*/ UINT8 nonRouteBelongCiId = 0U; /*非进路所属联锁ID*/
@@ -3564,6 +3576,7 @@ void NonRouteRelayStateProc(void)
{ /*试信号模式且试车线与车辆段采用继电器接口*/ { /*试信号模式且试车线与车辆段采用继电器接口*/
agreeTryTrainRelayId = GetNonRouteAgreeTryRelayIdById(pNonRoute->NonRouteId); agreeTryTrainRelayId = GetNonRouteAgreeTryRelayIdById(pNonRoute->NonRouteId);
(void)SetRelayDriveState(agreeTryTrainRelayId, RELAY_DRIVE_STATE_UP); /*设置同意试车继电器吸起*/ (void)SetRelayDriveState(agreeTryTrainRelayId, RELAY_DRIVE_STATE_UP); /*设置同意试车继电器吸起*/
} }
else if ((NONROUTE_RUN_MODE_APPLY == pNonRoute->RunMode) && (SCX_CLD_INTERFACE_COMM == interfaceType)) else if ((NONROUTE_RUN_MODE_APPLY == pNonRoute->RunMode) && (SCX_CLD_INTERFACE_COMM == interfaceType))
{/*试信号模式且试车线与车辆段采用通信接口*/ {/*试信号模式且试车线与车辆段采用通信接口*/
@@ -3577,6 +3590,17 @@ void NonRouteRelayStateProc(void)
{ {
/*不处理*/ /*不处理*/
} }
wColWaysideTryTrainIndRelayId = GetWaysideTryTrainIndRelayId(pNonRoute->NonRouteId);
if (0 != wColWaysideTryTrainIndRelayId)
{
/*设置轨旁试车指示器继电器吸起*/
(void)SetRelayDriveState(wColWaysideTryTrainIndRelayId, RELAY_DRIVE_STATE_UP);
}
else
{
/*不处理*/
}
} }
else else
{/*车辆段非进路不是开放状态时,发送试车线不同意试车(继电接口:驱同意试车继电器落下;串口和网口:发送同意试车无效状态)*/ {/*车辆段非进路不是开放状态时,发送试车线不同意试车(继电接口:驱同意试车继电器落下;串口和网口:发送同意试车无效状态)*/
@@ -3586,6 +3610,7 @@ void NonRouteRelayStateProc(void)
/*驱动非进路同意试车继电器落下 非进路同意试车继电器常态落下,相当于恢复默认态*/ /*驱动非进路同意试车继电器落下 非进路同意试车继电器常态落下,相当于恢复默认态*/
agreeTryTrainRelayId = GetNonRouteAgreeTryRelayIdById(pNonRoute->NonRouteId); agreeTryTrainRelayId = GetNonRouteAgreeTryRelayIdById(pNonRoute->NonRouteId);
(void)SetRelayDriveState(agreeTryTrainRelayId, RELAY_DRIVE_STATE_DOWN); (void)SetRelayDriveState(agreeTryTrainRelayId, RELAY_DRIVE_STATE_DOWN);
} }
else if ((SCX_CLD_INTERFACE_COMM == interfaceType) || (SCX_CLD_SERIAL_PORT_COMM == interfaceType)) else if ((SCX_CLD_INTERFACE_COMM == interfaceType) || (SCX_CLD_SERIAL_PORT_COMM == interfaceType))
{ {
@@ -3595,6 +3620,16 @@ void NonRouteRelayStateProc(void)
{ {
; /*不处理*/ ; /*不处理*/
} }
wColWaysideTryTrainIndRelayId = GetWaysideTryTrainIndRelayId(pNonRoute->NonRouteId);
if (0 != wColWaysideTryTrainIndRelayId)
{
/*设置轨旁试车指示器继电器落下*/
(void)SetRelayDriveState(wColWaysideTryTrainIndRelayId, RELAY_DRIVE_STATE_DOWN);
}
else
{
/*不处理*/
}
} }
break; break;
@@ -5722,6 +5757,8 @@ void VobcBackUpOutputProcess(void)
UINT8 chBackUpValid = 0U;/*备用通信有效标志*/ UINT8 chBackUpValid = 0U;/*备用通信有效标志*/
UINT8 cRcWorkMode = 0U; UINT8 cRcWorkMode = 0U;
cRcWorkMode = GetLocalRcWorkMode();
for (ii = 0U; ii < TRAIN_SUM_MAX; ii++) for (ii = 0U; ii < TRAIN_SUM_MAX; ii++)
{ {
wTrainId = GetTrainId(ii); wTrainId = GetTrainId(ii);
@@ -8629,4 +8666,285 @@ void SetSCOverIndicator(const UINT16 wIndicatorId)
{ {
SetIndicatorState(wIndicatorId, INDICATOR_SHOW_SC_NO); /*设置申结束试车指示灯无效*/ SetIndicatorState(wIndicatorId, INDICATOR_SHOW_SC_NO); /*设置申结束试车指示灯无效*/
} }
}
/*
*
* void
*
* by lyj 20260314
*/
void VobcBlocLinkOutputProcess(void)
{
UINT16 wTrainId = 0U; /*列车ID*/
UINT8 chXiansuState = 0U; /*临时限速状态*/
UINT8 chlineIdentity = 0U; /*线路标识*/
UINT8 ii = 0U; /*循环变量*/
UINT8 chResult = 0U; /*临时承接变量*/
/*目前仅互联互通线路具备点连式接口*/
chlineIdentity = GetCiFunctionSwitchConfig(VOBC_INTERFACE_IDENTITY); /*获取线路标识*/
if (LINE_HLHT == chlineIdentity)
{
/*限速确认之后或者限速清除之后*/
chXiansuState = CheckLocalCiLSXSStata();
if (CI_SUCCESS == chXiansuState)
{
for (ii = 0U; ii < TRAIN_SUM_MAX; ii++)
{
wTrainId = GetTrainId(ii);
wTrainId = wTrainId & 0x00ffU;
/*先清除要发送列车的点连式信息,然后重新计算*/
ClearBlocLinkTrainInfo(wTrainId);
/*互联互通线路使用消息剩余有效期来判断CI与VOBC通信是否中断*/
chResult = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_VOBC, (UINT8)wTrainId);
if (CI_SUCCESS == chResult)
{
/*计算列车进路信息*/
chResult = BlocLinkTrainRouteMange(wTrainId);
/*计算列车逻辑区段信息*/
chResult &= BlocLinkTrainLogSecMange(wTrainId);
if (CI_SUCCESS != chResult)
{
/*清除要发送列车的点连式信息*/
ClearBlocLinkTrainInfo(wTrainId);
}
else
{
/*不做处理*/
}
}
else
{
/*不做处理*/
}
}
}
else
{
/*清除要发送列车的点连式信息*/
for (ii = 0U; ii < TRAIN_SUM_MAX; ii++)
{
wTrainId = GetTrainId(ii);
wTrainId = wTrainId & 0x00ffU;
ClearBlocLinkTrainInfo(wTrainId);
}
debug_infor_printf((const)"\nCheckLocalCiLSXSStata ERROR\n");
}
}
else
{
/*不做处理*/
}
}
/*
*
* const UINT16 wTrainId ID
*
* by lyj 20260316
*/
UINT8 BlocLinkTrainRouteMange(const UINT16 wTrainId)
{
UINT8 chRetVal = CI_ERROR;
struct_PathPoint end = { 0U }; /*列车逻辑终点*/
UINT16 wTempLogSecId = 0U; /*车头逻辑区段*/
UINT16 wLogSecRLockRouteId = 0U; /*逻辑区段锁闭所属进路*/
UINT8 chLocalCiId = 0U; /*本机联锁ID*/
UINT16 wRouteEndSigId = 0U; /*进路终端信号机ID*/
UINT8 chSigBelongCiId = 0U; /*信号机所属联锁ID*/
UINT8 chRouteType = 0U; /*进路类型*/
UINT16 wLastSectionId = 0U; /*进路最后一个物理区段*/
UINT16 wValidReturnSigId = 0U; /*有效折返信号机*/
UINT8 ii = 0U;
UINT16 wSigInFirstPhyId = 0U; /*信号机内方物理区段*/
UINT16 wTempRouteId = 0U;
UINT8 chTempRouteState = 0U;
UINT8 chRouteDir = 0U;
UINT8 chTrainDir = 0U;
UINT8 chLogSecLockState = 0U;
if ((0U < wTrainId) && (TRAIN_SUM_MAX > wTrainId))
{
/*车头位置*/
end.wLinkId = GetAblTrainMaxHeadLink(wTrainId);
end.dwOffset = GetAblTrainMaxHeadOffset(wTrainId);
/*判断车头所属逻辑区段是否锁闭*/
wTempLogSecId = GetPointBelongLogSec(end);
wLogSecRLockRouteId = GetLogSecLockBelongRoute(wTempLogSecId);
chLogSecLockState = GetLogSecLockState(wTempLogSecId);
chRouteType = GetRouteType(wLogSecRLockRouteId);
if ((LOG_SECTION_LOCK_NORMAL == chLogSecLockState) && (0U < wLogSecRLockRouteId) && (ROUTE_SUM_MAX > wLogSecRLockRouteId) && (ROUTE_TYPE_DIAOCHE != chRouteType))
{
chRetVal = CI_SUCCESS;
/*记录脚下进路*/
SetBlocLinkRouteData(wTrainId, wLogSecRLockRouteId);
chLocalCiId = GetSystemParaLocalCiId();
for (ii = 0U; ii < (CI_VOBC_ROUTE_MAX -1U); ii++)
{
wRouteEndSigId = GetRouteEndSignalId(wLogSecRLockRouteId);
chSigBelongCiId = GetSignalBelongCiId(wRouteEndSigId);
if (chLocalCiId == chSigBelongCiId)
{
/*进路终端信号机所属联锁是本联锁,继续匹配*/
chRouteType = GetRouteType(wLogSecRLockRouteId);
if (ROUTE_TYPE_RETURN == chRouteType)
{
wLastSectionId = GetRouteLastPhySectionId(wLogSecRLockRouteId); /*获取进路最后一个物理区段*/
wValidReturnSigId = GetValidReturnSinalId(wLogSecRLockRouteId, wLastSectionId); /*有效折返信号机*/
wRouteEndSigId = wValidReturnSigId;
}
else
{
/*直通进路-直接获取终端信号机*/
wRouteEndSigId = GetRouteEndSignalId(wLogSecRLockRouteId);
}
/*进路开放并且不是调车进路*/
wSigInFirstPhyId = GetSignalInFirstLockedPhySecId(wRouteEndSigId);
wTempRouteId = GetPhySecRLockBelongRouteId(wSigInFirstPhyId);
chTempRouteState = GetRouteState(wTempRouteId);
chRouteDir = GetRouteConfigDirection(wTempRouteId);
chTrainDir = GetAblTrainDir(wTrainId);
if (((ROUTE_STATE_YUXIAN_OPEN == chTempRouteState) || (ROUTE_STATE_NEAR_OPEN == chTempRouteState)) && (chRouteDir == chTrainDir) && (ROUTE_TYPE_DIAOCHE != chRouteType))
{
/*进路状态是接近开放或者预先开放(不匹配引导进路);列车换端之后再匹配折出进路*/
SetBlocLinkRouteData(wTrainId, wTempRouteId);
wLogSecRLockRouteId = wTempRouteId;
}
else
{
break;
}
}
else
{
break;
}
}
}
else
{
/*不匹配进路*/
}
}
else
{
/*不处理*/
}
return chRetVal;
}
/*
*
* const UINT16 wTrainId ID
*
* by lyj 20260316
*/
UINT8 BlocLinkTrainLogSecMange(const UINT16 wTrainId)
{
/*计算列车逻辑区段--车脚下以及车头所处进路(往终端信号机)剩下的全部逻辑区段*/
struct_PathPoint start = { 0U }; /*列车逻辑起点*/
struct_PathPoint end = { 0U }; /*列车逻辑终点*/
UINT8 chRetVal = CI_ERROR;
UINT16 wTrainLogSecSum = 0U; /*列车逻辑区段数量*/
UINT16 wTrainLogSecBuf[TRAIN_ABL_LOGSEC_SUM] = { 0U }; /*列车逻辑区段ID*/
UINT16 wTempLogSecId = 0U; /*车头逻辑区段*/
UINT16 wLogSecRLockRouteId = 0U; /*逻辑区段锁闭所属进路*/
UINT16 wRouteLogSectionSum = 0U; /*进路逻辑区段数量*/
UINT16* pRouteLogSectionIdBuf = NULL; /*进路逻辑区段数组*/
UINT16 ii = 0U;
UINT16 jj = 0U;
UINT8 chFlag = 0U; /*开始记录进路的标志*/
/*车尾位置*/
start.wLinkId = GetAblTrainMinTailLink(wTrainId);;
start.dwOffset = GetAblTrainMinTailOffset(wTrainId);
/*车头位置*/
end.wLinkId = GetAblTrainMaxHeadLink(wTrainId);
end.dwOffset = GetAblTrainMaxHeadOffset(wTrainId);
/*获取车脚下逻辑区段*/
chRetVal = GetLogSecBtwTwoPoints(start, end, &wTrainLogSecSum, wTrainLogSecBuf);
if (CI_SUCCESS == chRetVal)
{
/*查车头所在进路的所有逻辑区段*/
wTempLogSecId = GetPointBelongLogSec(end); /*车头逻辑区段*/
wLogSecRLockRouteId = GetLogSecLockBelongRoute(wTempLogSecId); /*逻辑区段锁闭所属进路*/
wRouteLogSectionSum = GetRouteLogSectionSum(wLogSecRLockRouteId); /*进路逻辑区段数量*/
pRouteLogSectionIdBuf = GetRouteLogSectionIdBuf(wLogSecRLockRouteId); /*进路逻辑区段数组*/
if (TRAIN_ABL_LOGSEC_SUM > (wTrainLogSecSum + wRouteLogSectionSum))
{
if (NULL != pRouteLogSectionIdBuf)
{
for (ii = 0U; ii < wRouteLogSectionSum; ii++)
{
/*查进路的所有逻辑区段,查到了车头所在逻辑区段位置,往后开始记录逻辑区段*/
if ((wTempLogSecId == pRouteLogSectionIdBuf[ii]) && (0U == chFlag))
{
chFlag = 1U;
for (jj = 0U; jj < wTrainLogSecSum; jj++)
{
if (wTempLogSecId == wTrainLogSecBuf[jj])
{
break; /*车头已存入,不再存*/
}
}
/*车头未存入,需要存一次*/
if ((jj == wTrainLogSecSum) && (TRAIN_ABL_LOGSEC_SUM > wTrainLogSecSum))
{
wTrainLogSecBuf[wTrainLogSecSum] = pRouteLogSectionIdBuf[ii];
wTrainLogSecSum++;
}
}
else
{
/*继续查找*/
}
/*找到了车头,开始存,车头所在逻辑区段已存入,不再存入*/
if ((1U == chFlag) && (TRAIN_ABL_LOGSEC_SUM > wTrainLogSecSum) && (wTempLogSecId != pRouteLogSectionIdBuf[ii]))
{
wTrainLogSecBuf[wTrainLogSecSum] = pRouteLogSectionIdBuf[ii];
wTrainLogSecSum++;
}
else
{
/*继续查找*/
}
}
SetBlocLinkOccLogSecData(wTrainId, wTrainLogSecSum, wTrainLogSecBuf);
}
else
{
chRetVal = CI_ERROR;
}
}
else
{
chRetVal = CI_ERROR;/*进路逻辑区段超标*/
}
}
else
{
/*不处理*/
}
return chRetVal;
} }
+23
View File
@@ -524,6 +524,29 @@ void SetSCAllowIndicator(const UINT16 wIndicatorId);
* by lyj 20260106 * by lyj 20260106
*/ */
void SetSCOverIndicator(const UINT16 wIndicatorId); void SetSCOverIndicator(const UINT16 wIndicatorId);
/*
* 功能描述: 处理点连式列车发送数据信息
* 参数说明: void
* 返回值
* by lyj 20260314
*/
void VobcBlocLinkOutputProcess(void);
/*
* 功能描述: 处理点连式列车进路信息
* 参数说明: const UINT16 wTrainId 列车ID
* 返回值 计算结果
* by lyj 20260316
*/
UINT8 BlocLinkTrainRouteMange(const UINT16 wTrainId);
/*
* 功能描述: 处理点连式列车逻辑区段信息
* 参数说明: const UINT16 wTrainId 列车ID
* 返回值 计算结果
* by lyj 20260316
*/
UINT8 BlocLinkTrainLogSecMange(const UINT16 wTrainId);
#ifdef __cplusplus #ifdef __cplusplus
} }
@@ -1119,10 +1119,11 @@ UINT8 ReadConfigureData(void)
if (0u == rtnVal) if (0u == rtnVal)
{ {
/*设置试车线与车辆段合设配置*/ /*设置试车线与车辆段合设配置*/
g_ret = SetCldAndScxMergeConfig(); g_ret = (INT16)SetCldAndScxMergeConfig();
if (CI_ERROR == g_ret) if (0 == g_ret)
{ {
debug_infor_printf((const)"SetCldAndScxMergeConfig fail.\r\n"); debug_infor_printf((const)"SetCldAndScxMergeConfig fail.\r\n");
rtnVal = 44u;
} }
} }
+89 -62
View File
@@ -683,6 +683,7 @@ UINT8 InitialSignalData(void)
SignalDataStruCC[signalId].cSleepTrainLightUpFlag = SIGNAL_SLEEP_TRAIN_LIGHTUP_NO; /*初始化休眠车点亮信号机标志无效*/ SignalDataStruCC[signalId].cSleepTrainLightUpFlag = SIGNAL_SLEEP_TRAIN_LIGHTUP_NO; /*初始化休眠车点亮信号机标志无效*/
SignalDataStruCC[signalId].LightExtinctState = SIGNAL_LIGHT_EXTICT_STATE_YES; /*信号机亮灭状态CC(0x55:灭灯,0xaa:亮灯)*/ SignalDataStruCC[signalId].LightExtinctState = SIGNAL_LIGHT_EXTICT_STATE_YES; /*信号机亮灭状态CC(0x55:灭灯,0xaa:亮灯)*/
SignalDataStruCC[signalId].SignalCrossState = SIGNAL_CROSS_STATE_NO; /*通信车跨压通过信号机状态CC(0x55:未跨压,0xaa:跨压)*/ SignalDataStruCC[signalId].SignalCrossState = SIGNAL_CROSS_STATE_NO; /*通信车跨压通过信号机状态CC(0x55:未跨压,0xaa:跨压)*/
SignalDataStruCC[signalId].wCrossTacsTrainId = 0u; /*通信车跨压通过信号机TACS主控列车ID*/
/*初始化ZC发送的信号机动态数据*/ /*初始化ZC发送的信号机动态数据*/
gZcToCiDymDataStru.szSignalDataStruZc[signalId].SignalId = signalId; gZcToCiDymDataStru.szSignalDataStruZc[signalId].SignalId = signalId;
@@ -733,9 +734,11 @@ UINT8 InitialWashMachineData(void)
WashMachineDataStru[washMachinelId].TrainEmergencyStopState = WASHMACHINE_COL_FALUT_YES; WashMachineDataStru[washMachinelId].TrainEmergencyStopState = WASHMACHINE_COL_FALUT_YES;
WashMachineDataStru[washMachinelId].HeadWashAllowState = WASHMACHINE_COL_HEADWASH_NO; WashMachineDataStru[washMachinelId].HeadWashAllowState = WASHMACHINE_COL_HEADWASH_NO;
WashMachineDataStru[washMachinelId].TailWashAllowState = WASHMACHINE_COL_TAILWASH_NO; WashMachineDataStru[washMachinelId].TailWashAllowState = WASHMACHINE_COL_TAILWASH_NO;
WashMachineDataStru[washMachinelId].chCoupingWashAllowState = WASHMACHINE_COL_COUPINGWASH_NO;
WashMachineDataStru[washMachinelId].WashTrainRequestDrvState = WASHMACHINE_DRVSTATE_REQ_FALSE; WashMachineDataStru[washMachinelId].WashTrainRequestDrvState = WASHMACHINE_DRVSTATE_REQ_FALSE;
WashMachineDataStru[washMachinelId].TrainHeadStopSteadyDrvState = WASHMACHINE_HEAD_STEADY_NO; WashMachineDataStru[washMachinelId].TrainHeadStopSteadyDrvState = WASHMACHINE_HEAD_STEADY_NO;
WashMachineDataStru[washMachinelId].TrainTailStopSteadyDrvState = WASHMACHINE_TAIL_STEADY_NO; WashMachineDataStru[washMachinelId].TrainTailStopSteadyDrvState = WASHMACHINE_TAIL_STEADY_NO;
WashMachineDataStru[washMachinelId].chCoupingStopSteadyDrvState = WASHMACHINE_COUPING_STEADY_NO;
WashMachineDataStru[washMachinelId].TrainOutWashTrainPortAllowState = WASHMACHINE_COL_OUT_NO; WashMachineDataStru[washMachinelId].TrainOutWashTrainPortAllowState = WASHMACHINE_COL_OUT_NO;
WashMachineDataStru[washMachinelId].PauseTrainWashRequestDrvState = WASHMACHINE_PAUSE_DRVREQ_FALSE; WashMachineDataStru[washMachinelId].PauseTrainWashRequestDrvState = WASHMACHINE_PAUSE_DRVREQ_FALSE;
WashMachineDataStru[washMachinelId].PaseWashMachineRequesDrvtState = PASS_WASHMACHINE_DRVREQ_FALSE; WashMachineDataStru[washMachinelId].PaseWashMachineRequesDrvtState = PASS_WASHMACHINE_DRVREQ_FALSE;
@@ -787,67 +790,88 @@ UINT8 InitialSwitchData(void)
UINT16 ii = 0u; /*游标*/ UINT16 ii = 0u; /*游标*/
UINT16 jj = 0u; /*游标*/ UINT16 jj = 0u; /*游标*/
UINT8 reVal = CI_ERROR; UINT8 reVal = CI_ERROR;
UINT8 chSwitchIncludeOcNum = 0U;
UINT8 ocId = 0u;
UINT8 kk = 0u;
switchDataSum = GetTotalSwitchCurNum(); /*本联锁和相邻联锁发送给本联锁的道岔总数目*/ switchDataSum = GetTotalSwitchCurNum(); /*本联锁和相邻联锁发送给本联锁的道岔总数目*/
/*数值大于SWITCH_SUM_MAX会返回0*/ /*数值大于SWITCH_SUM_MAX会返回0*/
for (ii = 0u; ii < switchDataSum; ii++) for (ii = 0u; ii < switchDataSum; ii++)
{ {
switchId = GetSwitchId(ii);/*获取配置文件中该索引下的道岔ID*/ switchId = GetSwitchId(ii);/*获取配置文件中该索引下的道岔ID*/
SwitchDataStru[switchId].SwitchId = switchId; SwitchDataStru[switchId].SwitchId = switchId;
SwitchDataStruCC[switchId].SwitchId = switchId; SwitchDataStruCC[switchId].SwitchId = switchId;
SwitchDataStru[switchId].YLockState = SWITCH_LOCK_YINZONG_NO; SwitchDataStru[switchId].YLockState = SWITCH_LOCK_YINZONG_NO;
SwitchDataStru[switchId].LockStatus = SWITCH_LOCK_STATUS_NO; SwitchDataStru[switchId].LockStatus = SWITCH_LOCK_STATUS_NO;
SwitchDataStru[switchId].FLockState = SWITCH_LOCK_FENGSUO_NO; SwitchDataStru[switchId].FLockState = SWITCH_LOCK_FENGSUO_NO;
SwitchDataStru[switchId].SwitchPrePosition = SWITCH_POSITION_SIKAI; SwitchDataStru[switchId].SwitchPrePosition = SWITCH_POSITION_SIKAI;
SwitchDataStru[switchId].SwitchCurPosition = SWITCH_POSITION_SIKAI; SwitchDataStru[switchId].SwitchCurPosition = SWITCH_POSITION_SIKAI;
SwitchDataStru[switchId].SingleSwitchCurPosition = SWITCH_POSITION_SIKAI; SwitchDataStru[switchId].SingleSwitchCurPosition = SWITCH_POSITION_SIKAI;
SwitchDataStru[switchId].SwitchDrivePos = SWITCH_DRIVE_POS_INVALID; SwitchDataStru[switchId].SwitchDrivePos = SWITCH_DRIVE_POS_INVALID;
SwitchDataStru[switchId].SwitchExpDrvPos = SWITCH_DRIVE_POS_INVALID; SwitchDataStru[switchId].SwitchExpDrvPos = SWITCH_DRIVE_POS_INVALID;
SwitchDataStru[switchId].switchPreExpDrvPos = SWITCH_DRIVE_POS_INVALID; SwitchDataStru[switchId].switchPreExpDrvPos = SWITCH_DRIVE_POS_INVALID;
SwitchDataStru[switchId].SwitMoveStartCycNum = 0u; SwitchDataStru[switchId].SwitMoveStartCycNum = 0u;
SwitchDataStru[switchId].SwitDriveStartCycNum = 0u; SwitchDataStru[switchId].SwitDriveStartCycNum = 0u;
SwitchDataStru[switchId].chSwitchDrivedFlag = SWITCH_DRIVED_FLAG_NO; SwitchDataStru[switchId].chSwitchDrivedFlag = SWITCH_DRIVED_FLAG_NO;
SwitchDataStru[switchId].SwitchDanCaoPostition = SWITCH_POSITION_INVALID; SwitchDataStru[switchId].SwitchDanCaoPostition = SWITCH_POSITION_INVALID;
SwitchDataStru[switchId].switchDrivingState = SWIT_DRIV_IDLE_TIME; SwitchDataStru[switchId].switchDrivingState = SWIT_DRIV_IDLE_TIME;
SwitchDataStru[switchId].switchDrivOvtmDrvPos = SWITCH_DRIVE_POS_INVALID; SwitchDataStru[switchId].switchDrivOvtmDrvPos = SWITCH_DRIVE_POS_INVALID;
SwitchDataStru[switchId].switchFaultState = SWITCH_FAULT_STATE_YES; SwitchDataStru[switchId].switchFaultState = SWITCH_FAULT_STATE_YES;
/* zt 删除单轨相关代码 2022-02-15 */ /* zt 删除单轨相关代码 2022-02-15 */
SwitchDataStru[switchId].switchKRState = SWITCH_KERAO_STATE_YES; SwitchDataStru[switchId].switchKRState = SWITCH_KERAO_STATE_YES;
SwitchDataStru[switchId].switchLastValidDrvPosCycleNum = 0u; SwitchDataStru[switchId].switchLastValidDrvPosCycleNum = 0u;
SwitchDataStru[switchId].switchLastValidDrvPos = SWITCH_DRIVE_POS_INVALID; SwitchDataStru[switchId].switchLastValidDrvPos = SWITCH_DRIVE_POS_INVALID;
SwitchDataStru[switchId].UsingBelongOverlapId = 0u; SwitchDataStru[switchId].UsingBelongOverlapId = 0u;
SwitchDataStru[switchId].DFHRelayValidCycNum = 0u; SwitchDataStru[switchId].DFHRelayValidCycNum = 0u;
SwitchDataStru[switchId].SigleDFHRelayValidCycNum = 0u; SwitchDataStru[switchId].SigleDFHRelayValidCycNum = 0u;
SwitchDataStru[switchId].PLockedRouteNum = 0u; SwitchDataStru[switchId].PLockedRouteNum = 0u;
SwitchDataStruCC[switchId].PLockedLogRouteNum = 0u; SwitchDataStruCC[switchId].PLockedLogRouteNum = 0u;
SwitchDataStru[switchId].PLockedOverlapNum = 0u; SwitchDataStru[switchId].PLockedOverlapNum = 0u;
SwitchDataStru[switchId].PLockedNonRouteNum = 0u; SwitchDataStru[switchId].PLockedNonRouteNum = 0u;
SwitchDataStru[switchId].YCRelayValidCycNum = 0u; SwitchDataStru[switchId].YCRelayValidCycNum = 0u;
SwitchDataStru[switchId].SigleYCRelayValidCycNum = 0u; SwitchDataStru[switchId].SigleYCRelayValidCycNum = 0u;
SwitchDataStru[switchId].ConnetSwitchDsState = CONNECT_SWITCH_DANSUO_NO; SwitchDataStru[switchId].ConnetSwitchDsState = CONNECT_SWITCH_DANSUO_NO;
SwitchDataStru[switchId].SwitchByPassState = SWITCH_BYPASS_NO; SwitchDataStru[switchId].SwitchByPassState = SWITCH_BYPASS_NO;
SwitchDataStru[switchId].SwitchBypassStartCycNum = 0u; SwitchDataStru[switchId].SwitchBypassStartCycNum = 0u;
SwitchDataStru[switchId].chSwitchJichaState = 0U; SwitchDataStru[switchId].chSwitchJichaState = 0U;
SwitchDataStru[switchId].cSwitchUsingState = SWITCH_USING_NO; SwitchDataStru[switchId].cSwitchUsingState = SWITCH_USING_NO;
SwitchDataStru[switchId].SwitchCollTolerateCycNum = 0U; SwitchDataStru[switchId].SwitchCollTolerateCycNum = 0U;
SwitchDataStru[switchId].SwitchColPosition = SWITCH_POSITION_SIKAI; SwitchDataStru[switchId].SwitchColPosition = SWITCH_POSITION_SIKAI;
SwitchDataStru[switchId].switchFaultState = SWITCH_FAULT_STATE_YES; /*置为板卡故障*/ SwitchDataStru[switchId].switchFaultState = SWITCH_FAULT_STATE_YES; /*置为板卡故障*/
/*初始化被防护锁闭的进路、保护区段、非进路数量及数组*/ /*初始化被防护锁闭的进路、保护区段、非进路数量及数组*/
for (jj=0; jj<SWITCH_MAX_PROTECT_LOCKED_NUM;jj++) for (jj=0; jj<SWITCH_MAX_PROTECT_LOCKED_NUM;jj++)
{ {
SwitchDataStru[switchId].PLockedRouteIdArr[jj] = 0u; SwitchDataStru[switchId].PLockedRouteIdArr[jj] = 0u;
SwitchDataStruCC[switchId].PLockedLogRouteIdArr[jj] = 0u; SwitchDataStruCC[switchId].PLockedLogRouteIdArr[jj] = 0u;
SwitchDataStru[switchId].PLockedOverlapIdArr[jj] = 0u; SwitchDataStru[switchId].PLockedOverlapIdArr[jj] = 0u;
SwitchDataStru[switchId].PLockedNonRouteIdArr[jj] = 0u; SwitchDataStru[switchId].PLockedNonRouteIdArr[jj] = 0u;
}
/*初始化道岔转辙机数量、状态*/
SwitchDataStru[switchId].chSwitchIncldeZzjNum = 0u;
for (jj = 0; jj < SWITCH_ZZJ_POWER_STATE_MAX_NUM; jj++)
{
SwitchDataStru[switchId].szSwitchIncldeZzjState[jj] = OC_SWITCH_POSITION_SIKAI;
}
} }
/*初始化道岔转辙机数量、状态*/
SwitchDataStru[switchId].chSwitchIncldeZzjNum = 0u;
for (jj = 0; jj < SWITCH_ZZJ_POWER_STATE_MAX_NUM; jj++)
{
SwitchDataStru[switchId].szSwitchIncldeZzjState[jj] = OC_SWITCH_POSITION_SIKAI;
}
chSwitchIncludeOcNum = GetSwitchIncludeOcNum(switchId);
SwitchDataStru[switchId].chSwitchBelongOcNum = chSwitchIncludeOcNum;
for (jj = 0u; jj < chSwitchIncludeOcNum; jj++)
{/*从静态数据读取OCID赋值给动态数据*/
ocId = GetSwitchIncludeOCId(switchId, jj);
SwitchDataStru[switchId].belongOCData[jj].OcId = ocId;
SwitchDataStru[switchId].belongOCData[jj].OutControlCmd = STANDBY_CONTROL;
SwitchDataStru[switchId].belongOCData[jj].PlusBoxSate = SWITCH_BOX_FAULT;
for (kk = 0u; kk < MAX_OC_SWITCH_INCLUDE_BOARD_NUM; kk++)
{
SwitchDataStru[switchId].belongOCData[jj].BoardStateBuf[kk] = SWITCH_BOARD_FAULT;
}
SwitchDataStru[switchId].belongOCData[jj].controlMode = STANDBY_CONTROL;
SwitchDataStru[switchId].belongOCData[jj].FindCmdStartCycNum = 0u;
SwitchDataStru[switchId].belongOCData[jj].FindPostionCmd = NO_FIND_CMD;
SwitchDataStru[switchId].belongOCData[jj].OutMainControlCmdCycNum = 0u;
}
}
reVal = CI_SUCCESS; reVal = CI_SUCCESS;
return reVal; return reVal;
} }
@@ -1088,7 +1112,8 @@ UINT8 InitialLogicSectionData(void)
LogicSectionDataStru[logicSectionId].chLogicSpksFLockState = LOGIC_SECTION_SPKS_FLOCK_NO;/*仅用于ATS显示;逻辑区段不一定关联SPKS,如果初始化成封锁,无法获取SPKS状态,此逻辑区段会一直为封锁状态*/ LogicSectionDataStru[logicSectionId].chLogicSpksFLockState = LOGIC_SECTION_SPKS_FLOCK_NO;/*仅用于ATS显示;逻辑区段不一定关联SPKS,如果初始化成封锁,无法获取SPKS状态,此逻辑区段会一直为封锁状态*/
LogicSectionDataStru[logicSectionId].chLinShiXianSuSetSpeed = 0U; /*逻辑区段临时限速设置速度值*/ LogicSectionDataStru[logicSectionId].chLinShiXianSuSetSpeed = 0U; /*逻辑区段临时限速设置速度值*/
LogicSectionDataStru[logicSectionId].chLogSecEmergXianSu = LOGSEC_EMERG_XS_SET_NO; /*逻辑区段紧急临时限速*/ LogicSectionDataStru[logicSectionId].chLogSecEmergXianSu = LOGSEC_EMERG_XS_SET_NO; /*逻辑区段紧急临时限速*/
LogicSectionDataStru[logicSectionId].chLogSecCbtcArbState = LGC_SECTION_ARB_NO;
LogicSectionDataStru[logicSectionId].chLogSecPbTacsArbState = LGC_SECTION_ARB_NO;
/*初始化车车结构体成员*/ /*初始化车车结构体成员*/
LogicSectionDataStruCC[logicSectionId].LogicSectionId = logicSectionId; LogicSectionDataStruCC[logicSectionId].LogicSectionId = logicSectionId;
LogicSectionDataStruCC[logicSectionId].chResShareFlag = LOGIC_SECTION_RES_SHARE_NO; LogicSectionDataStruCC[logicSectionId].chResShareFlag = LOGIC_SECTION_RES_SHARE_NO;
@@ -1472,7 +1497,7 @@ UINT8 InitialPsdData(void)
PsdDataStru[psdId].psdOpenErrState = PSD_OPEN_CLOSE_ERROR; PsdDataStru[psdId].psdOpenErrState = PSD_OPEN_CLOSE_ERROR;
PsdDataStru[psdId].psdCloseErrState = PSD_OPEN_CLOSE_ERROR; PsdDataStru[psdId].psdCloseErrState = PSD_OPEN_CLOSE_ERROR;
PsdDataStru[psdId].cPsdExceptOpenState = PSD_EXCEPT_OPEN_YES; /*初始化为PSD异常打开*/ PsdDataStru[psdId].cPsdExceptOpenState = PSD_EXCEPT_NO; /*初始化为PSD异常*/
PsdDataStru[psdId].dwPsdRelayDownCycNum = 0U; /*PSD门关继电器落下起始周期*/ PsdDataStru[psdId].dwPsdRelayDownCycNum = 0U; /*PSD门关继电器落下起始周期*/
PsdDataStru[psdId].JXTCMutualLockFaultState = JXTC_MUTUALLOCKFAULT_NO; PsdDataStru[psdId].JXTCMutualLockFaultState = JXTC_MUTUALLOCKFAULT_NO;
PsdDataStru[psdId].JXTCMutualLockStartCycNum = 0u; PsdDataStru[psdId].JXTCMutualLockStartCycNum = 0u;
@@ -2322,7 +2347,9 @@ void ResetDynamicState(const UINT8 ciId)
LogicSectionDataStruCC[logicSectionId].cRouteLeaveLogFlag = LOGSEC_LEAVE_LOGSEC_REPLY_NO; /*离去区段ABL列车检查不通过*/ LogicSectionDataStruCC[logicSectionId].cRouteLeaveLogFlag = LOGSEC_LEAVE_LOGSEC_REPLY_NO; /*离去区段ABL列车检查不通过*/
LogicSectionDataStru[logicSectionId].chLogicProResUsable = LOGIC_SECTION_PRO_RES_UNUSABLE; LogicSectionDataStru[logicSectionId].chLogicProResUsable = LOGIC_SECTION_PRO_RES_UNUSABLE;
LogicSectionDataStru[logicSectionId].chLogSecEmergXianSu = LOGSEC_EMERG_XS_SET_YES; /*逻辑区段紧急临时限速设置状态*/ LogicSectionDataStru[logicSectionId].chLogSecEmergXianSu = LOGSEC_EMERG_XS_SET_YES; /*逻辑区段紧急临时限速设置状态*/
} LogicSectionDataStru[logicSectionId].chLogSecCbtcArbState = LGC_SECTION_ARB_NO;
LogicSectionDataStru[logicSectionId].chLogSecPbTacsArbState = LGC_SECTION_ARB_NO;
}
else else
{ {
/*不做处理*/ /*不做处理*/
@@ -2374,7 +2401,7 @@ void ResetDynamicState(const UINT8 ciId)
PsdDataStru[devId].PsdState = PSD_STATE_CLOSE; PsdDataStru[devId].PsdState = PSD_STATE_CLOSE;
} }
PsdDataStru[devId].MutualLockRemoveState = PSD_MUTUALLOCK_REMOVE_NO; PsdDataStru[devId].MutualLockRemoveState = PSD_MUTUALLOCK_REMOVE_NO;
PsdDataStru[devId].cPsdExceptOpenState = PSD_EXCEPT_OPEN_YES; /*重置为PSD异常打开*/ PsdDataStru[devId].cPsdExceptOpenState = PSD_EXCEPT_YES; /*重置为PSD异常*/
} }
} }
@@ -2565,7 +2592,7 @@ void ResetDynamicState(const UINT8 ciId)
devId = (ii); devId = (ii);
devLen = (UINT16)sizeof(OverlapDataStruct); devLen = (UINT16)sizeof(OverlapDataStruct);
chOverlapCiId = GetOverlapBelongCiId(devId); chOverlapCiId = GetOverlapBelongCiId(devId);
if((chOverlapCiId == ciId) && (devId > 0u) && (devId < OVERLAP_SUM_MAX)) if((chOverlapCiId == ciId))
{ {
OverlapDataStru[devId].BelongRouteId = 0u; OverlapDataStru[devId].BelongRouteId = 0u;
OverlapDataStru[devId].UnlockStartCycNum = 0u; OverlapDataStru[devId].UnlockStartCycNum = 0u;
@@ -2586,7 +2613,7 @@ void ResetDynamicState(const UINT8 ciId)
OverlapDataStru[devId].chPreLaborUnlockState = PRO_PRE_LABOR_UNLOCK_STATE_NO; OverlapDataStru[devId].chPreLaborUnlockState = PRO_PRE_LABOR_UNLOCK_STATE_NO;
OverlapDataStru[devId].dwAtsLastTimeLockCyc = 0U; OverlapDataStru[devId].dwAtsLastTimeLockCyc = 0U;
} }
else if ((chOverlapCiId == localCi) && (devId > 0U) && (devId < OVERLAP_SUM_MAX)) else if ((chOverlapCiId == localCi))
{ {
cOverlapRelProSwNum = GetOverlapRelatedProtSwitSum(devId); /*获取保护区段关联的防护道岔信息*/ cOverlapRelProSwNum = GetOverlapRelatedProtSwitSum(devId); /*获取保护区段关联的防护道岔信息*/
pOverlapRelProSwStru = GetOverlapRelatedProtSwitStru(devId); pOverlapRelProSwStru = GetOverlapRelatedProtSwitStru(devId);
@@ -3411,7 +3438,7 @@ void ResetLocalRcDynamicState(void)
if (cBelongCiId == cLocalCiId) if (cBelongCiId == cLocalCiId)
{ {
SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); /*设置RC信号机亮灭状态为亮灯*/ SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); /*设置RC信号机亮灭状态为亮灯*/
SetSignalCrossStateCC(wSignalId, SIGNAL_CROSS_STATE_NO); /*设置RC信号机跨压状态为未跨压*/ SetSignalCrossStateCC(wSignalId, SIGNAL_CROSS_STATE_NO, 0u); /*设置RC信号机跨压状态为未跨压*/
} }
else else
{ {
+34
View File
@@ -505,6 +505,7 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
UINT16 wNonAutoReturnCurSum = 0U;/*无人折返按钮当前总数*/ UINT16 wNonAutoReturnCurSum = 0U;/*无人折返按钮当前总数*/
NonAutoReturnDataStruct* pNonAutoReturnData = NULL; /*无人折返数据结构体指针*/ NonAutoReturnDataStruct* pNonAutoReturnData = NULL; /*无人折返数据结构体指针*/
NonAutoReturnDataStructCC* pNonReturnDataStruCC = NULL; /*无人折返数据结构体指针-CC*/ NonAutoReturnDataStructCC* pNonReturnDataStruCC = NULL; /*无人折返数据结构体指针-CC*/
UINT8 chThisOCBoardState = 0U;
/*************************************打印物理区段数据********************************************/ /*************************************打印物理区段数据********************************************/
/*打印区段数据*/ /*打印区段数据*/
@@ -955,6 +956,36 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
outString[outStringLength++] = newSwitchData[deviceId].chSwitchJichaState; /*道岔挤岔状态*/ outString[outStringLength++] = newSwitchData[deviceId].chSwitchJichaState; /*道岔挤岔状态*/
LongToChar(newSwitchData[deviceId].SwitchCollTolerateCycNum, &outString[outStringLength]);/*容忍周期号*/ LongToChar(newSwitchData[deviceId].SwitchCollTolerateCycNum, &outString[outStringLength]);/*容忍周期号*/
outStringLength += 4u; outStringLength += 4u;
LongToChar(newSwitchData[deviceId].SwitchOutputDrvCmdCycNum, &outString[outStringLength]);/*驱动起始周期*/
outStringLength += 4u;
outString[outStringLength++] = newSwitchData[deviceId].mainControlOcId;/*主控OC*/
outString[outStringLength++] = newSwitchData[deviceId].chSwitchBelongOcNum;/*道岔所属OC数*/
for (jj = 0U; jj < newSwitchData[deviceId].chSwitchBelongOcNum; jj++)
{
outString[outStringLength++] = newSwitchData[deviceId].belongOCData[jj].OcId;/*道岔所属OC*/
outString[outStringLength++] = newSwitchData[deviceId].belongOCData[jj].controlMode;/*OC当前主控状态*/
outString[outStringLength++] = newSwitchData[deviceId].belongOCData[jj].OutControlCmd;/*发送OC当前主控命令*/
outString[outStringLength++] = newSwitchData[deviceId].belongOCData[jj].PlusBoxSate;/*插箱状态*/
chThisOCBoardState = GetSwitchThisOCBoardState(deviceId, newSwitchData[deviceId].belongOCData[jj].OcId);
outString[outStringLength++] = chThisOCBoardState;/*双系板卡故障状态*/
LongToChar(newSwitchData[deviceId].belongOCData[jj].OutMainControlCmdCycNum, &outString[outStringLength]);/*升主控命令周期*/
outStringLength += 4u;
outString[outStringLength++] = newSwitchData[deviceId].belongOCData[jj].FindPostionCmd;/*寻表命令*/
LongToChar(newSwitchData[deviceId].belongOCData[jj].FindCmdStartCycNum, &outString[outStringLength]);/*寻表命令起始周期*/
outStringLength += 4u;
}
outString[outStringLength++] = newSwitchData[deviceId].PLockedAxisSecNum;/*被防护锁闭的计轴区段ID*/
for (jj = 0; jj < SWITCH_MAX_PROTECT_LOCKED_NUM; jj++)
{
ShortToChar(newSwitchData[deviceId].PLockedAxisSecIdArr[jj], &outString[outStringLength]);
outStringLength += 2u;
}
} }
} }
else else
@@ -1344,6 +1375,9 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
outStringLength++; outStringLength++;
outString[outStringLength] = pLogicSecDataCC[deviceId].TXOccupyState;/*逻辑区段通信车占用状态CC(0x55-无车或非通信车占用,0xAA-通信车占用)*/ outString[outStringLength] = pLogicSecDataCC[deviceId].TXOccupyState;/*逻辑区段通信车占用状态CC(0x55-无车或非通信车占用,0xAA-通信车占用)*/
outStringLength++; outStringLength++;
outString[outStringLength++] = newLogicSecData[deviceId].chLogSecCbtcArbState;/*逻辑区段CBTC_ARB状态*/
outString[outStringLength++] = newLogicSecData[deviceId].chLogSecPbTacsArbState;/*逻辑区段PB_TACS_ARB状态*/
outString[outStringLength++] = newLogicSecData[deviceId].chArbState;/*逻辑区段ARB状态*/
outString[outStringLength++] = newLogicSecData[deviceId].LogLockState;/*逻辑区段锁闭状态*/ outString[outStringLength++] = newLogicSecData[deviceId].LogLockState;/*逻辑区段锁闭状态*/
outString[outStringLength++] = newLogicSecData[deviceId].LogLockDir;/*逻辑区段锁闭方向*/ outString[outStringLength++] = newLogicSecData[deviceId].LogLockDir;/*逻辑区段锁闭方向*/
outString[outStringLength++] = pLogicSecDataCC[deviceId].chResShareFlag;/*逻辑区段共享标志 0x55共享 0xAA非共享*/ outString[outStringLength++] = pLogicSecDataCC[deviceId].chResShareFlag;/*逻辑区段共享标志 0x55共享 0xAA非共享*/
@@ -595,7 +595,7 @@ void SetRouteRelProSwitchLockSta(const UINT16 routeId, const UINT8 lockCommand)
cSwitchCurPos = GetSwitchCurPosition(protectSwitchId); cSwitchCurPos = GetSwitchCurPosition(protectSwitchId);
cFuncRet = checkSwtLastValDrvPosStayorNot(protectSwitchId, routeProtectSwitchStru[ii].ProtectPosition); cFuncRet = checkSwtLastValDrvPosStayorNot(protectSwitchId, routeProtectSwitchStru[ii].ProtectPosition);
if ((SWITCH_LOCK_PROTECT_CANCEL == lockCommand) if ((SWITCH_LOCK_PROTECT_CANCEL == lockCommand)
|| ((SWITCH_LOCK_PROTECT_SET == lockCommand) && (cSwitchCurPos == routeProtectSwitchStru[ii].ProtectPosition) && (CI_SUCCESS == cFuncRet))) || ((cSwitchCurPos == routeProtectSwitchStru[ii].ProtectPosition) && (CI_SUCCESS == cFuncRet)))
{ {
SetSwitchLockStatus(SWITCH_PLOCKTYPE_ROUTE, routeId, protectSwitchId, lockCommand); /*设置道岔防护锁闭状态*/ SetSwitchLockStatus(SWITCH_PLOCKTYPE_ROUTE, routeId, protectSwitchId, lockCommand); /*设置道岔防护锁闭状态*/
/*RC 13.0.0 修:不检查防护道岔中双动道岔另一端*/ /*RC 13.0.0 修:不检查防护道岔中双动道岔另一端*/
@@ -16,7 +16,6 @@
#include "TrainDataManage.h" #include "TrainDataManage.h"
#include "HLHTHeadContexManage.h" #include "HLHTHeadContexManage.h"
#include "TrainOnAcManage.h" #include "TrainOnAcManage.h"
#include "TrainDataManage.h"
#include "SectionStateProcess_define.h" #include "SectionStateProcess_define.h"
#include "DynamicRouteDataManage.h" #include "DynamicRouteDataManage.h"
#include "LogicalRouteDataManage.h" #include "LogicalRouteDataManage.h"
@@ -2014,8 +2013,10 @@ void RouteNearLockManage(const UINT16 routeId)
UINT16 returnSecId = 0U; /*折返区段*/ UINT16 returnSecId = 0U; /*折返区段*/
UINT8 localCiType = 0U;/*联锁类型*/ UINT8 localCiType = 0U;/*联锁类型*/
UINT8 cFuncRetVal = CI_ERROR; UINT8 cFuncRetVal = CI_ERROR;
UINT8 chRouteBelongVirCiId = 0U;
localCiType = GetLocalCiType(); chRouteBelongVirCiId = GetRouteBelongVirCiId(routeId);
localCiType = GetLocalVirCiType(chRouteBelongVirCiId);
/*获取进路始端信号机ID*/ /*获取进路始端信号机ID*/
startSignalId = GetRouteStartSignalId(routeId); startSignalId = GetRouteStartSignalId(routeId);
autoSigRouteState = GetRouteAutoSigSetState(routeId); /*获取自动信号进路状态*/ autoSigRouteState = GetRouteAutoSigSetState(routeId); /*获取自动信号进路状态*/
@@ -2141,6 +2142,7 @@ void RouteNearLockManage(const UINT16 routeId)
validReturnSigId = GetValidReturnSinalId(routeId, logBelongPhyId); validReturnSigId = GetValidReturnSinalId(routeId, logBelongPhyId);
returnSecId = GetSignalOutFirstPhySecId(validReturnSigId); returnSecId = GetSignalOutFirstPhySecId(validReturnSigId);
/*逻辑区段当前CT占用,或者之前CT占用,当前空闲 且逻辑区段不是道岔区段,且非折返进路或为折返进路但非折返轨*/ /*逻辑区段当前CT占用,或者之前CT占用,当前空闲 且逻辑区段不是道岔区段,且非折返进路或为折返进路但非折返轨*/
if (((LOGICSECTION_OCCUPY_CT == logCurOccupyState) || if (((LOGICSECTION_OCCUPY_CT == logCurOccupyState) ||
((LOGICSECTION_OCCUPY_NO == logCurOccupyState) && (LOGICSECTION_OCCUPY_CT == logPreOccupyState))) ((LOGICSECTION_OCCUPY_NO == logCurOccupyState) && (LOGICSECTION_OCCUPY_CT == logPreOccupyState)))
@@ -2254,7 +2256,6 @@ void RouteNearLockManage(const UINT16 routeId)
*/ */
void RouteDelayUnlockManage(const UINT16 routeId) void RouteDelayUnlockManage(const UINT16 routeId)
{ {
UINT8 routeLevel = 0u; /*进路监督级别*/
UINT16 startSignalId = 0u; /*进路始端信号机ID*/ UINT16 startSignalId = 0u; /*进路始端信号机ID*/
UINT32 delayStartCycNum = 0u; /*延时解锁起始周期号*/ UINT32 delayStartCycNum = 0u; /*延时解锁起始周期号*/
UINT32 delayTotalCycSum = 0u; /*延时解锁总周期数*/ UINT32 delayTotalCycSum = 0u; /*延时解锁总周期数*/
@@ -2267,13 +2268,10 @@ void RouteDelayUnlockManage(const UINT16 routeId)
UINT16 wTrainId = 0u; UINT16 wTrainId = 0u;
UINT16 wLastTrainId = 0u; UINT16 wLastTrainId = 0u;
UINT32 curCycle = 0u; UINT32 curCycle = 0u;
UINT8 chRouteState = 0u;
/*获取进路动态字段*/ /*获取进路动态字段*/
routeLevel = GetRouteLevel(routeId); /*获取进路监督级别*/
startSignalId = GetRouteStartSignalId(routeId); /*获取进路始端信号机ID*/ startSignalId = GetRouteStartSignalId(routeId); /*获取进路始端信号机ID*/
curCycle = Get2oo2CurCycleNum(); curCycle = Get2oo2CurCycleNum();
chRouteState = GetRouteType(routeId);
(void)DriveSignalClose(startSignalId); /*驱动信号关闭*/ (void)DriveSignalClose(startSignalId); /*驱动信号关闭*/
@@ -4515,7 +4513,10 @@ void RouteZongRenJieProc(const UINT16 routeId)
if (CI_SUCCESS == checkResultSecAndQXZC) if (CI_SUCCESS == checkResultSecAndQXZC)
{ /*所有区段空闲或最后一个区段占用*/ { /*所有区段空闲或最后一个区段占用*/
SetRouteStateManage(routeId, ROUTE_STATE_IDLE); /*-->设置进路空闲*/ /*总人解办理*/
SetRouteStateManage(routeId, ROUTE_STATE_DELAY_UNLOCK); /*-->设置进路延时解锁*/
/*延时后全部解锁*/
SetRouteZongRenJieDelayType(routeId, ROUTE_ZRJ_DELAY_TYPE_IDLE);/*延时结束后所有区段解锁*/
} }
else if ((ROUTE_TRAIN_ENTER_FLAG_NO == trainEnterSta) && (CI_ERROR_QXZC != checkResultSecAndQXZC)) else if ((ROUTE_TRAIN_ENTER_FLAG_NO == trainEnterSta) && (CI_ERROR_QXZC != checkResultSecAndQXZC))
{/*当总人解引导进路时,有取消照查继电器且未吸起则不能解锁引导进路*/ {/*当总人解引导进路时,有取消照查继电器且未吸起则不能解锁引导进路*/
@@ -4904,6 +4905,7 @@ UINT8 RouteLTrainEnter(const UINT16 routeId)
UINT8 chRCMode = 0u; UINT8 chRCMode = 0u;
UINT8 cRoutePreLevel = 0U; /*进路之前级别*/ UINT8 cRoutePreLevel = 0U; /*进路之前级别*/
UINT8 chLocalCiType = 0U;/*联锁类型*/ UINT8 chLocalCiType = 0U;/*联锁类型*/
UINT8 chRouteBelongVirCiId = 0U;
/* 联锁逻辑检查 */ /* 联锁逻辑检查 */
@@ -5048,7 +5050,8 @@ UINT8 RouteLTrainEnter(const UINT16 routeId)
chDevState = GetPhySecCurMergeState(inPhySecId); chDevState = GetPhySecCurMergeState(inPhySecId);
if (SECTION_OCCUPY_YES == chDevState) if (SECTION_OCCUPY_YES == chDevState)
{ /*内方区段占用,进路为CBTC非车辆段时,考虑为列车高速跨压,只需要考虑内方第一区段的占压,不用管外方*/ { /*内方区段占用,进路为CBTC非车辆段时,考虑为列车高速跨压,只需要考虑内方第一区段的占压,不用管外方*/
chLocalCiType = GetLocalCiType(); chRouteBelongVirCiId = GetRouteBelongVirCiId(routeId);
chLocalCiType = GetLocalVirCiType(chRouteBelongVirCiId);
if ((ROUTE_LEVEL_CBTC == routeLevel) && (CI_TYPE_CLD != chLocalCiType)) if ((ROUTE_LEVEL_CBTC == routeLevel) && (CI_TYPE_CLD != chLocalCiType))
{ {
chRetVal = CI_SUCCESS; chRetVal = CI_SUCCESS;
@@ -8368,7 +8371,14 @@ void SetSectionResetLogicManage(const UINT16 phySecId, const UINT8 resetType)
} }
else else
{ {
retValid = GetZFWValidByPhySecId(phySecId); /*获取物理区段计轴总复位继电器状态有效性*/ if (PHYSICAL_SECTION_PRE_RESET_YES != resetType)
{
retValid = GetZFWValidByPhySecId(phySecId); /*计轴复位:检查物理区段计轴总复位继电器状态有效性*/
}
else
{
retValid = CI_SUCCESS;/*计轴预复位不检查总复位继电器*/
}
if (CI_SUCCESS == retValid) /*有效,执行计轴复位功能*/ if (CI_SUCCESS == retValid) /*有效,执行计轴复位功能*/
{ {
dwResetStartCycNum = GetPhySecResetStartCycNum(phySecId); dwResetStartCycNum = GetPhySecResetStartCycNum(phySecId);
@@ -11117,6 +11127,7 @@ void UnlockSwitchLogicManage(void)
UINT8 unlockFlag = 0U;/*解锁标志*/ UINT8 unlockFlag = 0U;/*解锁标志*/
UINT8 funcSwitch = 0U; UINT8 funcSwitch = 0U;
UINT8 chPhySecLogLockState = 0U;/*物理区段逻辑锁闭状态*/ UINT8 chPhySecLogLockState = 0U;/*物理区段逻辑锁闭状态*/
UINT8 chPhySecJumpLockState = 0U;
localCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/ localCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/
funcSwitch = GetCiFunctionSwitchConfig(FUNC_ROUTE_DRV_SWITCH_EARLY); funcSwitch = GetCiFunctionSwitchConfig(FUNC_ROUTE_DRV_SWITCH_EARLY);
@@ -11147,10 +11158,11 @@ void UnlockSwitchLogicManage(void)
phyLockStatus = GetPhySecLockState(hostPhyId);/*获取物理区段锁闭状态*/ phyLockStatus = GetPhySecLockState(hostPhyId);/*获取物理区段锁闭状态*/
chFuncRet1 = GetSwitchLogSecLockState(hostSwitchId, &wDevId, &chDevState); chFuncRet1 = GetSwitchLogSecLockState(hostSwitchId, &wDevId, &chDevState);
chPhySecLogLockState = PhySecLogLockStateCheck(hostPhyId); chPhySecLogLockState = PhySecLogLockStateCheck(hostPhyId);
chPhySecJumpLockState = GetPhySecJumpLockState(hostPhyId);
if ((PHYSICAL_SECTION_LOCK_NO == phyLockStatus) && (CI_SUCCESS == chFuncRet1) if ((PHYSICAL_SECTION_LOCK_NO == phyLockStatus) && (CI_SUCCESS == chFuncRet1)
&& (LOG_SECTION_LOGLOCK_NO == chPhySecLogLockState)) && (LOG_SECTION_LOGLOCK_NO == chPhySecLogLockState)&&(PHYSICAL_SECTION_JUMP_LOCK_NO == chPhySecJumpLockState))
{/*区段锁闭状态为未锁闭(物理区段未被进路锁,逻辑区段未被进路锁,物理区段未被逻辑进路锁)*/ {/*区段锁闭状态为未锁闭(物理区段未被进路锁,逻辑区段未被进路锁,物理区段未被逻辑进路锁,未被跳跃锁闭)*/
unlockFlag = 1u; unlockFlag = 1u;
} }
else else
@@ -11413,6 +11425,9 @@ void CheckLogSecJumpLockManage(void)
UINT8 logJumpLockState = LOGIC_SECTION_JUMP_LOCK_NO; UINT8 logJumpLockState = LOGIC_SECTION_JUMP_LOCK_NO;
UINT8 localCi = 0u;/*本联锁*/ UINT8 localCi = 0u;/*本联锁*/
UINT16 logJumpLockTrainId = 0u; UINT16 logJumpLockTrainId = 0u;
UINT16 devId = 0u; /*设备ID*/
UINT8 devState = 0u; /*设备状态*/
UINT8 retVal = CI_ERROR;
localCi = GetSystemParaLocalCiId(); localCi = GetSystemParaLocalCiId();
@@ -11432,8 +11447,19 @@ void CheckLogSecJumpLockManage(void)
checkResult = CheckLogJumpLockApply(logicSecId); checkResult = CheckLogJumpLockApply(logicSecId);
if (CI_SUCCESS == checkResult) if (CI_SUCCESS == checkResult)
{ {
/** 检查条件满足,设置跳跃锁闭允许标志为允许 */ devId = 0u;
SetLogSecJumpLockPermFlag(logicSecId, LOGIC_JUMPUNLOCK_PERMISSIVE_YES); devState = 0u;
retVal = LogicSecRltvPrtctSwLockCheck(logicSecId, &devId, &devState);
if (CI_SUCCESS == retVal)
{
/** 检查条件满足,设置跳跃锁闭允许标志为允许 */
SetLogSecJumpLockPermFlag(logicSecId, LOGIC_JUMPUNLOCK_PERMISSIVE_YES);
}
else
{
/** 检查条件不满足,设置跳跃锁闭允许标志为禁止 */
SetLogSecJumpLockPermFlag(logicSecId, LOGIC_JUMPUNLOCK_PERMISSIVE_NO);
}
} }
else else
{ {
@@ -11488,7 +11514,6 @@ void AxisSecJumpLockLogicManage(void)
UINT8 applyFlag = 0u;/*申请标志*/ UINT8 applyFlag = 0u;/*申请标志*/
UINT8 cancelApplyFlag = 0u;/*取消申请标志*/ UINT8 cancelApplyFlag = 0u;/*取消申请标志*/
UINT16 phyId = 0u;/*物理区段ID*/ UINT16 phyId = 0u;/*物理区段ID*/
UINT8 phyUseState = 0u;/*物理区段征用状态*/
UINT8 jumpLockState = 0u;/*跳跃锁闭状态*/ UINT8 jumpLockState = 0u;/*跳跃锁闭状态*/
UINT8 secBelongCi = 0u;/*区段所属联锁*/ UINT8 secBelongCi = 0u;/*区段所属联锁*/
UINT8 localCi = 0u;/*本联锁*/ UINT8 localCi = 0u;/*本联锁*/
@@ -11501,6 +11526,7 @@ void AxisSecJumpLockLogicManage(void)
UINT32 applyCycle = 0u;/*跳跃锁闭申请周期*/ UINT32 applyCycle = 0u;/*跳跃锁闭申请周期*/
UINT32 curCycle = 0u;/*当前周期号*/ UINT32 curCycle = 0u;/*当前周期号*/
UINT8 chPhySecJmpState = 0U; UINT8 chPhySecJmpState = 0U;
UINT8 chJumpPhySectionUseCheck = 0U;
localCi = GetSystemParaLocalCiId(); localCi = GetSystemParaLocalCiId();
axisSectionDataSum = GetTotalAxisCurNum(); axisSectionDataSum = GetTotalAxisCurNum();
@@ -11516,7 +11542,6 @@ void AxisSecJumpLockLogicManage(void)
jumpLockState = GetAxisJumpLockState(axisSectionId);/*获取跳跃锁闭状态*/ jumpLockState = GetAxisJumpLockState(axisSectionId);/*获取跳跃锁闭状态*/
phyId = GetAxisSecRelativePhySecId(axisSectionId);/*获取相关物理区段ID*/ phyId = GetAxisSecRelativePhySecId(axisSectionId);/*获取相关物理区段ID*/
phyUseState = GetPhySecUseState(phyId);/*获取物理区段征用状态*/
secBelongCi = GetPhySecBelongCiId(phyId); secBelongCi = GetPhySecBelongCiId(phyId);
@@ -11554,10 +11579,12 @@ void AxisSecJumpLockLogicManage(void)
(AXSEC_CANCEL_JUMPLOCK_APPLY_NO == cancelApplyFlag)) (AXSEC_CANCEL_JUMPLOCK_APPLY_NO == cancelApplyFlag))
{/*有跳跃锁闭申请*/ {/*有跳跃锁闭申请*/
if (PHYSICAL_SECTION_USING_NO == phyUseState) chJumpPhySectionUseCheck = JumpPhySectionUseCheck(axisSectionId);
if (CI_SUCCESS == chJumpPhySectionUseCheck)
{/*未征用*/ {/*未征用*/
/*设置征用*/ /*设置征用*/
SetPhySecUseState(phyId, PHYSICAL_SECTION_USING_YES, 0); SetPhySecUseState(phyId, PHYSICAL_SECTION_USING_YES, 0);
SetJumpPhySectionPortectSecUse(phyId, PHYSICAL_SECTION_USING_YES);/*设置物理区段关联防护道岔的区段征用*/
/*转为选排*/ /*转为选排*/
SetAxisJumpLockState(axisSectionId, AXIS_SECTION_JUMPLOCK_STATE_XUANPAI); SetAxisJumpLockState(axisSectionId, AXIS_SECTION_JUMPLOCK_STATE_XUANPAI);
} }
@@ -11583,6 +11610,7 @@ void AxisSecJumpLockLogicManage(void)
(curCycle == applyCycle)) (curCycle == applyCycle))
{/*本周期有跳跃锁闭申请,才设置物理区段跳跃锁闭*/ {/*本周期有跳跃锁闭申请,才设置物理区段跳跃锁闭*/
SetPhySecJumpLockState(phyId, PHYSICAL_SECTION_JUMP_LOCK_YES); SetPhySecJumpLockState(phyId, PHYSICAL_SECTION_JUMP_LOCK_YES);
SetAxisRelProSwitchLockSta(axisSectionId, SWITCH_LOCK_PROTECT_SET);
SetPhySecJumpLockStateToZC(phyId, PHYSICAL_SECTION_JUMP_LOCK_YES); SetPhySecJumpLockStateToZC(phyId, PHYSICAL_SECTION_JUMP_LOCK_YES);
SetAxisInCludeLogJumpLockState(axisSectionId, LOGIC_SECTION_JUMP_LOCK_YES); SetAxisInCludeLogJumpLockState(axisSectionId, LOGIC_SECTION_JUMP_LOCK_YES);
} }
@@ -11603,6 +11631,7 @@ void AxisSecJumpLockLogicManage(void)
(AXSEC_CANCEL_JUMPLOCK_APPLY_YES == cancelApplyFlag)) (AXSEC_CANCEL_JUMPLOCK_APPLY_YES == cancelApplyFlag))
{/*有取消跳跃申请*/ {/*有取消跳跃申请*/
SetAxisJumpLockState(axisSectionId, AXIS_SECTION_JUMPLOCK_STATE_IDLE); SetAxisJumpLockState(axisSectionId, AXIS_SECTION_JUMPLOCK_STATE_IDLE);
SetAxisRelProSwitchLockSta(axisSectionId, SWITCH_LOCK_PROTECT_CANCEL);
} }
} }
break; break;
@@ -11645,12 +11674,14 @@ void AxisJumpLockXuanPaiManage(const UINT16 axisSecId)
{ {
rtVal = LockAxisSecProc(axisSecId);/*跳跃锁闭联锁条件检查*/ rtVal = LockAxisSecProc(axisSecId);/*跳跃锁闭联锁条件检查*/
} }
axisSecSwitDrvOvtmFlag = ChekJumpLockSwitDrivOvtmStat(axisSecId);/*检查计轴区段道岔是否驱动超时*/ axisSecSwitDrvOvtmFlag = ChekJumpLockSwitDrivOvtmStat(axisSecId);/*检查计轴区段关联道岔是否驱动超时*/
if (CI_SUCCESS == rtVal) if (CI_SUCCESS == rtVal)
{/*检查成功*/ {/*检查成功*/
SetAxisJumpLockState(axisSecId, AXIS_SECTION_JUMPLOCK_STATE_LOCK); SetAxisJumpLockState(axisSecId, AXIS_SECTION_JUMPLOCK_STATE_LOCK);
/*设置未征用*/ /*设置未征用*/
SetPhySecUseState(phyId, PHYSICAL_SECTION_USING_NO, 0); SetPhySecUseState(phyId, PHYSICAL_SECTION_USING_NO, 0);
SetJumpPhySectionPortectSecUse(phyId, PHYSICAL_SECTION_USING_NO);/*设置物理区段的防护道岔所在区段取消防护征用*/
} }
else if ((RETURN_LOCK_ERR_SWITPOS == rtVal) && (CI_SUCCESS == axisSecSwitDrvOvtmFlag)) else if ((RETURN_LOCK_ERR_SWITPOS == rtVal) && (CI_SUCCESS == axisSecSwitDrvOvtmFlag))
{/*位置错误可驱动且驱动道岔没有超时*/ {/*位置错误可驱动且驱动道岔没有超时*/
@@ -11661,6 +11692,8 @@ void AxisJumpLockXuanPaiManage(const UINT16 axisSecId)
{ {
/*设置未征用*/ /*设置未征用*/
SetPhySecUseState(phyId, PHYSICAL_SECTION_USING_NO, 0); SetPhySecUseState(phyId, PHYSICAL_SECTION_USING_NO, 0);
SetJumpPhySectionPortectSecUse(phyId, PHYSICAL_SECTION_USING_NO);/*设置物理区段的防护道岔所在区段取消防护征用*/
/*设置计轴区段跳跃状态空闲*/ /*设置计轴区段跳跃状态空闲*/
SetAxisJumpLockState(axisSecId, AXIS_SECTION_JUMPLOCK_STATE_IDLE); SetAxisJumpLockState(axisSecId, AXIS_SECTION_JUMPLOCK_STATE_IDLE);
} }
@@ -11669,6 +11702,8 @@ void AxisJumpLockXuanPaiManage(const UINT16 axisSecId)
{/*其它*/ {/*其它*/
/*设置未征用*/ /*设置未征用*/
SetPhySecUseState(phyId, PHYSICAL_SECTION_USING_NO, 0); SetPhySecUseState(phyId, PHYSICAL_SECTION_USING_NO, 0);
SetJumpPhySectionPortectSecUse(phyId, PHYSICAL_SECTION_USING_NO);/*设置物理区段的防护道岔所在区段取消防护征用*/
/*设置计轴区段跳跃状态空闲*/ /*设置计轴区段跳跃状态空闲*/
SetAxisJumpLockState(axisSecId, AXIS_SECTION_JUMPLOCK_STATE_IDLE); SetAxisJumpLockState(axisSecId, AXIS_SECTION_JUMPLOCK_STATE_IDLE);
} }
@@ -12393,8 +12428,11 @@ void RoutePhyOrLogSecAutoUnlocManage(const UINT16 routeId)
UINT8 chPhyIncSwitchSum = 0U; UINT8 chPhyIncSwitchSum = 0U;
UINT16* pPhySecSwitchId = NULL; UINT16* pPhySecSwitchId = NULL;
UINT8 localCiType = 0U;/*联锁类型*/ UINT8 localCiType = 0U;/*联锁类型*/
UINT8 chRouteBelongVirCiId = 0U;
localCiType = GetLocalCiType();
chRouteBelongVirCiId = GetRouteBelongVirCiId(routeId);
localCiType = GetLocalVirCiType(chRouteBelongVirCiId);
/*获取进路锁闭的第一逻辑区段占用状态*/ /*获取进路锁闭的第一逻辑区段占用状态*/
@@ -12562,7 +12600,6 @@ void LogicSecResManage(void)
startLockState = GetStartLockFlag(); /*获取上电解锁标志*/ startLockState = GetStartLockFlag(); /*获取上电解锁标志*/
startFlockFlag = GetStartFLockFlag(); /*获取上电解封标志*/ startFlockFlag = GetStartFLockFlag(); /*获取上电解封标志*/
if (0u == localCiId) if (0u == localCiId)
{ {
rtVal = CI_ERROR; rtVal = CI_ERROR;
@@ -13730,6 +13767,8 @@ static void TrainTransitmitStatJumpLockProcess(const UINT16 logSectionId, const
/** 清除区段跳跃锁闭延时解锁起始周期号和延时解锁设置标志*/ /** 清除区段跳跃锁闭延时解锁起始周期号和延时解锁设置标志*/
SetLogSecJumpDelayUnlocStartCyc(logSectionId, 0u); SetLogSecJumpDelayUnlocStartCyc(logSectionId, 0u);
SetLogSecJumpDelayUnlockFlag(logSectionId, LOGIC_JUMPUNLOCK_DELAY_SET_NO); SetLogSecJumpDelayUnlockFlag(logSectionId, LOGIC_JUMPUNLOCK_DELAY_SET_NO);
/*取消防护锁闭*/
SetLogSecRelProSwitchLockSta(logSectionId, SWITCH_LOCK_PROTECT_CANCEL);
} }
else else
{ {
@@ -14434,6 +14473,8 @@ void PhySecJumpLockLogicManage(void)
UINT32 dwApplyCycle = 0U;/*跳跃锁闭申请周期号*/ UINT32 dwApplyCycle = 0U;/*跳跃锁闭申请周期号*/
UINT8 chPhySecFLockType = 0U;/*物理区段封锁类型*/ UINT8 chPhySecFLockType = 0U;/*物理区段封锁类型*/
UINT8 chPhySecJempState = 0U;/*物理区段跳跃锁闭状态*/ UINT8 chPhySecJempState = 0U;/*物理区段跳跃锁闭状态*/
UINT16 devId = 0u; /*设备ID*/
UINT8 devState = 0u; /*设备状态*/
wAxisSectionDataSum = GetTotalAxisCurNum(); wAxisSectionDataSum = GetTotalAxisCurNum();
@@ -14457,7 +14498,8 @@ void PhySecJumpLockLogicManage(void)
if ((PHY_SEC_FLOCK_TYPE_NONE == chPhySecFLockType)) if ((PHY_SEC_FLOCK_TYPE_NONE == chPhySecFLockType))
{ {
SetPhySecJumpLockState(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_YES); SetPhySecJumpLockState(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_YES);
SetPhySecJumpLockStateToZC(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_YES); SetAxisRelProSwitchLockSta(wAxisSectionId, SWITCH_LOCK_PROTECT_SET);
/* SetPhySecJumpLockStateToZC(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_YES);当周期先不给ZC发锁闭*/
SetAxisInCludeLogJumpLockState(wAxisSectionId, LOGIC_SECTION_JUMP_LOCK_YES); SetAxisInCludeLogJumpLockState(wAxisSectionId, LOGIC_SECTION_JUMP_LOCK_YES);
} }
else else
@@ -14480,8 +14522,13 @@ void PhySecJumpLockLogicManage(void)
} }
else else
{ /*联锁内部锁闭,当持续检查锁闭条件满足时,再次给ZC发锁闭*/ { /*联锁内部锁闭,当持续检查锁闭条件满足时,再次给ZC发锁闭*/
devId = 0u;
SetPhySecJumpLockStateToZC(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_YES); devState = 0u;
chTempcheck = AxisRelatedProSwitchLockCheck(wAxisSectionId, &devId, &devState);
if (CI_SUCCESS == chTempcheck)
{
SetPhySecJumpLockStateToZC(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_YES);
}
} }
} }
} }
@@ -14490,6 +14537,7 @@ void PhySecJumpLockLogicManage(void)
{/*有取消跳跃申请*/ {/*有取消跳跃申请*/
SetPhySecJumpLockState(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_NO); SetPhySecJumpLockState(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_NO);
SetPhySecJumpLockStateToZC(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_NO); SetPhySecJumpLockStateToZC(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_NO);
SetAxisRelProSwitchLockSta(wAxisSectionId, SWITCH_LOCK_PROTECT_CANCEL);/*取消防护锁闭*/
} }
} }
} }
@@ -15607,7 +15655,7 @@ void SetNormalRouteLogicResUsable(const UINT16 wLogSectionId, const UINT16 wTrai
if ((LOG_SECTION_LOCK_NORMAL == chLogicLockState) if ((LOG_SECTION_LOCK_NORMAL == chLogicLockState)
|| (LOG_SECTION_LOCK_DELAY == chLogicLockState)) || (LOG_SECTION_LOCK_DELAY == chLogicLockState))
{ {
chRouteTrainEnterFlag = dsuTrainMinHeadCrossSignal(wTrainId, wLogicRLockRouteId); chRouteTrainEnterFlag = dsuTrainMinHeadCrossSignal(wTrainId, wLogicRLockRouteId, CI_SUCCESS);
chTrainMaxHeadCross = dsuTrainCrossSignal(wTrainId, wLogicRLockRouteId);/*判断列车大前是否驶入进路*/ chTrainMaxHeadCross = dsuTrainCrossSignal(wTrainId, wLogicRLockRouteId);/*判断列车大前是否驶入进路*/
@@ -3161,14 +3161,14 @@ static UINT8 OtherCiValidErrCheck(UINT16 const routeId)
{ {
if (psdIdBuf[j] == tmpOtherCiDevInfo->DevId) if (psdIdBuf[j] == tmpOtherCiDevInfo->DevId)
{ {
cPsdExceptOpenState = GePsdExceptOpenState(tmpOtherCiDevInfo->DevId); cPsdExceptOpenState = GePsdExceptState(tmpOtherCiDevInfo->DevId);
if (PSD_EXCEPT_OPEN_NO == cPsdExceptOpenState) if (PSD_EXCEPT_NO == cPsdExceptOpenState)
{ {
toOpenCheckFlag = 1U; /*PSD未异常打开,设置可自动重开*/ toOpenCheckFlag = 1U; /*PSD未异常,设置可自动重开*/
} }
else else
{ {
toOpenCheckFlag = 0U; /*存在PSD异常打开,停止遍历,设置不可自动重开*/ toOpenCheckFlag = 0U; /*存在PSD异常,停止遍历,设置不可自动重开*/
break; break;
} }
} }
@@ -4171,12 +4171,15 @@ static UINT8 KeepCbtcRouteSectionErrCheck(const UINT16 routeId)
UINT8 preLogDevState = 0u; /*之前逻辑区段占用状态*/ UINT8 preLogDevState = 0u; /*之前逻辑区段占用状态*/
UINT8 LogSecCurCtOrUtOcc = 0U; /*逻辑区段当前占用状态*/ UINT8 LogSecCurCtOrUtOcc = 0U; /*逻辑区段当前占用状态*/
UINT8 cLocalCiType = 0U; /*本控区类型*/ UINT8 cLocalCiType = 0U; /*本控区类型*/
UINT8 chRouteBelongVirCiId = 0U;
rcWorkMode = GetLocalRcWorkMode(); rcWorkMode = GetLocalRcWorkMode();
/* 联锁逻辑检查 */ /* 联锁逻辑检查 */
reResult = CI_SUCCESS; reResult = CI_SUCCESS;
cLocalCiType = GetLocalCiType(); cLocalCiType = GetLocalCiType();
chRouteBelongVirCiId = GetRouteBelongVirCiId(routeId);
cLocalCiType = GetLocalVirCiType(chRouteBelongVirCiId);
if (CI_TYPE_CLD != cLocalCiType) if (CI_TYPE_CLD != cLocalCiType)
{ {
/*非车辆段,按CBTC既有逻辑处理*/ /*非车辆段,按CBTC既有逻辑处理*/
@@ -4324,10 +4327,12 @@ static UINT8 OpenCbtcRouteSectionErrCheck(const UINT16 routeId)
UINT8 cLocalCiType = 0U; /*本控区类型*/ UINT8 cLocalCiType = 0U; /*本控区类型*/
UINT8 chRouteCouplinkFlag = 0U; UINT8 chRouteCouplinkFlag = 0U;
UINT8 chSigCrossState = 0U; UINT8 chSigCrossState = 0U;
UINT8 chRouteBelongVirCiId = 0U;
rcWorkMode = GetLocalRcWorkMode(); rcWorkMode = GetLocalRcWorkMode();
/* 联锁逻辑检查 */ /* 联锁逻辑检查 */
cLocalCiType = GetLocalCiType(); chRouteBelongVirCiId = GetRouteBelongVirCiId(routeId);
cLocalCiType = GetLocalVirCiType(chRouteBelongVirCiId);
if (CI_TYPE_CLD != cLocalCiType) if (CI_TYPE_CLD != cLocalCiType)
{ {
/*非车辆段,按CBTC既有逻辑处理*/ /*非车辆段,按CBTC既有逻辑处理*/
@@ -229,6 +229,7 @@ void NonRouteLogicProcess(void)
{ {
NonRouteCancelDeal(pNonRoute->NonRouteId); /*非进路取消处理*/ NonRouteCancelDeal(pNonRoute->NonRouteId); /*非进路取消处理*/
} }
} }
} }
@@ -240,22 +241,42 @@ void NonRouteLogicProcess(void)
*/ */
void NonRouteXuanPaiDeal(UINT8 nonRouteId) void NonRouteXuanPaiDeal(UINT8 nonRouteId)
{ {
UINT8 reResult = CI_ERROR;
NonRouteDataStruct *pNonRoute = GetNonRouteDataById(nonRouteId); NonRouteDataStruct *pNonRoute = GetNonRouteDataById(nonRouteId);
if (CI_SUCCESS == LockNonRouteP(nonRouteId)) reResult = LockNonRouteP(nonRouteId);
if (CI_SUCCESS == reResult)
{ /*锁闭成功*/ { /*锁闭成功*/
reResult = CheckNonRouteSwitchPosRight(nonRouteId, 0U, 0U);
if (CI_SUCCESS == CheckNonRouteSwitchPosRight(nonRouteId,0u,0u)) if (CI_SUCCESS == reResult)
{ /*进路道岔位置正确*/ {
SetNonRouteStateDeal(nonRouteId,NONROUTE_STATE_LOCK); /*设置非进路为锁闭*/ /*进路道岔位置正确*/
/*侵限区段侵限条件不满足检查*/
reResult = NonRouteIntruSecVainCheck(nonRouteId, EFUNC_CLD_LOCK_NONROUTE, ESEND_LEVEL_ATS);
if (CI_SUCCESS == reResult)
{
SetNonRouteStateDeal(nonRouteId, NONROUTE_STATE_LOCK); /*设置非进路为锁闭*/
}
else
{
SetNonRouteStateDeal(nonRouteId, NONROUTE_STATE_IDLE); /*设置非进路为空闲*/
/* NonRouteIntruSecVainCheck函数已经有故障码,不再记录*/
}
} }
else else
{ /*道岔未动作到位*/ { /*道岔未动作到位*/
/*非进路锁闭驱动道岔*/ /*非进路锁闭驱动道岔*/
if (CI_ERROR == NonRouteLockDrvSwitchDeal(nonRouteId)) reResult = NonRouteLockDrvSwitchDeal(nonRouteId);
if (CI_SUCCESS == reResult)
{ {
SetNonRouteStateDeal(nonRouteId,NONROUTE_STATE_IDLE); /*设置非进路为空闲*/ /*继续驱动道岔*/
} }
else
{
SetNonRouteStateDeal(nonRouteId, NONROUTE_STATE_IDLE); /*设置非进路为空闲*/
}
} }
} }
@@ -6026,6 +6047,8 @@ void DTrainReturnUnlockP(void)
UINT16 routeId = 0u; /*进路ID*/ UINT16 routeId = 0u; /*进路ID*/
UINT8 belongCiId = 0u; /*进路所属联锁ID*/ UINT8 belongCiId = 0u; /*进路所属联锁ID*/
UINT16 ii = 0u; /*循环索引*/ UINT16 ii = 0u; /*循环索引*/
UINT8 belongVirCIid = 0U;
UINT8 chLocalVirCiType = 0U;
routeCurSum = GetRouteCurSum(); /*获取进路总数*/ routeCurSum = GetRouteCurSum(); /*获取进路总数*/
@@ -6047,9 +6070,13 @@ void DTrainReturnUnlockP(void)
{ {
continue; continue;
} }
belongVirCIid = GetRouteBelongVirCiId(routeId);
/*调车中途折返进路完整锁闭处理*/ chLocalVirCiType = GetLocalVirCiType(belongVirCIid);
DTrainReturnUnlockRouteAllLockP(routeId); if (CI_TYPE_CLD == chLocalVirCiType)
{
/*调车中途折返进路完整锁闭处理*/
DTrainReturnUnlockRouteAllLockP(routeId);
}
} }
/*处理调车中途折返*/ /*处理调车中途折返*/
@@ -6068,9 +6095,13 @@ void DTrainReturnUnlockP(void)
{ {
continue; continue;
} }
belongVirCIid = GetRouteBelongVirCiId(routeId);
/*调车中途折返进路部分锁闭处理*/ chLocalVirCiType = GetLocalVirCiType(belongVirCIid);
DTrainRtnUnlockRoutePartLockP(routeId); if (CI_TYPE_CLD == chLocalVirCiType)
{
/*调车中途折返进路部分锁闭处理*/
DTrainRtnUnlockRoutePartLockP(routeId);
}
} }
} }
@@ -6089,6 +6120,11 @@ UINT16 GetReturnId(const UINT16 routeId)
UINT8 preRouteState = 0u; /* 之前进路状态 */ UINT8 preRouteState = 0u; /* 之前进路状态 */
UINT16 ii = 0u; UINT16 ii = 0u;
UINT8 toGo = CI_SUCCESS; UINT8 toGo = CI_SUCCESS;
UINT8 chRouteState = 0U;
UINT8 chRoutePhysicalType = 0U;
UINT8 chAllLockSecNoOccupyCheck = 0U;
UINT8 chTrainEnterRouteFlag = 0U;
routeState = GetRouteState(routeId); /*获取进路状态*/ routeState = GetRouteState(routeId); /*获取进路状态*/
preRouteState = GetRoutePreState(routeId);/*获取进路前一状态*/ preRouteState = GetRoutePreState(routeId);/*获取进路前一状态*/
@@ -6098,7 +6134,8 @@ UINT16 GetReturnId(const UINT16 routeId)
toGo = CI_ERROR; toGo = CI_ERROR;
} }
if ((CI_ERROR == RouteAllLockSecNoOccupyCheck(routeId)) && (CI_SUCCESS == toGo)) chAllLockSecNoOccupyCheck = RouteAllLockSecNoOccupyCheck(routeId);
if ((CI_ERROR == chAllLockSecNoOccupyCheck) && (CI_SUCCESS == toGo))
{ /*进路区段不是都空闲*/ { /*进路区段不是都空闲*/
toGo = CI_ERROR; toGo = CI_ERROR;
@@ -6119,8 +6156,10 @@ UINT16 GetReturnId(const UINT16 routeId)
/*获取所有满足道岔条件的进路ID*/ /*获取所有满足道岔条件的进路ID*/
for (ii = 0u; ii < starSigRouteSum; ii++) for (ii = 0u; ii < starSigRouteSum; ii++)
{ {
chRouteState = GetRouteState(starSigRouteBuf[ii]);
chRoutePhysicalType = CheckRoutePhysicalType(starSigRouteBuf[ii]);
/*B库改为两条进路,当8编组车占压两条进路时,此时BG2进路解锁需要检查以差值信号机为始端的进路的状态*/ /*B库改为两条进路,当8编组车占压两条进路时,此时BG2进路解锁需要检查以差值信号机为始端的进路的状态*/
if ((ROUTE_STATE_IDLE == GetRouteState(starSigRouteBuf[ii])) &&(CI_SUCCESS == CheckRoutePhysicalType(starSigRouteBuf[ii]))) if ((ROUTE_STATE_IDLE == chRouteState) &&(CI_SUCCESS == chRoutePhysicalType))
{ {
/*以并置信号机为始端的进路均为空闲且进路包含的区段均为列检库区段,且并置信号机为虚拟信号机, /*以并置信号机为始端的进路均为空闲且进路包含的区段均为列检库区段,且并置信号机为虚拟信号机,
线(SIGNAL_VIRTUAL_YES == GetSignalVirtualAttr(returnSigId))*/ 线(SIGNAL_VIRTUAL_YES == GetSignalVirtualAttr(returnSigId))*/
@@ -6148,7 +6187,8 @@ UINT16 GetReturnId(const UINT16 routeId)
/* 如果是差至,如果列车驶入过进路,同时之前状态必须为接近锁闭开放 /* 如果是差至,如果列车驶入过进路,同时之前状态必须为接近锁闭开放
* *
*/ */
if((ROUTE_STATE_NEAR_OPEN == preRouteState) && (TRAIN_ENTER_ROUTE_FLAG_YES == GetTrainEnterRouteFlag(routeId))) chTrainEnterRouteFlag = GetTrainEnterRouteFlag(routeId);
if((ROUTE_STATE_NEAR_OPEN == preRouteState) && (TRAIN_ENTER_ROUTE_FLAG_YES == chTrainEnterRouteFlag))
{ {
returnSigId = GetRouteChaZhiSignalId(routeId); /*获取差置信号机ID*/ returnSigId = GetRouteChaZhiSignalId(routeId); /*获取差置信号机ID*/
} }
File diff suppressed because it is too large Load Diff
@@ -2919,7 +2919,128 @@ UINT8 AutoReturnRouteCouplinkCheck(const UINT16 wAutoRouteId, const UINT8 chFunc
* by lyj 20250929 * by lyj 20250929
*/ */
UINT8 AllAutoReturnRCouplinkCheck(const UINT16 wAutoRouteId, const UINT8 chFunctionId); UINT8 AllAutoReturnRCouplinkCheck(const UINT16 wAutoRouteId, const UINT8 chFunctionId);
/*
*
* const UINT16 axisSecId ID
* CI_ERROR
* CI_SUCCESS
* add by mpt 20260331
*/
UINT8 JumpPhySectionUseCheck(const UINT16 axisSecId);
/*
*
* const UINT16 axisSecId ID
* CI_ERROR
* CI_SUCCESS
* add by mpt 20260331
*/
UINT8 JumpPhySectionPortectUseCheck(const UINT16 axisSecId);
/*
*
* const UINT16 axisSecId ID
* CI_ERROR
* CI_SUCCESS
* add by mpt 20260331
*/
UINT8 JumpLogicSecPortectUseCheck(const UINT16 wLgcId);
/*
*
* const UINT16 axisSecId ID
* CI_ERROR
* CI_SUCCESS
* add by mpt 20260331
*/
UINT8 JumpPhySectionSwitchUseCheck(const UINT16 axisSecId);
/*
*
* const UINT16 axisSecId ID
* const UINT8 state
* void
* add by mpt 20260331
*/
void SetJumpPhySectionPortectSecUse(const UINT16 axisSecId, const UINT8 state);
/*
*
* const UINT16 axisSecId ID
* const UINT8 state
* void
* add by mpt 20260331
*/
void SetJumpLogicSecPortectUse(const UINT16 wLgcId, const UINT8 state);
/*
*
* const UINT16 routeId, ID
* UINT8
CI_SUCCESS:
CI_ERROR:
add by mpt 20260331
*/
UINT8 ChekJumpLockProtectSwitDrivOvtmStat(const UINT16 axisSecId);
/*
*
* UINT16 const axisSecId,
* UINT16 *pDevId, Id
* UINT8 *pDevState,
* CI_ERROR
* CI_SUCCESS
* Add by mpt 20260331
*/
UINT8 AxisSecProtSwitchFLockCheck(UINT16 const axisSecId, UINT16* pDevId, UINT8* pDevState);
/*
*
* UINT16 const axisSecId,
* UINT16 *pDevId, Id
* UINT8 *pDevState,
* CI_ERROR
* CI_SUCCESS
* add by mpt 20260331
*/
UINT8 AxisSecPorteSwitchPosMoveCheck(UINT16 const axisSecId, UINT16* pDevId, UINT8* pDevState, UINT8 funcId, UINT8 sendLevel);
/*
*
* UINT16 const axisSecId,
* UINT16 *pDevId, Id
* UINT8 *pDevState,
* CI_ERROR
* CI_SUCCESS
* add mpt 20260331
*/
UINT8 AxisSecAllProtSwitchPosCheck(UINT16 const axisSecId, UINT16* pDevId, UINT8* pDevState);
/*
*
* const UINT16 axisSecId, ID
* const UINT8 lockCommand,
* void
* add by mpt 20260331
*/
void SetAxisRelProSwitchLockSta(const UINT16 axisSecId, const UINT8 lockCommand);
/*
*
* UINT16 const routeId,
* UINT16 *pDevId, Id
* UINT8 *pDevState,
* CI_ERROR
* CI_SUCCESS
* add mpt 20260331
*/
UINT8 AxisRelatedProSwitchLockCheck(UINT16 const axisSecId, UINT16* pDevId, UINT8* pDevState);
/*
*
* UINT16 const routeId, ID
* UINT16 *pDevId, Id
* UINT8 *pDevState,
* CI_ERROR
* CI_SUCCESS
* add by mpt 20260331
*/
UINT8 LogicSecRltvPrtctSwFlockCheck(UINT16 const wLgcId, UINT16* pDevId, UINT8* pDevState);
/*
*
* const UINT16 axisSecId, ID
* const UINT8 lockCommand,
* void
* add by mpt 20260331
*/
void SetLogSecRelProSwitchLockSta(const UINT16 wLgcId, const UINT8 lockCommand);
#endif #endif
@@ -9604,11 +9604,13 @@ UINT8 OpenBlocRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
UINT8 chDsnFuncSwitch = 0U; /* 无直轨计轴占用功能开关 */ UINT8 chDsnFuncSwitch = 0U; /* 无直轨计轴占用功能开关 */
UINT8 chXianSuFuncSwitch = 0U; /*后备模式信号开放是否检查区段临时限速开关*/ UINT8 chXianSuFuncSwitch = 0U; /*后备模式信号开放是否检查区段临时限速开关*/
UINT8 cCrossState = 0U; /*信号机跨压状态*/ UINT8 cCrossState = 0U; /*信号机跨压状态*/
UINT8 chRouteBelongVirCiId = 0U;
chDsnFuncSwitch = GetCiFunctionSwitchConfig(FUNC_TOA_SWITCH); chDsnFuncSwitch = GetCiFunctionSwitchConfig(FUNC_TOA_SWITCH);
chXianSuFuncSwitch = GetCiFunctionSwitchConfig(FUNC_XIANSU_SWITCH); chXianSuFuncSwitch = GetCiFunctionSwitchConfig(FUNC_XIANSU_SWITCH);
ciType = GetCiType(LocalCiId); chRouteBelongVirCiId = GetRouteBelongVirCiId(routeId);
ciType = GetLocalVirCiType(chRouteBelongVirCiId);
/* 联锁逻辑检查 */ /* 联锁逻辑检查 */
/* 进路内所有区段未被封锁 */ /* 进路内所有区段未被封锁 */
@@ -9635,6 +9637,8 @@ UINT8 OpenBlocRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
devState = 0u; devState = 0u;
startSignalId = GetRouteStartSignalId(routeId);/*获取进路始端信号机ID*/ startSignalId = GetRouteStartSignalId(routeId);/*获取进路始端信号机ID*/
checkResult = RouteAllSecOccuClearCheck(routeId,&devId, &cPhySecCurMergeState); checkResult = RouteAllSecOccuClearCheck(routeId,&devId, &cPhySecCurMergeState);
routeState = GetRouteState(routeId); routeState = GetRouteState(routeId);
if ((CI_TYPE_CLD == ciType) && ((ROUTE_STATE_YUXIAN_OPEN == routeState) ||(ROUTE_STATE_NEAR_OPEN == routeState))) if ((CI_TYPE_CLD == ciType) && ((ROUTE_STATE_YUXIAN_OPEN == routeState) ||(ROUTE_STATE_NEAR_OPEN == routeState)))
{/*车辆段进路预先开放或接近开放*/ {/*车辆段进路预先开放或接近开放*/
@@ -9873,8 +9877,6 @@ UINT8 CLDKeepOpenSecCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLevel)
{ {
/*进路内区段,有UT占用,信号保持失败*/ /*进路内区段,有UT占用,信号保持失败*/
/*进路内区段,有CT,且第一逻辑区段和外方第一物理区段最后一个逻辑区段CT占用,信号保持成功,其它失败*/ /*进路内区段,有CT,且第一逻辑区段和外方第一物理区段最后一个逻辑区段CT占用,信号保持成功,其它失败*/
hasUtFlag = 0u;
hasCtFlag = 0u;
for (ii = 0u; ii < routePhyNum; ii++) for (ii = 0u; ii < routePhyNum; ii++)
{ {
phyId = pRoutePhySecData[ii].PhysicalSectionId; phyId = pRoutePhySecData[ii].PhysicalSectionId;
@@ -9916,7 +9918,7 @@ UINT8 CLDKeepOpenSecCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLevel)
chFunRet = GetRouteInOutFstLgcTrainInfo(routeId, &chReadyEnterRouteTrainSum, wszReadyEtRouteTrainId); chFunRet = GetRouteInOutFstLgcTrainInfo(routeId, &chReadyEnterRouteTrainSum, wszReadyEtRouteTrainId);
if (CI_SUCCESS == chFunRet) if (CI_SUCCESS == chFunRet)
{ {
chTrainEnterState = dsuTrainMinHeadCrossSignal(wszReadyEtRouteTrainId[0], routeId); chTrainEnterState = dsuTrainMinHeadCrossSignal(wszReadyEtRouteTrainId[0], routeId, CI_ERROR);
if (TRAIN_ENTER_ROUTE_FULL == chTrainEnterState) if (TRAIN_ENTER_ROUTE_FULL == chTrainEnterState)
{ {
/*列车完全驶入进路,关灯 by cgh 20231128*/ /*列车完全驶入进路,关灯 by cgh 20231128*/
@@ -10038,6 +10040,7 @@ UINT8 OpenCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
UINT16 startSignalId = 0u; UINT16 startSignalId = 0u;
UINT8 signalCrossState = 0u; UINT8 signalCrossState = 0u;
UINT8 chRouteCouplinkFlag = 0U; UINT8 chRouteCouplinkFlag = 0U;
UINT8 chRouteBelongVirCiId = 0U;
/* 联锁逻辑检查 */ /* 联锁逻辑检查 */
/* 进路内所有区段未被封锁 */ /* 进路内所有区段未被封锁 */
@@ -10060,7 +10063,8 @@ UINT8 OpenCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
/*CBTC进路内方第一逻辑区段条件检查,车辆段进路需内方区段空闲*/ /*CBTC进路内方第一逻辑区段条件检查,车辆段进路需内方区段空闲*/
if (CI_SUCCESS == reResult) if (CI_SUCCESS == reResult)
{ {
cLocalCiType = GetLocalCiType(); chRouteBelongVirCiId = GetRouteBelongVirCiId(routeId);
cLocalCiType = GetLocalVirCiType(chRouteBelongVirCiId);
if (CI_TYPE_CLD != cLocalCiType) if (CI_TYPE_CLD != cLocalCiType)
{ {
/*非车辆段,按CBTC既有逻辑处理*/ /*非车辆段,按CBTC既有逻辑处理*/
@@ -10138,6 +10142,8 @@ UINT8 OpenCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
} }
else else
{ {
devId = GetRouteInFirstLogSecId(routeId);
devState = GetLogSecCurOccupyState(devId);
reResult = CheckEngineerVehicleNear(routeId);/*检查是否是工程车接近的跨压*/ reResult = CheckEngineerVehicleNear(routeId);/*检查是否是工程车接近的跨压*/
if (CI_SUCCESS == reResult) if (CI_SUCCESS == reResult)
{ {
@@ -10384,6 +10390,7 @@ UINT8 KeepCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
UINT8 outPhySecState = 0U; UINT8 outPhySecState = 0U;
UINT8 cLocalCiType = 0U; /*本控区类型*/ UINT8 cLocalCiType = 0U; /*本控区类型*/
UINT8 chRouteCouplinkFlag = 0U; UINT8 chRouteCouplinkFlag = 0U;
UINT8 chRouteBelongVirCiId = 0U;
/* 联锁逻辑检查 */ /* 联锁逻辑检查 */
/* 进路内所有区段未被封锁 */ /* 进路内所有区段未被封锁 */
@@ -10406,7 +10413,8 @@ UINT8 KeepCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
/*CBTC进路内方第一逻辑区段条件检查*/ /*CBTC进路内方第一逻辑区段条件检查*/
if(CI_SUCCESS == reResult) if(CI_SUCCESS == reResult)
{ {
cLocalCiType = GetLocalCiType(); chRouteBelongVirCiId = GetRouteBelongVirCiId(routeId);
cLocalCiType = GetLocalVirCiType(chRouteBelongVirCiId);
if (CI_TYPE_CLD != cLocalCiType) if (CI_TYPE_CLD != cLocalCiType)
{ {
/*非车辆段,按CBTC既有逻辑处理*/ /*非车辆段,按CBTC既有逻辑处理*/
@@ -10443,7 +10451,12 @@ UINT8 KeepCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag) if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag)
{ {
reResult = KeepCouplinkRouteSecOccCheck(routeId,&devId,&devState); reResult = KeepCouplinkRouteSecOccCheck(routeId,&devId,&devState);
if (CI_ERROR == reResult) if (CI_SUCCESS == reResult)
{
/* ͨ¹ý¼ì²é */
reResult = CI_SUCCESS;
}
else
{ {
/* 记录故障码 */ /* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, SECTION_OCCUPY_YES, devState, sendLevel); SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, SECTION_OCCUPY_YES, devState, sendLevel);
@@ -10492,6 +10505,8 @@ UINT8 KeepCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
} }
else else
{ {
devId = GetRouteInFirstLogSecId(routeId);
devState = GetLogSecCurOccupyState(devId);
reResult = CheckEngineerVehicleNear(routeId);/*检查是否是工程车接近的跨压以及列车的真实跨压*/ reResult = CheckEngineerVehicleNear(routeId);/*检查是否是工程车接近的跨压以及列车的真实跨压*/
if (CI_SUCCESS == reResult) if (CI_SUCCESS == reResult)
{ {
@@ -11577,6 +11592,7 @@ void RouteLgcSecResReleaseProcess(const UINT16 wRouteId)
wUnlockLgcSecId = routeLogIdBuf[ii]; wUnlockLgcSecId = routeLogIdBuf[ii];
wBelongRouteId = GetLogSecLockBelongRoute(wUnlockLgcSecId); wBelongRouteId = GetLogSecLockBelongRoute(wUnlockLgcSecId);
wLgcBufIndex = GetlogSectionBufIndex(wUnlockLgcSecId); wLgcBufIndex = GetlogSectionBufIndex(wUnlockLgcSecId);
chLgcResTrainSum = GetLogSecTrainInfoSum(wUnlockLgcSecId);
chLogSecLogLockState = GetLogSecLogLockState(wUnlockLgcSecId); chLogSecLogLockState = GetLogSecLogLockState(wUnlockLgcSecId);
@@ -11594,7 +11610,6 @@ void RouteLgcSecResReleaseProcess(const UINT16 wRouteId)
/*锁闭所属进路等于本进路或逻辑区段已解锁*/ /*锁闭所属进路等于本进路或逻辑区段已解锁*/
if (wBelongRouteId == wRouteId) if (wBelongRouteId == wRouteId)
{ {
chLgcResTrainSum = GetLogSecTrainInfoSum(wUnlockLgcSecId);
if (LOGIC_SECTION_RES_SUM_MAX > chLgcResTrainSum) if (LOGIC_SECTION_RES_SUM_MAX > chLgcResTrainSum)
{ {
; /*继续执行*/ ; /*继续执行*/
@@ -1598,12 +1598,14 @@ UINT8 SetNonRouteP(UINT8 nonRouteId)
reResult = NonRouteRelProSwiPosMovValCheck(nonRouteId,functionId,sendLevel); reResult = NonRouteRelProSwiPosMovValCheck(nonRouteId,functionId,sendLevel);
} }
#if 0
/*修复缺陷YF0083-2105---LYJ--20260128*/
if (CI_SUCCESS == reResult) if (CI_SUCCESS == reResult)
{/*侵限区段侵限条件不满足检查*/ {/*侵限区段侵限条件不满足检查*/
reResult = NonRouteIntruSecVainCheck(nonRouteId,functionId,sendLevel); reResult = NonRouteIntruSecVainCheck(nonRouteId,functionId,sendLevel);
} }
#endif
return reResult; return reResult;
} }
@@ -1721,14 +1723,6 @@ UINT8 LockNonRouteP(UINT8 nonRouteId)
reResult = NonRouteRelProSwiPosMovValCheck(nonRouteId,functionId,sendLevel); reResult = NonRouteRelProSwiPosMovValCheck(nonRouteId,functionId,sendLevel);
} }
if (CI_SUCCESS == reResult)
{/*侵限区段侵限条件不满足检查*/
reResult = NonRouteIntruSecVainCheck(nonRouteId,functionId,sendLevel);
}
return reResult; return reResult;
} }
+5 -2
View File
@@ -118,6 +118,8 @@
#define MASK_TYPE_PHYSECTION_HEAD_XTD ((UINT8)0x31) /*定义物理区段运行方向下行状态码位*/ #define MASK_TYPE_PHYSECTION_HEAD_XTD ((UINT8)0x31) /*定义物理区段运行方向下行状态码位*/
#define MASK_TYPE_PHYSECTION_HEAD_STD ((UINT8)0x32) /*定义物理区段运行方向上行状态码位*/ #define MASK_TYPE_PHYSECTION_HEAD_STD ((UINT8)0x32) /*定义物理区段运行方向上行状态码位*/
#define MASK_TYPE_LIECHE_STOPSTATE ((UINT8)0x3a) /*定义列车停稳信息状态码位*/ #define MASK_TYPE_LIECHE_STOPSTATE ((UINT8)0x3a) /*定义列车停稳信息状态码位*/
#define MASK_TYPE_PHYSECTION_INTRUSION ((UINT8)0x5a) /*定义物理区段侵限状态码位(CI->ZC)*/
#define MASK_TYPE_PHYSECTION_ATS_FLOCK ((UINT8)0x5b) /*定义物理区段由ATS封锁状态码位(CI->ZC)*/
#define MASK_TYPE_PHYSEC_CENTERDETAIN_UP ((UINT8)0x3d) /*定义物理区段CI-ATS中心上行扣车状态状态码位 (兼容28.0.0.14使用)*/ #define MASK_TYPE_PHYSEC_CENTERDETAIN_UP ((UINT8)0x3d) /*定义物理区段CI-ATS中心上行扣车状态状态码位 (兼容28.0.0.14使用)*/
#define MASK_TYPE_PHYSEC_CENTERDETAIN_DOWN ((UINT8)0x3e) /*定义物理区段CI-ATS中心下行扣车状态状态码位 (兼容28.0.0.14使用)*/ #define MASK_TYPE_PHYSEC_CENTERDETAIN_DOWN ((UINT8)0x3e) /*定义物理区段CI-ATS中心下行扣车状态状态码位 (兼容28.0.0.14使用)*/
#define MASK_TYPE_PHYSEC_STATIONDETAIN_UP ((UINT8)0x3f) /*定义物理区段CI-ATS车站上行扣车状态状态码位 (兼容28.0.0.14使用)*/ #define MASK_TYPE_PHYSEC_STATIONDETAIN_UP ((UINT8)0x3f) /*定义物理区段CI-ATS车站上行扣车状态状态码位 (兼容28.0.0.14使用)*/
@@ -139,9 +141,10 @@
#define MASK_TYPE_DOWNWARD_DIRECTION ((UINT8)0x94) /*定义逻辑区段下行锁闭码位*/ #define MASK_TYPE_DOWNWARD_DIRECTION ((UINT8)0x94) /*定义逻辑区段下行锁闭码位*/
#define MASK_TYPE_LOGICSECTION_PROTECTLOCK ((UINT8)0x99) /*定义逻辑区段防护锁闭码位*/ #define MASK_TYPE_LOGICSECTION_PROTECTLOCK ((UINT8)0x99) /*定义逻辑区段防护锁闭码位*/
#define MASK_TYPE_LOGICSECTION_JUMPLOCK ((UINT8)0x9A) /*定义逻辑区段跳跃锁闭码位*/ #define MASK_TYPE_LOGICSECTION_JUMPLOCK ((UINT8)0x9A) /*定义逻辑区段跳跃锁闭码位*/
#define MASK_TYPE_LOGICSECTION_ARB ((UINT8)0x9B) /*定义逻辑区段ARB状态码位*/ #define MASK_TYPE_LOGSEC_CBTC_ARB ((UINT8)0x9B) /*定义逻辑区段CBTC_ARB状态码位*/
#define MASK_TYPE_LOGICSECTION_SPKS_FLOCK ((UINT8)0x9C) /*定义逻辑区段SPKS封锁状态码位*/ #define MASK_TYPE_LOGICSECTION_SPKS_FLOCK ((UINT8)0x9C) /*定义逻辑区段SPKS封锁状态码位*/
#define MASK_TYPE_LOGICSECTION_EMERG_XIANSU ((UINT8)0x9D) /*定义逻辑区段紧急临时限速码位*/ #define MASK_TYPE_LOGICSECTION_EMERG_XIANSU ((UINT8)0x9D) /*定义逻辑区段紧急临时限速码位*/
#define MASK_TYPE_LOGSEC_PB_TACS_ARB ((UINT8)0xB3) /*定义逻辑区段PB_TACS_ARB状态码位*/
/*保护区段相关码位*/ /*保护区段相关码位*/
@@ -204,7 +207,7 @@
#define MASK_TYPE_PSD_PDB_FLASH_STATE ((UINT8)0xA0) /*定义清客确认箱PDB按钮指示灯闪灯状态码位*/ #define MASK_TYPE_PSD_PDB_FLASH_STATE ((UINT8)0xA0) /*定义清客确认箱PDB按钮指示灯闪灯状态码位*/
#define MASK_TYPE_PSD_VIDEO_QK_LU ((UINT8)0xA1) /*定义清客按钮箱视频清客表示灯(绿)状态码位*/ #define MASK_TYPE_PSD_VIDEO_QK_LU ((UINT8)0xA1) /*定义清客按钮箱视频清客表示灯(绿)状态码位*/
#define MASK_TYPE_PSD_VIDEO_QK_HONG ((UINT8)0xA2) /*定义清客按钮箱视频清客表示灯(红)状态码位*/ #define MASK_TYPE_PSD_VIDEO_QK_HONG ((UINT8)0xA2) /*定义清客按钮箱视频清客表示灯(红)状态码位*/
#define MASK_TYPE_PSD_EXCEPT_OPEN ((UINT8)0xA5) /*定义站台安全门异常打开码位*/ #define MASK_TYPE_PSD_EXCEPT ((UINT8)0xA5) /*定义站台安全门异常码位 CI-ATS、CI-ZC*/
#define MASK_TYPE_PSD_JXTCPANGLU_FAULT ((UINT8)0xAA) /*定义间隙探测旁路按钮故障码位*/ #define MASK_TYPE_PSD_JXTCPANGLU_FAULT ((UINT8)0xAA) /*定义间隙探测旁路按钮故障码位*/
#define MASK_TYPE_PSD_IBP_STATE ((UINT8)0xAD) /*定义IBP盘按钮状态码位*/ #define MASK_TYPE_PSD_IBP_STATE ((UINT8)0xAD) /*定义IBP盘按钮状态码位*/
#define MASK_TYPE_PSD_IBP_FAULT ((UINT8)0xAE) /*定义IBP盘按钮故障码位*/ #define MASK_TYPE_PSD_IBP_FAULT ((UINT8)0xAE) /*定义IBP盘按钮故障码位*/
@@ -365,6 +365,24 @@ UINT16 GetSCXColAgreeTryRelayIdById(UINT8 nonRouteId)
return collAgreeTryTrainRelayId; return collAgreeTryTrainRelayId;
} }
/*
* 线ID
* UINT8 nonRouteId id
* 线ID
*/
UINT16 GetWaysideTryTrainIndRelayId(UINT8 nonRouteId)
{
UINT16 collAgreeTryTrainRelayId = 0u;
NonRouteConfigDataStruct* pNonRouteConfig = GetNonRouteConfigDataPtrById(nonRouteId);
if (pNonRouteConfig != NULL)
{
collAgreeTryTrainRelayId = pNonRouteConfig->ColWaysideTryTrainIndRelayId; /* 试车线采集的轨旁试车指示器继电器ID */
}
return collAgreeTryTrainRelayId;
}
/* /*
* id查找对应的非进路 * id查找对应的非进路
* swId-id * swId-id
@@ -82,6 +82,7 @@ typedef struct S_NonRouteConfigDataStruct
UINT16 AgreeTryTrainRelayId; /*同意试车继电器ID (配置字段)*/ UINT16 AgreeTryTrainRelayId; /*同意试车继电器ID (配置字段)*/
UINT16 DrvApplyTryTrainRelayId; /* 试车线驱动的申请试车继电器ID */ UINT16 DrvApplyTryTrainRelayId; /* 试车线驱动的申请试车继电器ID */
UINT16 ColAgreeTryTrainRelayId; /* 试车线采集的同意试车继电器ID */ UINT16 ColAgreeTryTrainRelayId; /* 试车线采集的同意试车继电器ID */
UINT16 ColWaysideTryTrainIndRelayId; /* 试车线采集的轨旁试车指示器继电器ID */
} NonRouteConfigDataStruct; } NonRouteConfigDataStruct;
/*******************************全局变量声明*******************************/ /*******************************全局变量声明*******************************/
@@ -268,6 +269,14 @@ UINT8 GetnonRouteIdbelongVirCIid(UINT8 nonRouteId);
*/ */
UINT8 GetnonRouteIdbelongCIid(UINT8 nonRouteId); UINT8 GetnonRouteIdbelongCIid(UINT8 nonRouteId);
/*
* 线ID
* UINT8 nonRouteId id
* 线ID
*/
UINT16 GetWaysideTryTrainIndRelayId(UINT8 nonRouteId);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
+1 -1
View File
@@ -28,7 +28,7 @@
/*·Ç½øÂ·µ÷³µ×´Ì¬*/ /*·Ç½øÂ·µ÷³µ×´Ì¬*/
#define NONROUTE_STATE_INVALID ((UINT8)0x0) /*·Ç½øÂ·×´Ì¬ÎÞЧ*/ #define NONROUTE_STATE_INVALID ((UINT8)0x0) /*·Ç½øÂ·×´Ì¬ÎÞЧ*/
#define NONROUTE_STATE_IDLE ((UINT8)0x01) /*·Ç½øÂ·¿ÕÏÐ*/ #define NONROUTE_STATE_IDLE ((UINT8)0x01) /*·Ç½øÂ·¿ÕÏÐ*/
#define NONROUTE_STATE_XUANPAI ((UINT8)0x02) /*·Ç½øÂ·Ñ¡ÅÅ*/ #define NONROUTE_STATE_XUANPAI ((UINT8)0x02) /*·Ç½øÂ·Ñ¡ÅÅ*/
#define NONROUTE_STATE_LOCK ((UINT8)0x04) /*·Ç½øÂ·Ëø±Õ*/ #define NONROUTE_STATE_LOCK ((UINT8)0x04) /*·Ç½øÂ·Ëø±Õ*/
@@ -97,7 +97,7 @@ void SetOverlapRelateProtSwLockSta(const UINT16 overlapId, const UINT8 lockComma
overlapProtectSwitchSum = GetOverlapRelatedProtSwitSum(overlapId); /*获取防护道岔数目*/ overlapProtectSwitchSum = GetOverlapRelatedProtSwitSum(overlapId); /*获取防护道岔数目*/
overlapProtectSwitchStru = GetOverlapRelatedProtSwitStru(overlapId); /*获取防护道岔数据*/ overlapProtectSwitchStru = GetOverlapRelatedProtSwitStru(overlapId); /*获取防护道岔数据*/
if (0u == overlapProtectSwitchSum) if ((0U == overlapProtectSwitchSum) || (NULL == overlapProtectSwitchStru))
{ {
retVal = CI_ERROR; retVal = CI_ERROR;
} }
+53 -12
View File
@@ -1565,7 +1565,6 @@ UINT8 GetPsdPlFlag(const UINT16 doorId)
void SetNearCiPscPlFlag(const UINT16 psdId,const UINT16 pscId,const UINT8 setFlag) void SetNearCiPscPlFlag(const UINT16 psdId,const UINT16 pscId,const UINT8 setFlag)
{ {
/*变量初始化*/ /*变量初始化*/
UINT8 i = 0u;
UINT8 transmitState = 0u; UINT8 transmitState = 0u;
UINT8 localCiId = 0u; UINT8 localCiId = 0u;
UINT8 psdCiId = 0u; UINT8 psdCiId = 0u;
@@ -2575,21 +2574,21 @@ UINT16 GePsdVideoQkRelateVobcId(const UINT16 wPsdId)
} }
/* /*
* ID屏蔽门异常打开状态 * ID屏蔽门异常状态
* const UINT16 wPsdId ID * const UINT16 wPsdId ID
* const UINT8 cExceptOpenState * const UINT8 cExceptOpenState
* *
* Created By LQ 2025.05.22 * Created By LQ 2025.05.22
*/ */
void SetPsdExceptOpenState(const UINT16 wPsdId, const UINT8 cExceptOpenState) void SetPsdExceptState(const UINT16 wPsdId, const UINT8 cExceptOpenState)
{ {
UINT16 bufIndex = 0U; UINT16 bufIndex = 0U;
bufIndex = GetPsdConfigBufIndex(wPsdId); /*获取屏蔽门数组下标*/ bufIndex = GetPsdConfigBufIndex(wPsdId); /*获取屏蔽门数组下标*/
if ((PSD_SUM_MAX > bufIndex) && ((PSD_EXCEPT_OPEN_YES == cExceptOpenState) || (PSD_EXCEPT_OPEN_NO == cExceptOpenState))) if ((PSD_SUM_MAX > bufIndex) && ((PSD_EXCEPT_YES == cExceptOpenState) || (PSD_EXCEPT_NO == cExceptOpenState)))
{ {
PsdDataStru[bufIndex].cPsdExceptOpenState = cExceptOpenState; /*设置屏蔽门异常打开状态*/ PsdDataStru[bufIndex].cPsdExceptOpenState = cExceptOpenState; /*设置屏蔽门异常状态*/
} }
else else
{ {
@@ -2598,16 +2597,16 @@ void SetPsdExceptOpenState(const UINT16 wPsdId, const UINT8 cExceptOpenState)
} }
/* /*
* ID屏蔽门异常打开状态 * ID屏蔽门异常状态
* const UINT16 wPsdId ID * const UINT16 wPsdId ID
* 0x55 * 0x55
* 0xAA * 0xAA
* Created By LQ 2025.05.22 * Created By LQ 2025.05.22
*/ */
UINT8 GePsdExceptOpenState(const UINT16 wPsdId) UINT8 GePsdExceptState(const UINT16 wPsdId)
{ {
UINT16 bufIndex = 0U; UINT16 bufIndex = 0U;
UINT8 cRetVal = PSD_EXCEPT_OPEN_YES; UINT8 cRetVal = PSD_EXCEPT_YES;
bufIndex = GetPsdConfigBufIndex(wPsdId); /*获取屏蔽门数组下标*/ bufIndex = GetPsdConfigBufIndex(wPsdId); /*获取屏蔽门数组下标*/
@@ -3375,4 +3374,46 @@ UINT32 GetIBPPressCycNum(const UINT16 doorId)
retVal = CI_ERROR; retVal = CI_ERROR;
} }
return retVal; return retVal;
}
/*
* ID屏蔽门状态给 VOBC
* const UINT16 doorIdID
*
*/
UINT8 GetPsdStateToVobc(const UINT16 doorId)
{
UINT8 chPsdState = 0U;
UINT8 chPsdPlState = 0U;
UINT8 chExceptOpenState = 0U;
UINT8 chRet = 0U;
chPsdPlState = GetPsdMutualLockRemoveState(doorId); /*屏蔽门互锁解除*/
if ((PSD_MUTUALLOCK_REMOVE_YES == chPsdPlState) || (PSD_ATS_MUTUALLOCK_REMOVE_YES == chPsdPlState) || (PSD_ATS_AND_JD_MUTUALLOCK_REMOVE_YES == chPsdPlState))
{
/*屏蔽门互锁解除*/
chRet = CI_IVOC_PSD_STATE_PANGLU;
}
else
{
chPsdState = GetPsdState(doorId);
if (PSD_STATE_CLOSE == chPsdState)
{/*屏蔽门关*/
chRet = CI_IVOC_PSD_STATE_CLOSE;
}
else
{
/*屏蔽门开, 判断是否异常*/
chExceptOpenState = GePsdExceptState(doorId);
if (PSD_EXCEPT_NO == chExceptOpenState)
{
chRet = CI_IVOC_PSD_STATE_OPEN;
}
else
{
/*屏蔽门异常打开*/
chRet = CI_IVOC_PSD_STATE_OPEN_EXCEPT;
}
}
}
return chRet;
} }
+13 -7
View File
@@ -925,22 +925,22 @@ void SetPsdVideoQkRelateVobcId(const UINT16 wPsdId, const UINT16 wVobcId);
UINT16 GePsdVideoQkRelateVobcId(const UINT16 wPsdId); UINT16 GePsdVideoQkRelateVobcId(const UINT16 wPsdId);
/* /*
* ID屏蔽门异常打开状态 * ID屏蔽门异常状态
* const UINT16 wPsdId ID * const UINT16 wPsdId ID
* const UINT8 cExceptOpenState * const UINT8 cExceptOpenState
* *
* Created By LQ 2025.05.22 * Created By LQ 2025.05.22
*/ */
void SetPsdExceptOpenState(const UINT16 wPsdId, const UINT8 cExceptOpenState); void SetPsdExceptState(const UINT16 wPsdId, const UINT8 cExceptOpenState);
/* /*
* ID屏蔽门异常打开状态 * ID屏蔽门异常状态
* const UINT16 wPsdId ID * const UINT16 wPsdId ID
* 0x55 * 0x55
* 0xAA * 0xAA
* Created By LQ 2025.05.22 * Created By LQ 2025.05.22
*/ */
UINT8 GePsdExceptOpenState(const UINT16 wPsdId); UINT8 GePsdExceptState(const UINT16 wPsdId);
/* /*
* ID屏蔽门故障隔离信息 * ID屏蔽门故障隔离信息
@@ -1179,6 +1179,12 @@ UINT8 GetPsdButtonIbpState(const UINT16 doorId);
* >0: * >0:
*/ */
UINT8 SetIBPPressCycNum(const UINT16 doorId, const UINT32 startCycNum); UINT8 SetIBPPressCycNum(const UINT16 doorId, const UINT32 startCycNum);
/*
* ID屏蔽门状态给 VOBC
* const UINT16 doorIdID
*
*/
UINT8 GetPsdStateToVobc(const UINT16 doorId);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
+13 -3
View File
@@ -198,9 +198,13 @@
#define VIDEO_QK_DRIVE_STATE_TESTING ((UINT8)0xccU) /*视频清客驱动状态—检测中*/ #define VIDEO_QK_DRIVE_STATE_TESTING ((UINT8)0xccU) /*视频清客驱动状态—检测中*/
#define VIDEO_QK_DRIVE_STATE_INVALID ((UINT8)0xffU) /*视频清客驱动状态—无效*/ #define VIDEO_QK_DRIVE_STATE_INVALID ((UINT8)0xffU) /*视频清客驱动状态—无效*/
/*ÆÁ±ÎÃÅÒì³£´ò¿ª×´Ì¬*/ /*屏蔽门异常状态*/
#define PSD_EXCEPT_OPEN_NO ((UINT8)0xAAU) /*δÒì³£´ò¿ª*/ #define PSD_EXCEPT_NO ((UINT8)0xAAU) /*未异常*/
#define PSD_EXCEPT_OPEN_YES ((UINT8)0x55U) /*Òì³£´ò¿ª*/ #define PSD_EXCEPT_YES ((UINT8)0x55U) /*异常(曾异常打开未取消)*/
/*屏蔽门异常取消方式*/
#define PSD_EXCEPT_CANCLE_ATS ((UINT8)0xAAU) /*ATS命令取消*/
#define PSD_EXCEPT_CANCLE_RCI ((UINT8)0x55U) /*未异常打开时联锁自动取消异常*/
/*OC-P旁路状态确认*/ /*OC-P旁路状态确认*/
#define OC_PSC_PL_CONFIRM_YES ((UINT8)0xaaU) /*OC-P旁路状态已确认*/ #define OC_PSC_PL_CONFIRM_YES ((UINT8)0xaaU) /*OC-P旁路状态已确认*/
@@ -218,4 +222,10 @@
#define PSD_INCLUDE_ESB_NUM ((UINT8)10U) /*ESB个数*/ #define PSD_INCLUDE_ESB_NUM ((UINT8)10U) /*ESB个数*/
/*CI-VOBC屏蔽门状态*/
#define CI_IVOC_PSD_STATE_CLOSE ((UINT8)0xAAU) /*CI到IVOC屏蔽门关闭*/
#define CI_IVOC_PSD_STATE_OPEN ((UINT8)0x55U) /*CI到IVOC屏蔽门打开*/
#define CI_IVOC_PSD_STATE_PANGLU ((UINT8)0xCCU) /*CI到IVOC屏蔽门互锁解除*/
#define CI_IVOC_PSD_STATE_OPEN_EXCEPT ((UINT8)0x33U) /*CI到IVOC屏蔽门异常打开*/
#endif #endif
@@ -163,6 +163,7 @@
#define ATS_CMD_APPLY_XICHE ((UINT8)0xB1) /*降级模式洗车请求*/ #define ATS_CMD_APPLY_XICHE ((UINT8)0xB1) /*降级模式洗车请求*/
#define ATS_CMD_APPLY_PASSXICHE ((UINT8)0xB2) /*现地请求反向洗车命令-降级模式*/ #define ATS_CMD_APPLY_PASSXICHE ((UINT8)0xB2) /*现地请求反向洗车命令-降级模式*/
#define ATS_CMD_CANCEL_PASSXICHE ((UINT8)0xB3) /*现地取消反向洗车命令-降级模式*/ #define ATS_CMD_CANCEL_PASSXICHE ((UINT8)0xB3) /*现地取消反向洗车命令-降级模式*/
#define ATS_CMD_CANCEL_PSD_EXCEPT ((UINT8)0xBA) /*现地取消站台门异常状态*/
/****联锁到其他联锁的命令宏定义****/ /****联锁到其他联锁的命令宏定义****/
#define CI_CMD_PHYSEC_USING_APPLY ((UINT16)0x0001) /*物理区段征用申请*/ #define CI_CMD_PHYSEC_USING_APPLY ((UINT16)0x0001) /*物理区段征用申请*/
File diff suppressed because it is too large Load Diff
@@ -108,13 +108,13 @@
#define PHYSEC_LOCKDIRECTION_OPPST_YES ((UINT8)0xAA) /*取反*/ #define PHYSEC_LOCKDIRECTION_OPPST_YES ((UINT8)0xAA) /*取反*/
#define PHYSEC_LOCKDIRECTION_OPPST_DEFAULT ((UINT8)0xFF) /*默认值*/ #define PHYSEC_LOCKDIRECTION_OPPST_DEFAULT ((UINT8)0xFF) /*默认值*/
#define CICI_VERSION ((UINT8)31) /*cici接口版本号,每次修改接口需要升级版本号——Last Modified On 2026.01.04*/ #define CICI_VERSION ((UINT8)32) /*cici接口版本号,每次修改接口需要升级版本号——Last Modified On 2026.03.10*/
#define CICI_BEGIN_TO_STATION_LEN ((UINT16)31) /*20251104更新为HLHT头长度+应用层保温内容前6字节*/ #define CICI_BEGIN_TO_STATION_LEN ((UINT16)31) /*20251104更新为HLHT头长度+应用层保温内容前6字节*/
#define CICI_CICIVERINDEX (CICI_BEGIN_TO_STATION_LEN-3U) /*20251104更新后CI接口版本信息索引*/ #define CICI_CICIVERINDEX (CICI_BEGIN_TO_STATION_LEN-3U) /*20251104更新后CI接口版本信息索引*/
#define CICI_ONE_SWITCH_LEN ((UINT16)13) /*一个道岔数据长度*/ #define CICI_ONE_SWITCH_LEN ((UINT16)13) /*一个道岔数据长度*/
#define CICI_ONE_PHYSEC_LEN ((UINT16)12U)/*一个物理区段数据长度*/ #define CICI_ONE_PHYSEC_LEN ((UINT16)12U)/*一个物理区段数据长度*/
#define CICI_ONE_PHYSEC_UT_LEN ((UINT16)1U)/*一个物理区段坏车占用数据长度*/ #define CICI_ONE_PHYSEC_UT_LEN ((UINT16)1U)/*一个物理区段坏车占用数据长度*/
#define CICI_ONE_LOGSEC_LEN ((UINT16)9)/*一个逻辑区段数据长度*/ #define CICI_ONE_LOGSEC_LEN ((UINT16)6)/*一个逻辑区段数据长度*/
#define CICI_ONE_SIGNAL_LEN ((UINT16)11)/*一个信号机数据长度*/ #define CICI_ONE_SIGNAL_LEN ((UINT16)11)/*一个信号机数据长度*/
#define CICI_ONE_PSD_LEN ((UINT16)5)/*一个屏蔽门数据长度*/ #define CICI_ONE_PSD_LEN ((UINT16)5)/*一个屏蔽门数据长度*/
#define CICI_ONE_ESB_LEN ((UINT16)4)/*一个ESB数据长度*/ #define CICI_ONE_ESB_LEN ((UINT16)4)/*一个ESB数据长度*/
+81 -18
View File
@@ -524,7 +524,6 @@ UINT8 SwitchMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* da
UINT16 indexFind = 0U; UINT16 indexFind = 0U;
UINT8 devBelongThisLine = 0U; UINT8 devBelongThisLine = 0U;
UINT8 switchBoardNum = 0U; UINT8 switchBoardNum = 0U;
UINT8 switchStateCheck = CI_ERROR;
switchLockStatus = GetSwitchLockStatus(DeviceId); switchLockStatus = GetSwitchLockStatus(DeviceId);
@@ -1178,6 +1177,42 @@ UINT8 PhySectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8
; ;
} }
break; break;
case MASK_TYPE_PHYSECTION_INTRUSION:
/* 物理区段侵限状态码位 */
phyIntruSecVainCheck = PhysicalIntruSecVainCheck(DeviceId);
if (CI_SUCCESS == phyIntruSecVainCheck)
{
/*未侵限,发1*/
SetMaskValue(MaskId, dataBuf);
}
else
{
/*侵限,发0*/
}
break;
case MASK_TYPE_PHYSECTION_ATS_FLOCK:
/* 物理区段由ATS封锁状态码位 */
/*封锁状态码位(ATS设置) 封锁发0 未封锁以及SPKS命令封锁发1*/
phySecState = GetPhySecFLockState(DeviceId);
if (PHYSICAL_SECTION_FLOCK_NO != phySecState)
{
phySecLockType = GetPhySecFLockType(DeviceId);
if (PHY_SEC_FLOCK_TYPE_SPKS != phySecLockType)
{
/*除了SPKS封锁 都发0*/
}
else
{
/*SPKS命令的封锁 发1*/
SetMaskValue(MaskId, dataBuf);
}
}
else
{
/*未封锁 发1*/
SetMaskValue(MaskId, dataBuf);
}
break;
default: default:
returnValue = CI_ERROR; returnValue = CI_ERROR;
@@ -1204,13 +1239,16 @@ UINT8 LogicSectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UIN
UINT16 logLockBelongRoute = 0U;/*逻辑区段锁闭所属进路*/ UINT16 logLockBelongRoute = 0U;/*逻辑区段锁闭所属进路*/
UINT16 logProtectLockRoute = 0U;/*逻辑区段防护锁闭所属进路*/ UINT16 logProtectLockRoute = 0U;/*逻辑区段防护锁闭所属进路*/
UINT8 chJumpLockState = 0U;/*逻辑区段锁闭状态*/ UINT8 chJumpLockState = 0U;/*逻辑区段锁闭状态*/
UINT8 cLogArbState = 0U; /* 逻辑区段ARB状态 */ UINT8 cLogCbtcArbState = 0U; /* 逻辑区段CBTC_ARB状态 */
UINT8 cLogPbTacsArbState = 0U; /* 逻辑区段PB_TACS_ARB状态 */
UINT8 chLogSecLockDirOpposedFlag = CI_ERROR;/*逻辑区段锁闭方向是否取反标志*/ UINT8 chLogSecLockDirOpposedFlag = CI_ERROR;/*逻辑区段锁闭方向是否取反标志*/
UINT8 cLogSpksFlockState = 0U; /* 逻辑区段SPKS封锁状态 */ UINT8 cLogSpksFlockState = 0U; /* 逻辑区段SPKS封锁状态 */
UINT8 cLogSecLogicLockState = LOG_SECTION_LOCK_NO; /*逻辑区段逻辑锁闭状态*/ UINT8 cLogSecLogicLockState = LOG_SECTION_LOCK_NO; /*逻辑区段逻辑锁闭状态*/
UINT8 cLogSecLockDir = CI_SYSTEM_DIRECTION_NONE; /*逻辑区段锁闭方向*/ UINT8 cLogSecLockDir = CI_SYSTEM_DIRECTION_NONE; /*逻辑区段锁闭方向*/
UINT8 chLogSecBelLogRouteSum = 0U;/*逻辑区段所属逻辑进路数目*/ UINT8 chLogSecBelLogRouteSum = 0U;/*逻辑区段所属逻辑进路数目*/
UINT8 chLogSecEmergXianSu = 0U;/*逻辑区段紧急临时限速状态*/ UINT8 chLogSecEmergXianSu = 0U;/*逻辑区段紧急临时限速状态*/
UINT8 chRcWorkMode = 0U; /*RC工作模式*/
switch (MaskType) switch (MaskType)
{ {
case MASK_TYPE_LOGICSECTION_UTOCCUPY: case MASK_TYPE_LOGICSECTION_UTOCCUPY:
@@ -1364,15 +1402,33 @@ UINT8 LogicSectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UIN
SetMaskValue(MaskId, dataBuf); SetMaskValue(MaskId, dataBuf);
} }
break; break;
case MASK_TYPE_LOGICSECTION_ARB: case MASK_TYPE_LOGSEC_CBTC_ARB:
/* 逻辑区段ARB状态 */ /* 逻辑区段CBTC_ARB状态 */
cLogArbState = GetLgcArbState(DeviceId); cLogCbtcArbState = GetLogSecCbtcArbState(DeviceId);
/*区段ARB*/ /*当前系统为CI,获取逻辑区段ARB状态*/
if (LGC_SECTION_ARB_YES == cLogArbState) if (LGC_SECTION_ARB_YES == cLogCbtcArbState)
{ {
/*设置码位为1*/ /*设置码位为1*/
SetMaskValue(MaskId, dataBuf); SetMaskValue(MaskId, dataBuf);
} }
else
{
;
}
break;
case MASK_TYPE_LOGSEC_PB_TACS_ARB:
/* 逻辑区段PC_TACS_ARB状态 */
cLogPbTacsArbState = GetLogSecPbTacsArbState(DeviceId);
/*当前系统为RC,获取逻辑区段ARB状态*/
if (LGC_SECTION_ARB_YES == cLogPbTacsArbState)
{
/*设置码位为1*/
SetMaskValue(MaskId, dataBuf);
}
else
{
;
}
break; break;
case MASK_TYPE_LOGICSECTION_SPKS_FLOCK: case MASK_TYPE_LOGICSECTION_SPKS_FLOCK:
/* 逻辑区段SPKS封锁状态 */ /* 逻辑区段SPKS封锁状态 */
@@ -1387,7 +1443,7 @@ UINT8 LogicSectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UIN
/*设置码位为1*/ /*设置码位为1*/
SetMaskValue(MaskId, dataBuf); SetMaskValue(MaskId, dataBuf);
} }
break; break;
case MASK_TYPE_LOGICSECTION_EMERG_XIANSU: case MASK_TYPE_LOGICSECTION_EMERG_XIANSU:
/* 逻辑区段紧急临时限速状态 */ /* 逻辑区段紧急临时限速状态 */
@@ -1906,11 +1962,10 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data
UINT16 wRtnIndicatorDevId = 0U;/*无人折返报警灯设备ID*/ UINT16 wRtnIndicatorDevId = 0U;/*无人折返报警灯设备ID*/
UINT8 chNonRrnAdhesionState = 0U;/*无人折返按钮粘连状态*/ UINT8 chNonRrnAdhesionState = 0U;/*无人折返按钮粘连状态*/
UINT8 cEsbCutErrFlag = ESB_ERROR_FLAG_NO; /*紧急关闭旁路按钮故障标志*/ UINT8 cEsbCutErrFlag = ESB_ERROR_FLAG_NO; /*紧急关闭旁路按钮故障标志*/
UINT8 cPsdExceptOpenState = 0U; /*屏蔽门异常打开状态*/ UINT8 cPsdExceptState = 0U; /*屏蔽门异常状态*/
UINT8 chJXTCMutualLockFaultState = 0U; /*间隙探测按钮故障状态*/ UINT8 chJXTCMutualLockFaultState = 0U; /*间隙探测按钮故障状态*/
UINT8 chIBPBtnState = 0U; /*IBP按钮状态*/ UINT8 chIBPBtnState = 0U; /*IBP按钮状态*/
UINT8 chIBPBtnFaultState = 0U; /*IBP按钮故障状态*/ UINT8 chIBPBtnFaultState = 0U; /*IBP按钮故障状态*/
UINT8 chJXTCState = 0U; /*间隙探测状态*/
UINT8 cEsbCutBtnState = 0U; /*紧急关闭旁路按钮激活状态*/ UINT8 cEsbCutBtnState = 0U; /*紧急关闭旁路按钮激活状态*/
UINT8 cOnePlatEsbState = 0U; /*同站紧急按钮激活状态*/ UINT8 cOnePlatEsbState = 0U; /*同站紧急按钮激活状态*/
UINT8 cOnePlatEsbCutState = 0U; /*同站紧急旁路按钮激活状态*/ UINT8 cOnePlatEsbCutState = 0U; /*同站紧急旁路按钮激活状态*/
@@ -2308,15 +2363,15 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data
/*视频清客驱动状态为无人或者无效,红灯码位无效*/ /*视频清客驱动状态为无人或者无效,红灯码位无效*/
} }
break; break;
case MASK_TYPE_PSD_EXCEPT_OPEN: /*站台屏蔽门异常打开状态码位-给ZC/ATS用*/ case MASK_TYPE_PSD_EXCEPT: /*站台屏蔽门异常状态码位-给ATS/ZC用*/
cPsdExceptOpenState = GePsdExceptOpenState(DeviceId); cPsdExceptState = GePsdExceptState(DeviceId);
if (PSD_EXCEPT_OPEN_NO == cPsdExceptOpenState) if (PSD_EXCEPT_NO == cPsdExceptState)
{ {
SetMaskValue(MaskId, dataBuf); /*PSD未异常打开,码位组1*/ SetMaskValue(MaskId, dataBuf); /*PSD未异常,码位组1*/
} }
else else
{ {
/*PSD异常打开,码位组0*/ /*PSD异常,码位组0*/
} }
break; break;
case MASK_TYPE_PSD_JXTCPANGLU_FAULT: case MASK_TYPE_PSD_JXTCPANGLU_FAULT:
@@ -4833,6 +4888,7 @@ UINT8 ParasePlantCCUHeartFrame(UINT8* dataBuf)
UINT16 curCoup = 0U; UINT16 curCoup = 0U;
UINT32 tempera = 0U; UINT32 tempera = 0U;
UINT8 flagEEPROM = 0U; UINT8 flagEEPROM = 0U;
UINT32 ccuSyn = 0u;/*通控请求序列号*/
UINT32 crcRecv = 0U; UINT32 crcRecv = 0U;
/*接收到平台心跳帧*/ /*接收到平台心跳帧*/
@@ -4874,6 +4930,9 @@ UINT8 ParasePlantCCUHeartFrame(UINT8* dataBuf)
/*EEPROM存储检验*/ /*EEPROM存储检验*/
flagEEPROM = dataBuf[ii]; flagEEPROM = dataBuf[ii];
ii += 1u; ii += 1u;
/*通控请求序列号*/
ccuSyn = LongFromChar(&dataBuf[ii]);
ii += 4u;
/*CRC校验码*/ /*CRC校验码*/
crcRecv = LongFromChar(&dataBuf[ii]); /*获取CRC*/ crcRecv = LongFromChar(&dataBuf[ii]); /*获取CRC*/
ii += 4u; ii += 4u;
@@ -4883,7 +4942,7 @@ UINT8 ParasePlantCCUHeartFrame(UINT8* dataBuf)
{ {
/*计算CRC校验码,除长度2和CRC4*/ /*计算CRC校验码,除长度2和CRC4*/
crcCheck = Tioc_PlatCommonCrc32(&dataBuf[2], 22U); crcCheck = Tioc_PlatCommonCrc32(&dataBuf[2], 26U);
if (crcCheck == crcRecv) if (crcCheck == crcRecv)
@@ -4974,6 +5033,7 @@ UINT8 ParasePlantSEBHeartFrame(UINT8* dataBuf)
UINT8 boardSEBId = 0U;/*扩展板ID */ UINT8 boardSEBId = 0U;/*扩展板ID */
UINT16 dataLengthRcv = 0U; /*帧长度*/ UINT16 dataLengthRcv = 0U; /*帧长度*/
UINT32 sebSyn = 0u; /*串口请求序列号*/
UINT32 crcRecv = 0U; /*CRC校验码*/ UINT32 crcRecv = 0U; /*CRC校验码*/
UINT32 rcvCyc = 0U; /*周期号*/ UINT32 rcvCyc = 0U; /*周期号*/
/*接收到平台心跳帧*/ /*接收到平台心跳帧*/
@@ -4997,17 +5057,20 @@ UINT8 ParasePlantSEBHeartFrame(UINT8* dataBuf)
/*数据内容 3字节*/ /*数据内容 3字节*/
ii += 5U; ii += 5U;
/*串口请求序列号*/
sebSyn = LongFromChar(&dataBuf[ii]);
ii += 4U;
/*CRC校验码*/ /*CRC校验码*/
crcRecv = LongFromChar(&dataBuf[ii]); /*获取CRC*/ crcRecv = LongFromChar(&dataBuf[ii]); /*获取CRC*/
ii += 4u; ii += 4u;
/*长度校验*/ /*总长度16字节*/ /*长度校验*/ /*总长度20字节*/
if (dataLengthRcv == ii - 2U) if (dataLengthRcv == ii - 2U)
{ {
/*计算CRC校验码,除长度2和CRC4*/ /*计算CRC校验码,除长度2和CRC4*/
crcCheck = Tioc_PlatCommonCrc32(&dataBuf[2], 10U); crcCheck = Tioc_PlatCommonCrc32(&dataBuf[2], 14U);
if (crcCheck == crcRecv) if (crcCheck == crcRecv)
@@ -989,7 +989,7 @@ UINT8 PackCiToOtherSysData(void)
reVal = PackCiToCiData(cLocalDevType, deviceIdBuf[ii]); reVal = PackCiToCiData(cLocalDevType, deviceIdBuf[ii]);
if (CI_ERROR == reVal) if (CI_ERROR == reVal)
{ {
debug_infor_printf((const)"\nPackCiToCiData Error: DstDev[0x%x]", (UINT16)(cLocalDevType) +(UINT16)(deviceIdBuf[ii])); /*组包错误*/ debug_infor_printf((const)"\nPackCiToCiData Error: DstDev[0x%x]", (UINT16)(cLocalDevType * 256U) + (UINT16)(deviceIdBuf[ii])); /*组包错误*/
} }
else else
{ {
@@ -1002,7 +1002,7 @@ UINT8 PackCiToOtherSysData(void)
reVal = PackHLHTCiToCiData(deviceIdBuf[ii]); reVal = PackHLHTCiToCiData(deviceIdBuf[ii]);
if (CI_ERROR == reVal) if (CI_ERROR == reVal)
{ {
debug_infor_printf((const)"\nPackHLHTCiToCiData Error: DstDev[0x%x]", (UINT16)(cLocalDevType)+(UINT16)(deviceIdBuf[ii]));/*组包错误*/ debug_infor_printf((const)"\nPackHLHTCiToCiData Error: DstDev[0x%x]", (UINT16)(cLocalDevType * 256U) +(UINT16)(deviceIdBuf[ii]));/*组包错误*/
} }
else else
{ {
@@ -1017,11 +1017,11 @@ UINT8 PackCiToOtherSysData(void)
} }
cSysType = GetSystemWorkType(); cSysType = GetSystemWorkType();
cLocalCiType = GetLocalCiType(); cLocalCiType = GetLocalCiType();
if ((SYSTEM_WORK_MODE_ALL == cSysType) && ((CI_TYPE_ZX == cLocalCiType) || (CI_TYPE_SCX == cLocalCiType))) if (SYSTEM_WORK_MODE_ALL == cSysType)
{ {
/*****双系统正线或试车线,组相邻控区另一个设备数据*****/ /*****双系统,组相邻控区另一个设备数据*****/
if (CI_SYSTEM_TYPE_CI == cLocalDevType) if (CI_SYSTEM_TYPE_CI == cLocalDevType)
{ {
cNearOtherDevType = CI_SYSTEM_TYPE_RC; cNearOtherDevType = CI_SYSTEM_TYPE_RC;
@@ -1048,7 +1048,7 @@ UINT8 PackCiToOtherSysData(void)
reVal = PackCiToCiData(cNearOtherDevType, deviceIdBuf[ii]); reVal = PackCiToCiData(cNearOtherDevType, deviceIdBuf[ii]);
if (CI_ERROR == reVal) if (CI_ERROR == reVal)
{ {
debug_infor_printf((const)"\nPackCiToCiData Error: DstDev[0x%x]", (UINT16)(cNearOtherDevType) +(UINT16)(deviceIdBuf[ii])); /*组包错误*/ debug_infor_printf((const)"\nPackCiToCiData Error: DstDev[0x%x]", (UINT16)(cNearOtherDevType * 256U) +(UINT16)(deviceIdBuf[ii])); /*组包错误*/
} }
else else
{ {
@@ -1068,7 +1068,7 @@ UINT8 PackCiToOtherSysData(void)
/*组本控区CI-RC数据*/ /*组本控区CI-RC数据*/
cStartLockFlag = GetStartLockFlag(); cStartLockFlag = GetStartLockFlag();
if (CI_START_LOCK_NO == cStartLockFlag) if ((CI_START_LOCK_NO == cStartLockFlag) && ((CI_TYPE_ZX == cLocalCiType) || (CI_TYPE_SCX == cLocalCiType)))
{ {
/*双系统下的正线和试车线才进行本控区CI-RC的组包*/ /*双系统下的正线和试车线才进行本控区CI-RC的组包*/
if (CI_SYSTEM_TYPE_CI == cLocalDevType) if (CI_SYSTEM_TYPE_CI == cLocalDevType)
+217 -37
View File
@@ -94,7 +94,10 @@ UINT16 ConvertSigDrvColorToSigDrvCmd(const UINT16 signalId, const UINT8 drvColor
UINT8 ocHasBlue = 0u; UINT8 ocHasBlue = 0u;
UINT8 funSwitchGreenYellow = GetCiFunctionSwitchConfig(CI_FUNCTION_SWITCH_SHOW_SIGNAL_GreenYellow);/*显示绿黄功能开关是否打开*/ UINT8 funSwitchGreenYellow = GetCiFunctionSwitchConfig(CI_FUNCTION_SWITCH_SHOW_SIGNAL_GreenYellow);/*显示绿黄功能开关是否打开*/
UINT8 funSwitchALLCloseUseBlue = GetCiFunctionSwitchConfig(FUNC_SWITCH_ZX_ALLCLOSE_USEBLUE);/*杭德正线灭灯均转蓝灯功能开关*/ UINT8 funSwitchALLCloseUseBlue = GetCiFunctionSwitchConfig(FUNC_SWITCH_ZX_ALLCLOSE_USEBLUE);/*杭德正线灭灯均转蓝灯功能开关*/
UINT8 ciType = GetLocalCiType(); UINT8 ciType = 0U;
UINT8 chSigBelongRtuId = 0U;
chSigBelongRtuId = GetSignalBelongVirCiId(signalId);
ciType = GetLocalVirCiType(chSigBelongRtuId);
switch (drvColor) switch (drvColor)
{ {
case SIGNAL_DRIVECOLOUR_RED:/*红*/ case SIGNAL_DRIVECOLOUR_RED:/*红*/
@@ -247,6 +250,15 @@ UINT8 PackCiToOcData( UINT8 deviceId)
UINT16 deviceSum = 0u; UINT16 deviceSum = 0u;
UINT16 kqChangeCommand = 0u;/*控权切换命令*/ UINT16 kqChangeCommand = 0u;/*控权切换命令*/
UINT8 chCurSystemAreaState = 0u; /*主备用模式*/ UINT8 chCurSystemAreaState = 0u; /*主备用模式*/
UINT8 chMainCotrolOCId = 0U;
UINT8 chControlCmd = 0U;
UINT8 chControlCmdNum = 0u;
UINT16 cmdIndex = 0u;
UINT8 chOcOutControlCmd = 0u;
UINT8 chOcFindPostionCmd = 0u;
UINT8 chLocalCiOCSswitch = 0u;
chLocalCiOCSswitch = GetLocalCiOCSswitch();
#if 0 #if 0
QueueClear(CiToOcDataQueue); /*清队列*/ QueueClear(CiToOcDataQueue); /*清队列*/
#endif #endif
@@ -325,7 +337,25 @@ UINT8 PackCiToOcData( UINT8 deviceId)
ShortToChar(pOcData->OcDevices[kk].DeviceId, &Ci2OcDataBuffer[ii]); ShortToChar(pOcData->OcDevices[kk].DeviceId, &Ci2OcDataBuffer[ii]);
ii += 2u; ii += 2u;
drvPos = GetSwitchDrivePostion(pOcData->OcDevices[kk].DeviceId); drvPos = GetSwitchDrivePostion(pOcData->OcDevices[kk].DeviceId);
drvCmd = ConvertSwitchDrvPosToSwDrvCmd(drvPos); chMainCotrolOCId = GetSwitchMainCotrolOCId(pOcData->OcDevices[kk].DeviceId);
if ((chMainCotrolOCId == pOcData->OcId)||(OC_S_OFF == chLocalCiOCSswitch))
{/*当前有主控OC或OC-S功能关闭*/
drvCmd = ConvertSwitchDrvPosToSwDrvCmd(drvPos);
}
else
{/*有OC-S且当前无主控,需寻表*/
drvCmd = OC_SWITCH_DRIVE_POS_KEEP;/*保持*/
chOcOutControlCmd = GetSwitchThisOcOutControlCmd(pOcData->OcDevices[kk].DeviceId, pOcData->OcId);
if (MAIN_CONTROL == chOcOutControlCmd)
{
chOcFindPostionCmd = GetSwitchThisOcFindPostionCmd(pOcData->OcDevices[kk].DeviceId, pOcData->OcId);
drvCmd = ConvertSwitchFindPosToSwFindCmd(chOcFindPostionCmd);
}
}
ShortToChar(drvCmd, &Ci2OcDataBuffer[ii]); ShortToChar(drvCmd, &Ci2OcDataBuffer[ii]);
ii += 2u; ii += 2u;
break; break;
@@ -636,6 +666,50 @@ UINT8 PackCiToOcData( UINT8 deviceId)
ii += ciSorToOcIdx; ii += ciSorToOcIdx;
} }
if (CI_SUCCESS == retVal)
{
cmdIndex = ii;
ii += 1u;
for (kk = 0u; kk < pOcData->OcDeviceNum; kk++)/*遍历设备*/
{
switch (pOcData->OcDevices[kk].DeviceType)
{
case CI_DEVICE_TYPE_SWITCH:/*道岔设备*/
{
ShortToChar(pOcData->OcDevices[kk].DeviceId, &Ci2OcDataBuffer[ii]);
ii += 2u;
if (OC_S_ON == chLocalCiOCSswitch)
{/*OS-S开关打开*/
chControlCmd = GetSwitchThisOcOutControlCmd(pOcData->OcDevices[kk].DeviceId, pOcData->OcId);
if ((MAIN_CONTROL == chControlCmd) || (STANDBY_CONTROL == chControlCmd) || (NO_CONTROL_FUN == chControlCmd))
{
Ci2OcDataBuffer[ii] = chControlCmd;
}
else
{
Ci2OcDataBuffer[ii] = STANDBY_CONTROL;
}
}
else
{/*OC-S开关关闭*/
Ci2OcDataBuffer[ii] = NO_CONTROL_FUN;
}
ii += 1u;
chControlCmdNum++;
break;
}
default:
{/*无执行*/
}
}
}
Ci2OcDataBuffer[cmdIndex]= chControlCmdNum;/*设备数量*/
}
#if 0 /*屏蔽型式实验,以后有需要再打开*/ #if 0 /*屏蔽型式实验,以后有需要再打开*/
if (curCycleNum == xingshiTestStartCycle && 1 == xingshiTestStart) if (curCycleNum == xingshiTestStartCycle && 1 == xingshiTestStart)
{ {
@@ -1124,6 +1198,10 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
UINT32 dwUpToMainCyc = 0U;/*本机升主机周期号*/ UINT32 dwUpToMainCyc = 0U;/*本机升主机周期号*/
UINT32 CiRecvOcSN = 0U;/*同步的CI数据中OC周期号*/ UINT32 CiRecvOcSN = 0U;/*同步的CI数据中OC周期号*/
HLHTHeadContextStru* pstrHlhtHeadCtx = NULL; /*CI同步的互联互通报文头上下文数据*/ HLHTHeadContextStru* pstrHlhtHeadCtx = NULL; /*CI同步的互联互通报文头上下文数据*/
UINT32 dwMainStandbyState = 0U;
UINT8 chSwitchBelongOThisOCRet = 0U;
(void)CommonMemSet(pTmpOcToCiData, (UINT32)sizeof(OcToCiOriginDataStruct),0U, (UINT32)sizeof(OcToCiOriginDataStruct));/*清内存,防止脏数据*/ (void)CommonMemSet(pTmpOcToCiData, (UINT32)sizeof(OcToCiOriginDataStruct),0U, (UINT32)sizeof(OcToCiOriginDataStruct));/*清内存,防止脏数据*/
chMainWorckMode = GetLocalCiBackUpPattern(); chMainWorckMode = GetLocalCiBackUpPattern();
dwUpToMainCyc = GetSystemUpdateMainUseCycNum(); dwUpToMainCyc = GetSystemUpdateMainUseCycNum();
@@ -1253,9 +1331,9 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
{ {
tmpDeviceId = ShortFromChar(&dataBuf[ii]); /*设备Id 2B*/ tmpDeviceId = ShortFromChar(&dataBuf[ii]); /*设备Id 2B*/
ii += 2u; ii += 2u;
chDevBelongOC = (UINT8)GetSwitchBelongOcId(tmpDeviceId); chSwitchBelongOThisOCRet = (UINT8)GetSwitchWhetherBelongThisOc(tmpDeviceId, systemId);
chDevBelongCI = GetSwitchBelongCiId(tmpDeviceId); chDevBelongCI = GetSwitchBelongCiId(tmpDeviceId);
if ((chDevBelongOC != systemId)||(chDevBelongCI != localCiId)) if ((CI_SUCCESS != chSwitchBelongOThisOCRet)||(chDevBelongCI != localCiId))
{ {
retVal = CI_ERROR; retVal = CI_ERROR;
debug_infor_printf((const)"Swicth devId:%d Belong OC/CI Error\n", tmpDeviceId); debug_infor_printf((const)"Swicth devId:%d Belong OC/CI Error\n", tmpDeviceId);
@@ -1319,20 +1397,39 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
{ {
switchBoardCheck = CI_SUCCESS; /*存在正常板卡*/ switchBoardCheck = CI_SUCCESS; /*存在正常板卡*/
} }
} dwMainStandbyState = dataBuf[ii++];/*板卡主控状态*/
pTmpOcToCiData->OcDevices[j].DeviceType = tmpDeviceType; /*设备类型 1B*/ if ((MAIN_CONTROL == dwMainStandbyState) || (STANDBY_CONTROL == dwMainStandbyState) || (NO_CONTROL_FUN == dwMainStandbyState))
pTmpOcToCiData->OcDevices[j].DeviceId = tmpDeviceId; /*设备Id 2B*/ {
pTmpOcToCiData->OcDevices[j].DeviceState = tmpDeviceState; /*设备状态 1B*/ pTmpOcToCiData->OcDevices[j].MainStandbyState[k] = dwMainStandbyState;
}
else
{
retVal = CI_ERROR;
debug_infor_printf((const)"Swicth devId %d Board ControlMode ill, mode: %d\n", tmpDeviceId, dwMainStandbyState);
break;
}
if (CI_SUCCESS == switchBoardCheck) /*0为正常 存在正常板卡*/ }
if (CI_SUCCESS == retVal)
{ {
pTmpOcToCiData->OcDevices[j].DeviceType = tmpDeviceType; /*设备类型 1B*/
pTmpOcToCiData->OcDevices[j].DeviceId = tmpDeviceId; /*设备Id 2B*/
pTmpOcToCiData->OcDevices[j].DeviceState = tmpDeviceState; /*设备状态 1B*/ pTmpOcToCiData->OcDevices[j].DeviceState = tmpDeviceState; /*设备状态 1B*/
}
else
{
/*发送ats报警*/
if (CI_SUCCESS == switchBoardCheck) /*0为正常 存在正常板卡*/
{
pTmpOcToCiData->OcDevices[j].DeviceState = tmpDeviceState; /*设备状态 1B*/
}
else
{
/*发送ats报警*/
}
} }
} }
else else
{ {
@@ -2072,10 +2169,10 @@ INT16 GetIndexBySignalId(UINT16 sigId)
/* /*
* id获取索引 * id获取索引
* void * UINT16 swId ID,UINT8 ocId OCID
* void *
*/ */
INT16 GetIndexBySwitchId(UINT16 swId) INT16 GetIndexBySwitchId(UINT16 swId,UINT16 ocId)
{ {
INT16 retIndex = -1; INT16 retIndex = -1;
@@ -2083,7 +2180,7 @@ INT16 GetIndexBySwitchId(UINT16 swId)
for (i=0u;i<m_SwitchNum;i++) for (i=0u;i<m_SwitchNum;i++)
{ {
if (m_Switches[i].DeviceId == swId) if ((m_Switches[i].DeviceId == swId)&&(ocId == m_Switches[i].OcId))
{ {
retIndex = (INT16)i; retIndex = (INT16)i;
break; break;
@@ -2162,35 +2259,48 @@ void InitOcSignals(void)
*/ */
void InitOcSwitchs(void) void InitOcSwitchs(void)
{ {
UINT16 i = 0u; UINT16 i = 0u;
UINT16 j = 0u;
UINT8 k = 0U; UINT8 k = 0U;
SwitchConfigDataStruct *pSwitch = NULL; SwitchConfigDataStruct *pSwitch = NULL;
UINT8 localCi = 0u; UINT8 localCi = 0u;
localCi =GetSystemParaLocalCiId(); localCi =GetSystemParaLocalCiId();
m_SwitchNum = 0u; m_SwitchNum = 0u;
pSwitch = GetSwitchConfigData(); pSwitch = GetSwitchConfigData();
for (i=0u;i<SWITCH_SUM_MAX;i++)
if (NULL != pSwitch)
{ {
if ((CI_SWITCH_MAX == m_SwitchNum) || (NULL == pSwitch)) for (i = 0u; i < SWITCH_SUM_MAX; i++)
{ {
/*超出索引,给出调试警告信息*/ for (j = 0u; j < pSwitch[i].chSwitchBelongOcNum; j++)
debug_infor_printf((const)"InitOcSwitchs():error"); {/*线性存储2个OC的临时数据*/
break; if (CI_SWITCH_MAX == m_SwitchNum)
} {
if ((0u < pSwitch[i].SwitchId) && (0u < pSwitch[i].BelongOcId)&&(localCi == pSwitch[i].BelongCiId)) /*超出索引,给出调试警告信息*/
{ debug_infor_printf((const)"InitOcSwitchs():error");
m_Switches[m_SwitchNum].DeviceId = pSwitch[i].SwitchId; break;
m_Switches[m_SwitchNum].DeviceType = OC_DEVICE_TYPE_SWITCH; }
m_Switches[m_SwitchNum].DeviceState = OC_SWITCH_POSITION_SIKAI; if ((0u < pSwitch[i].SwitchId) && (0u < pSwitch[i].BelongOcId) && (localCi == pSwitch[i].BelongCiId))
m_Switches[m_SwitchNum].BoardNum = 0U; {
for (k = 0U; k < MAX_OC_SWITCH_INCLUDE_BOARD_NUM; k++) m_Switches[m_SwitchNum].DeviceId = pSwitch[i].SwitchId;
{ m_Switches[m_SwitchNum].DeviceType = OC_DEVICE_TYPE_SWITCH;
m_Switches[m_SwitchNum].BoardState[k] = 0xffU; m_Switches[m_SwitchNum].DeviceState = OC_SWITCH_POSITION_SIKAI;
m_Switches[m_SwitchNum].BoardAddr[k] = 0U; m_Switches[m_SwitchNum].BoardNum = 0U;
for (k = 0U; k < MAX_OC_SWITCH_INCLUDE_BOARD_NUM; k++)
{
m_Switches[m_SwitchNum].BoardState[k] = 0xffU;
m_Switches[m_SwitchNum].BoardAddr[k] = 0U;
}
m_Switches[m_SwitchNum].OcId = pSwitch[i].belongOCConfigData[j].OcId;/**/
m_SwitchNum++;
}
}
if (CI_SWITCH_MAX == m_SwitchNum)
{
debug_infor_printf((const)"InitOcSwitchs():error1");
break;
} }
m_Switches[m_SwitchNum].OcId = pSwitch[i].BelongOcId;
m_SwitchNum++;
} }
} }
} }
@@ -2249,6 +2359,8 @@ void ConvertOcOriginDataToOcSigSwDev(UINT8 devId)
UINT8 chOcId = 0U; UINT8 chOcId = 0U;
UINT8 chOcBelongCI = 0U;/*OC所属联锁*/ UINT8 chOcBelongCI = 0U;/*OC所属联锁*/
UINT8 chLocalCiId = GetSystemParaLocalCiId(); UINT8 chLocalCiId = GetSystemParaLocalCiId();
UINT8 chSwitchszPlusBoxId = 0U;
UINT8 index = 0u;
for (i=0U;i<m_OcToCiOrginDataNum;i++)/*遍历OC*/ for (i=0U;i<m_OcToCiOrginDataNum;i++)/*遍历OC*/
{ {
chOcId = (UINT8)m_OcToCiOrginDataArr[i].OcId & 0xFFU; chOcId = (UINT8)m_OcToCiOrginDataArr[i].OcId & 0xFFU;
@@ -2289,7 +2401,7 @@ void ConvertOcOriginDataToOcSigSwDev(UINT8 devId)
} }
else else
{/*道岔*/ {/*道岔*/
ind = GetIndexBySwitchId(pOcDevice->DeviceId); ind = GetIndexBySwitchId(pOcDevice->DeviceId, pOcDevice->OcId);
if ((ind >=0) && (OC_DEVICE_TYPE_SWITCH == pOcDevice->DeviceType)) if ((ind >=0) && (OC_DEVICE_TYPE_SWITCH == pOcDevice->DeviceType))
{ {
if ((m_Switches[ind].OcId == pOcDevice->OcId) && if ((m_Switches[ind].OcId == pOcDevice->OcId) &&
@@ -2302,6 +2414,8 @@ void ConvertOcOriginDataToOcSigSwDev(UINT8 devId)
{ {
m_Switches[ind].BoardAddr[k] = pOcDevice->BoardAddr[k]; m_Switches[ind].BoardAddr[k] = pOcDevice->BoardAddr[k];
m_Switches[ind].BoardState[k] = pOcDevice->BoardState[k]; m_Switches[ind].BoardState[k] = pOcDevice->BoardState[k];
} }
/* 保存数据 */ /* 保存数据 */
m_Switches[ind].chSwitchIncldeZzjNum = pOcDevice->chSwitchIncldeZzjNum; m_Switches[ind].chSwitchIncldeZzjNum = pOcDevice->chSwitchIncldeZzjNum;
@@ -2309,6 +2423,36 @@ void ConvertOcOriginDataToOcSigSwDev(UINT8 devId)
{ {
m_Switches[ind].szSwitchIncldeZzjState[k] = pOcDevice->szSwitchIncldeZzjState[k]; m_Switches[ind].szSwitchIncldeZzjState[k] = pOcDevice->szSwitchIncldeZzjState[k];
} }
for (k = 0U; k < MAX_OC_SWITCH_INCLUDE_BOARD_NUM; k++)
{/*给所有OC设置主控状态*/
m_Switches[ind].MainStandbyState[k] = pOcDevice->MainStandbyState[k];
}
chSwitchszPlusBoxId = GetSwitchszPlusBoxId(m_Switches[ind].DeviceId, m_Switches[ind].OcId);
for (k = 0U; k < m_OcToCiOrginDataArr[i].chPbNum; k++)
{
if (chSwitchszPlusBoxId == m_OcToCiOrginDataArr[i].szPlusBox[k].chPbId)
{
if (SWITCH_BOX_NORMAL == m_OcToCiOrginDataArr[i].szPlusBox[k].chAsState)
{/*正常*/
SetSwitchOcPlusBoxSateState(m_Switches[ind].DeviceId, m_Switches[ind].OcId, SWITCH_BOX_NORMAL);
}
else
{
SetSwitchOcPlusBoxSateState(m_Switches[ind].DeviceId, m_Switches[ind].OcId, SWITCH_BOX_FAULT);
}
break;
}
}
/*将板卡故障状态导入*/
for (k = 0U; k < m_Switches[ind].BoardNum; k++)
{
SetSwitchThisOCBoardState(m_Switches[ind].DeviceId, m_Switches[ind].OcId, m_Switches[ind].BoardAddr[k], m_Switches[ind].BoardState[k]);
}
} }
else else
{ {
@@ -2352,6 +2496,10 @@ void ConvertOcOriginDataToOcSigSwDev(UINT8 devId)
} }
} }
else else
{ {
@@ -2867,6 +3015,38 @@ UINT8 OcInputSignalStateCheck(const UINT8 chInput)
} }
return retVal; return retVal;
} }
/*
*
*
*
* UINT8 drvColor
* 0:
* 1:
* add by mpt 20260330
*/
UINT16 ConvertSwitchFindPosToSwFindCmd(UINT8 chFindPos)
{
UINT16 retDrvCmd = 0u;
switch (chFindPos)
{
case FIND_DINGWEI_CMD:
retDrvCmd = OC_SWITCH_FIND_DINGWEI;
break;
case FIND_FANWEI_CMD:
retDrvCmd = OC_SWITCH_FIND_FANWEI;
break;
case INIT_FIND_CMD:
retDrvCmd = OC_SWITCH_ININ_FIAND;
break;
case NO_FIND_CMD:
retDrvCmd = OC_SWITCH_DRIVE_POS_KEEP;
break;
default:
retDrvCmd = OC_SWITCH_DRIVE_POS_KEEP;
break;
}
return retDrvCmd;
}
+15 -7
View File
@@ -55,7 +55,7 @@
#define MAX_OC_PLUS_BOX_NUM ((UINT16)3) /*一个OC支持最大执行电插箱(可达最大值)*/ #define MAX_OC_PLUS_BOX_NUM ((UINT16)3) /*一个OC支持最大执行电插箱(可达最大值)*/
#define MAX_OC_DEVICE_SWAP_MAX ((UINT16)83) /*一个OC最大切系板卡数量(MAX_OC_DEVICE_NUM/2)(不可达最大值) */ #define MAX_OC_DEVICE_SWAP_MAX ((UINT16)83) /*一个OC最大切系板卡数量(MAX_OC_DEVICE_NUM/2)(不可达最大值) */
#define MAX_OC_SWITCH_INCLUDE_ZZJ_NUM ((UINT16)10) /*一个道岔支持最大转辙机个数(可达最大值)*/ #define MAX_OC_SWITCH_INCLUDE_ZZJ_NUM ((UINT16)10) /*一个道岔支持最大转辙机个数(可达最大值)*/
#define MAX_OC_SWITCH_INCLUDE_BOARD_NUM ((UINT8)10) /*一个道岔支持最大板卡数量(不可达最大值)*/
#define Max_OC_GD_NUM ((UINT16)252) /*一个oc支持最大多少个轨道区段(不可达最大值)*/ #define Max_OC_GD_NUM ((UINT16)252) /*一个oc支持最大多少个轨道区段(不可达最大值)*/
#define MAX_OC_DEVICE_PSD_MAX ((UINT8)2) /*一个OC最大屏蔽门数量(可达最大值)*/ #define MAX_OC_DEVICE_PSD_MAX ((UINT8)2) /*一个OC最大屏蔽门数量(可达最大值)*/
@@ -95,6 +95,7 @@ typedef struct s_OcDevState
UINT8 BoardNum; /*板卡数量*/ UINT8 BoardNum; /*板卡数量*/
UINT8 BoardAddr[MAX_OC_SWITCH_INCLUDE_BOARD_NUM]; /*板卡地址*/ UINT8 BoardAddr[MAX_OC_SWITCH_INCLUDE_BOARD_NUM]; /*板卡地址*/
UINT8 BoardState[MAX_OC_SWITCH_INCLUDE_BOARD_NUM]; /*板卡状态 正常0x0000 错误发错误码*/ UINT8 BoardState[MAX_OC_SWITCH_INCLUDE_BOARD_NUM]; /*板卡状态 正常0x0000 错误发错误码*/
UINT8 MainStandbyState[MAX_OC_SWITCH_INCLUDE_BOARD_NUM]; /*主备状态*/
}OcDeviceStruct; }OcDeviceStruct;
typedef struct s_OcDoBoardData typedef struct s_OcDoBoardData
@@ -436,12 +437,10 @@ INT16 GetIndexBySignalId(UINT16 sigId);
/* /*
* id获取索引 * id获取索引
* * UINT16 swId ID,UINT8 ocId OCID
* Id *
*
* Int16:Id
*/ */
INT16 GetIndexBySwitchId(UINT16 swId); INT16 GetIndexBySwitchId(UINT16 swId, UINT16 ocId);
/* /*
* id获取索引 * id获取索引
@@ -513,7 +512,16 @@ UINT8 OcInputStateCheck(const UINT8 chInput, const UINT8 chOtherValid);
* CI_ERROR CI_SUCCESS * CI_ERROR CI_SUCCESS
*/ */
UINT8 OcInputSignalStateCheck(const UINT8 chInput); UINT8 OcInputSignalStateCheck(const UINT8 chInput);
/*
*
*
*
* UINT8 drvColor
* 0:
* 1:
* add by mpt 20260330
*/
UINT16 ConvertSwitchFindPosToSwFindCmd(UINT8 chFindPos);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
File diff suppressed because it is too large Load Diff
@@ -36,6 +36,8 @@
#include "../IO/DeviceRelayDataProcess.h" #include "../IO/DeviceRelayDataProcess.h"
#include "dquIdmapQuery.h" #include "dquIdmapQuery.h"
#include "../Section/LogicSectionConfigDataManage.h" #include "../Section/LogicSectionConfigDataManage.h"
#include "AxisAssertDefine.h"
#include "AxisAssertManageAPI.h"
#define CI_PSD_COMM_STATE_GOOD ((UINT8)0x55) #define CI_PSD_COMM_STATE_GOOD ((UINT8)0x55)
@@ -53,7 +55,7 @@
#define CI_VOBC_NO_LOCK ((UINT8)0x00) /*CI给后备通道发站外直轨锁闭方向,默认值*/ #define CI_VOBC_NO_LOCK ((UINT8)0x00) /*CI给后备通道发站外直轨锁闭方向,默认值*/
#define CI_VOBC_INTERFACE_INFOTYPE ((UINT16)0x0206) /*互联互通CI_VOBC接口信息类型*/ #define CI_VOBC_INTERFACE_INFOTYPE ((UINT16)0x0206) /*互联互通CI_VOBC接口信息类型*/
#define CI_VOBC_BACKUP_INTERFACE_INFOTYPE ((UINT16)0x0402) /*后备模式的CI_VOBC接口信息类型*/ #define CI_VOBC_BACKUP_INTERFACE_INFOTYPE ((UINT16)0x0402) /*后备模式的CI_VOBC接口信息类型*/
#define VOBC_CI_INFO_TYPE_PSD_CONTROL ((UINT16)0x0201) /*VOBC_CI屏蔽门控制报文类型*/ #define VOBC_CI_INFO_TYPE_PSD_CONTROL ((UINT16)0x0201) /*VOBC_CI屏蔽门控制报文类型*/
#define VOBC_CI_INFO_TYPE_BACKUP ((UINT16)0x0308) /*VOBC_CI备用通道报文类型*/ #define VOBC_CI_INFO_TYPE_BACKUP ((UINT16)0x0308) /*VOBC_CI备用通道报文类型*/
@@ -73,6 +75,10 @@
#define CI_VOBC_BACKUP_STATE_INFO ((UINT16)0x0211) /*CI=>VOBC后备运行状态信息*/ #define CI_VOBC_BACKUP_STATE_INFO ((UINT16)0x0211) /*CI=>VOBC后备运行状态信息*/
#define VOBC_CI_INFO_TYPE_BACKUU_CONTROL ((UINT16)0x0212) /*VOBC=>CI后备运行控制信息*/ #define VOBC_CI_INFO_TYPE_BACKUU_CONTROL ((UINT16)0x0212) /*VOBC=>CI后备运行控制信息*/
/*VOBC_CI点连式信息帧-目前仅互联互通接口具备,帧类型与全自动运行洗车重复,若需要适配其他接口,需要重新排帧类型*/
#define VOBC_CI_INFO_TYPE_BLOCLINK ((UINT16)0x020b) /*VOBC_CI点连式信息帧类型*/
#define CI_VOBC_INFO_TYPE_BLOCLINK ((UINT16)0x020c) /*CI_VOBC点连式信息帧类型*/
#define VOBC_CI_GAP_DETECT_CMD_START ((UINT8)0x55) /*VOBC2CI启动间隙探测命令*/ #define VOBC_CI_GAP_DETECT_CMD_START ((UINT8)0x55) /*VOBC2CI启动间隙探测命令*/
#define VOBC_CI_GAP_DETECT_CMD_STOP ((UINT8)0xAA) /*VOBC2CI停止间隙探测命令*/ #define VOBC_CI_GAP_DETECT_CMD_STOP ((UINT8)0xAA) /*VOBC2CI停止间隙探测命令*/
#define VOBC_CI_GAP_DETECT_CMD_DEFAULT ((UINT8)0xFF) /*VOBC2CI默认间隙探测命令*/ #define VOBC_CI_GAP_DETECT_CMD_DEFAULT ((UINT8)0xFF) /*VOBC2CI默认间隙探测命令*/
@@ -106,7 +112,8 @@
#define VOBC_RC_INTERFACE_INFOTYPE ((UINT16)0x0217U) /*VOBC-RC接口,RC-VOBC接口*/ #define VOBC_RC_INTERFACE_INFOTYPE ((UINT16)0x0217U) /*VOBC-RC接口,RC-VOBC接口*/
#define VOBC_RC_INFO_STATE ((UINT16)0x0201U) /*VOBC->RC控制信息,周期发送*/ #define VOBC_RC_INFO_STATE ((UINT16)0x0201U) /*VOBC->RC控制信息,周期发送*/
#define RC_VOBC_HEART_FRAME ((UINT16)0x0202U) /*RC->VOBC心跳信息,周期发送*/ #define RC_VOBC_HEART_FRAME ((UINT16)0x0202U) /*RC->VOBC心跳信息,周期发送*/
#define RC_VOBC_STATE_FRAME ((UINT16)0x0205U) /*RC->VOBC设备状态信息,周期发送*/
#define CI_IVOC_PRTCL_VER ((UINT8)0x01U) /*CI_VOBC协议版本号*/ #define CI_IVOC_PRTCL_VER ((UINT8)0x01U) /*CI_VOBC协议版本号*/
@@ -145,9 +152,9 @@
#define IVOC_CI_LOGOUT_NORMAL ((UINT8)0x00U) /*IVOC到IC 正常注销*/ #define IVOC_CI_LOGOUT_NORMAL ((UINT8)0x00U) /*IVOC到IC 正常注销*/
#define IVOC_CI_LOGOUT_SLEEP ((UINT8)0x01U) /*IVOC到IC 休眠注销*/ #define IVOC_CI_LOGOUT_SLEEP ((UINT8)0x01U) /*IVOC到IC 休眠注销*/
#define VOBC_CI_DIR_UP ((UINT8)0x55U) /*IVOC到IC 上行*/ #define VOBC_CI_DIR_UP ((UINT8)0x55U) /*VOBC-CI 上行*/
#define VOBC_CI_DIR_DOWN ((UINT8)0xAAU) /*IVOC到IC 下行*/ #define VOBC_CI_DIR_DOWN ((UINT8)0xAAU) /*VOBC-CI 下行*/
#define VOBC_CI_DIR_DEF ((UINT8)0xFFU) /*IVOC到IC 默认*/ #define VOBC_CI_DIR_DEF ((UINT8)0xFFU) /*VOBC-CI 默认*/
#define CI_IVOC_SWITCH_POSTION_DING ((UINT8)0x55U) /*CI到IVOC道岔定位状态*/ #define CI_IVOC_SWITCH_POSTION_DING ((UINT8)0x55U) /*CI到IVOC道岔定位状态*/
#define CI_IVOC_SWITCH_POSTION_FAN ((UINT8)0xAAU) /*CI到IVOC道岔反位状态*/ #define CI_IVOC_SWITCH_POSTION_FAN ((UINT8)0xAAU) /*CI到IVOC道岔反位状态*/
@@ -225,6 +232,7 @@
#define IVOC_CI_FLOODGATE_CLOSE_ALLOW_SUM ((UINT8)50U) /*IVOC到CI防淹门关闭允许的数量最大值*/ #define IVOC_CI_FLOODGATE_CLOSE_ALLOW_SUM ((UINT8)50U) /*IVOC到CI防淹门关闭允许的数量最大值*/
#define IVOC_CI_GARAGEDOOR_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_YUXIANOPEN_ROUTE_MAX ((UINT8)200U) /*CI到IVOC预先开放进路最大值*/
#define CI_IVOC_COM_ERR_RC_NUM_MAX ((UINT8)5U) /*CI到IVOC通信故障RC最大值*/
#define CI_IVOC_URGENT_YES ((UINT8)0x55U) /*CI到IVOC 紧急制动状态有效*/ #define CI_IVOC_URGENT_YES ((UINT8)0x55U) /*CI到IVOC 紧急制动状态有效*/
#define CI_IVOC_URGENT_NO ((UINT8)0xaaU) /*CI到IVOC 紧急制动状态无效*/ #define CI_IVOC_URGENT_NO ((UINT8)0xaaU) /*CI到IVOC 紧急制动状态无效*/
@@ -243,6 +251,23 @@
#define TRAIN_LEN_MIN 1000U /*最小车长*/ #define TRAIN_LEN_MIN 1000U /*最小车长*/
#define TRAIN_LEN_MAX 50000U /*最大车长*/ #define TRAIN_LEN_MAX 50000U /*最大车长*/
#define VOBC_CI_BLOCLINK_BLOCK_CTRL ((UINT8)0x01) /*点式列车控制级别*/
#define VOBC_CI_BLOCLINK_CI_CTRL ((UINT8)0x02) /*联锁控制级别*/
#define VOBC_CI_BLOCLINK_CI_DEFAULT ((UINT8)0xFF) /*默认值*/
#define CI_VOBC_SWITCH_MAX ((UINT8)20U) /*CI-VOBC点连式道岔数量最大值*/
#define CI_VOBC_OTHER_EQUIPMENT_MAX ((UINT8)10U) /*CI-VOBC点连式其他设备数量最大值*/
#define CI_VOBC_XIANSU_NOT ((UINT8)0xaaU) /*CI-VOBC点连式未设置临时限速*/
#define CI_VOBC_XIANSU_YES ((UINT8)0x55U) /*CI-VOBC点连式已设置临时限速*/
#define CI_VOBC_DESTINATION_TYPE_RETURN ((UINT8)0xaaU) /*CI-VOBC点连式目的地属性-折返*/
#define CI_VOBC_DESTINATION_TYPE_LIECHE ((UINT8)0x55U) /*CI-VOBC点连式目的地属性-直通*/
#define CI_VOBC_FLOOD_STATE_OPEN ((UINT8)0xaaU) /*CI-VOBC点连式防淹门开启锁定状态且无关门请求*/
#define CI_VOBC_FLOOD_STATE_CLOSE ((UINT8)0x55U) /*CI-VOBC点连式防淹非开启锁定状态或有关门请求*/
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@@ -286,6 +311,18 @@ typedef struct S_IvocToCiCmdStruct
UINT16 wCmdDevId[IVOC_CI_CMD_DEVICE_MAX]; /* 命令设备ID数组*/ UINT16 wCmdDevId[IVOC_CI_CMD_DEVICE_MAX]; /* 命令设备ID数组*/
}IvocCmdStru; }IvocCmdStru;
/*点连式信息*/
typedef struct S_VobcToCiBlocLinkStruct
{
UINT8 chBlocLinkTrainLevel; /*点连式运行级别*/
UINT32 chBlocLinkCycle; /*点连式通信周期*/
UINT8 chTrainDirection; /*运行方向*/
UINT16 wTrainMaxSafeHeadLink; /*列车最大安全前端所处Link*/
UINT32 dwTrainMaxSafeHeadOffset; /*列车最大安全前端偏移量*/
UINT16 wTrainMinSafeTailLink; /*列车最小安全后端所处link*/
UINT32 dwTrainMinSafeTailOffset; /*列车最小安全后端偏移量*/
}VobcToCiBlocLinkStruct;
/*与联锁通信的Vobc信息*/ /*与联锁通信的Vobc信息*/
typedef struct S_VobcToCiDataStruct typedef struct S_VobcToCiDataStruct
{ {
@@ -295,6 +332,7 @@ typedef struct S_VobcToCiDataStruct
UINT8 washTrainRequest; /*洗车请求信息*/ UINT8 washTrainRequest; /*洗车请求信息*/
UINT8 headWashStopSteadyInfo; /*头端洗位停稳信息,洗车停稳1*/ UINT8 headWashStopSteadyInfo; /*头端洗位停稳信息,洗车停稳1*/
UINT8 tailWashStopSteadyInfo; /*尾端洗位停稳信息,洗车停稳2*/ UINT8 tailWashStopSteadyInfo; /*尾端洗位停稳信息,洗车停稳2*/
UINT8 couplingWashStopSteadyInfo; /*联挂端洗位停稳信息,洗车停稳3*/
UINT8 passWashMachineRequest; /*通过洗车机请求信息*/ UINT8 passWashMachineRequest; /*通过洗车机请求信息*/
UINT8 washPauseRequest; /*暂停洗车请求*/ UINT8 washPauseRequest; /*暂停洗车请求*/
UINT8 chWashMachineWorkMode; /*洗车机工作模式设置*/ UINT8 chWashMachineWorkMode; /*洗车机工作模式设置*/
@@ -309,7 +347,9 @@ typedef struct S_VobcToCiDataStruct
UINT16 vobcLogId; /*互联互通4IP VOBC1端或2端标识*/ UINT16 vobcLogId; /*互联互通4IP VOBC1端或2端标识*/
VobcToCiPsdDataStruct PsdData[VOBC_TO_CI_TRAIN_PSD_MAX]; /*关联屏蔽门数据*/ VobcToCiPsdDataStruct PsdData[VOBC_TO_CI_TRAIN_PSD_MAX]; /*关联屏蔽门数据*/
UINT32 signalID; /*VOBC->CI信号机ID*/ UINT32 signalID; /*VOBC->CI信号机ID*/
VobcToCiBlocLinkStruct strBlocLinkData; /*VOBC->CI点连式信息*/
/*add by qw.liu 2022-02-24 增加车车新接口字段*/ /*add by qw.liu 2022-02-24 增加车车新接口字段*/
UINT8 chTrainLevel; /*列车运行级别:01:VBTC;02:ITC;03:UR;04:ABL*/ UINT8 chTrainLevel; /*列车运行级别:01:VBTC;02:ITC;03:UR;04:ABL*/
UINT8 chTrainMode; /*列车模式*/ UINT8 chTrainMode; /*列车模式*/
@@ -809,6 +849,32 @@ UINT8 GetRecvVobcControlMode(const UINT16 wVobcId);
* Create fan 20250725 * Create fan 20250725
*/ */
UINT8 PackCiToIvocOpenRouteNotNearInfo(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wTrainId); UINT8 PackCiToIvocOpenRouteNotNearInfo(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wTrainId);
/*
* VOBC点连式数据
* UINT8* CiToVobcDataBuffer buffer
* UINT16* ii
* VobcToCiDataStruct *vobcToCiDataStru VOBC-CI数据
*
* Create lyj 20260314
*/
void PackVobcBlocLinkData(UINT8* CiToVobcDataBuffer, UINT16* ii, VobcToCiDataStruct* vobcToCiDataStru);
/*
* VOBC点连式数据
* const UINT8* dataBuf,
* const UINT16 dataLength,
* VobcToCiDataStruct* vobcToCiDataStru VOBC到CI结构体数据
*
* Create lyj 20260314
*/
UINT8 ParseVobcBlocLinkData(const UINT8* dataBuf, const UINT16 dataLength, VobcToCiDataStruct* vobcToCiDataStru);
/*
*
* const UINT16 wCheckDeviceId ID
* const UINT16* pDeviceBuf
* const UINT8 wDeviceNum
*
*/
UINT8 CheckRepeatData(const UINT16 wCheckDeviceId, const UINT16* pDeviceBuf, const UINT8 wDeviceNum);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
+268 -10
View File
@@ -28,6 +28,11 @@ UINT8 lineIdentity = 0u; /*
ZcToCiDynamicDataStruct gZcToCiDymDataStru = { 0U }; /*ZC动态数据结构体*/ ZcToCiDynamicDataStruct gZcToCiDymDataStru = { 0U }; /*ZC动态数据结构体*/
UINT8 gCbtcCrossNumZc = 0u; /*主控CBTC列车跨压数量*/
CbtcCrossStructZC gCbtcCrossStructZc[ALL_CBTC_CROSS_SUM_MAX] = { 0u }; /*主控CBTC列车跨压信息*/
static UINT8 ParseZcCbtcCrossData(UINT8* pDataBuf, UINT16 dataLen);
static UINT16 PackRcTacsCrossData(UINT8 *pDataBuf);
/* /*
* ZC单帧数据 * ZC单帧数据
@@ -41,8 +46,6 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId)
{ {
UINT8* sourceId = NULL; /*源ID*/ UINT8* sourceId = NULL; /*源ID*/
UINT16 ii = 0u; UINT16 ii = 0u;
UINT16 jj = 0u;
UINT8 kk = 0u;
UINT8 retVal = CI_SUCCESS; UINT8 retVal = CI_SUCCESS;
UINT32 dwStep = 0U; UINT32 dwStep = 0U;
UINT8 galHeadSaved = 0u; /*通用头是否已保存标志,1保存;0未保存*/ UINT8 galHeadSaved = 0u; /*通用头是否已保存标志,1保存;0未保存*/
@@ -133,7 +136,7 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId)
/*报文有效,继续解析*/ /*报文有效,继续解析*/
retVal = CI_SUCCESS; retVal = CI_SUCCESS;
{ {
if (DATA_TYPE_NEW == chDataType) if (DATA_TYPE_MAIN_BRANCH == chDataType)
{ {
while (wTmpDataLen < hlhtGalHead.totalDataLen) while (wTmpDataLen < hlhtGalHead.totalDataLen)
{ {
@@ -191,6 +194,11 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId)
retVal = ParseZcIteCutData(&dataBuf[ii], wMsgCheckLen); retVal = ParseZcIteCutData(&dataBuf[ii], wMsgCheckLen);
dwStep |= 0x00001U; dwStep |= 0x00001U;
break; break;
case ZC_TO_RC_CBTC_CROSS_MSG:
/*解析ZC-CI的CBTC主控列车跨压信息*/
retVal = ParseZcCbtcCrossData(&dataBuf[ii], wMsgCheckLen);
dwStep |= 0x00002U;
break;
default: default:
retVal = CI_ERROR; retVal = CI_ERROR;
break; break;
@@ -1072,6 +1080,7 @@ UINT8 PackCiToZcData( UINT8 deviceId)
UINT32 dwHlhtHSrcSN = 0u; UINT32 dwHlhtHSrcSN = 0u;
UINT32 dwHlhtHRcvSN = 0u; UINT32 dwHlhtHRcvSN = 0u;
UINT16 totallenIndex = 0U; UINT16 totallenIndex = 0U;
UINT16 wCrossFrameLen = 0U;
UINT8 chDataType = 0U; UINT8 chDataType = 0U;
localCi = GetSystemParaLocalCiId(); /*获取本地联锁ID*/ localCi = GetSystemParaLocalCiId(); /*获取本地联锁ID*/
@@ -1151,7 +1160,7 @@ UINT8 PackCiToZcData( UINT8 deviceId)
totallenIndex = ii; totallenIndex = ii;
ii += 2u;/*通用报文头中的应用层报文总长度*/ ii += 2u;/*通用报文头中的应用层报文总长度*/
if (DATA_TYPE_NEW == chDataType) if (DATA_TYPE_MAIN_BRANCH == chDataType)
{ {
ii += 2u;/*通用报文头中的应用层报文长度(0x202报文长度)*/ ii += 2u;/*通用报文头中的应用层报文长度(0x202报文长度)*/
@@ -1167,16 +1176,27 @@ UINT8 PackCiToZcData( UINT8 deviceId)
/*组码位信息*/ /*组码位信息*/
(void)MaskPack(CI_SYSTEM_TYPE_ZC,&CiToZcDataBuffer[ii]); (void)MaskPack(CI_SYSTEM_TYPE_ZC,&CiToZcDataBuffer[ii]);
ii = (UINT16) (ii + SendMaskSum); ii = (UINT16)(ii + SendMaskSum);
/*通用报文头中应用层报文总长度*/ if (DATA_TYPE_MAIN_BRANCH == chDataType)
ShortToChar(ii - totallenIndex - 2U, &CiToZcDataBuffer[totallenIndex]);
if (DATA_TYPE_NEW == chDataType)
{ {
/*通用应用层报文长度(0x202报文长度)*/ /*通用应用层报文长度(0x202报文长度)*/
totallenIndex += 2U; /*刨去2字节应用报文总长度+2字节0202帧长度*/
ShortToChar(ii - totallenIndex - 2U, &CiToZcDataBuffer[totallenIndex]); ShortToChar((ii - (totallenIndex + 4u)), &CiToZcDataBuffer[totallenIndex + 2u]);
/*组TACS列车跨压信息*/
wCrossFrameLen = PackRcTacsCrossData(&CiToZcDataBuffer[ii]);
ii += wCrossFrameLen;
} }
else
{
/*nothing*/
}
/*通用报文头中应用层报文总长度*/
/*刨去2字节应用报文总长度*/
ShortToChar(ii - (totallenIndex + 2u), &CiToZcDataBuffer[totallenIndex]);
/*清ZC数据*/ /*清ZC数据*/
ClearZcData(); ClearZcData();
@@ -1244,6 +1264,101 @@ UINT8 PackCiToZcData( UINT8 deviceId)
return retVal; return retVal;
} }
/*
* ZC的TACS主控列车跨压信息
* UINT8 *pDataBuf
*
*/
static UINT16 PackRcTacsCrossData(UINT8 *pDataBuf)
{
UINT16 Index = 0u; /*索引编号*/
UINT16 i = 0u; /*循环变量*/
UINT8 j = 0u; /*循环变量*/
UINT16 wSignalCurSum = 0u; /*信号机数量*/
UINT16 wSignalId = 0u; /*信号机ID*/
UINT8 wSignalBelongCiId = 0u; /*信号机所属联锁ID*/
UINT8 wLocalCiId = 0u; /*本机联锁ID*/
UINT8 wCrossTacsTrainId = 0u; /*TACS跨压列车ID*/
UINT8 wTacsCrossTrainSum = 0u; /*TACS跨压列车数量*/
UINT16 wTacsCrossSignalBuf[ALL_TACS_CROSS_SUM_MAX] = { 0u }; /*TACS跨压信号机ID数组*/
UINT8 wTacsCrossTrainBuf[ALL_TACS_CROSS_SUM_MAX] = { 0u }; /*TACS跨压列车ID数组*/
/*Step1TACS跨压信息准备*/
wSignalCurSum = GetSignalCurSum();
/*遍历所有本联锁信号机*/
for (i = 0u; i < wSignalCurSum; i++)
{
wSignalId = GetSignalId(i);
wSignalBelongCiId = GetSignalBelongCiId(wSignalId);
wLocalCiId = GetSystemParaLocalCiId();
if (wSignalBelongCiId == wLocalCiId)
{
/*判断跨压TACS主控列车ID是否为零*/
wCrossTacsTrainId = GetSignalCrossTacsTrainIdCC(wSignalId);
/*非法值防护*/
if ((0u < wSignalId) && (CROSS_SIGNAL_ID_MAX >= wSignalId)
&& (0u < wCrossTacsTrainId) && (TACS_CROSS_ID_MAX >= wCrossTacsTrainId)
&& (ALL_TACS_CROSS_SUM_MAX >= wTacsCrossTrainSum))
{
/*TACS主控列车ID有效,赋值至待发送数组*/
wTacsCrossSignalBuf[wTacsCrossTrainSum] = wSignalId;
wTacsCrossTrainBuf[wTacsCrossTrainSum] = wCrossTacsTrainId;
wTacsCrossTrainSum += 1u;
}
else
{
/*不处理*/
}
}
else
{
/*不处理*/
}
}
/*Step2TACS跨压信息组包*/
/*帧长度,最后赋值*/
Index += 2u;
/*帧类型*/
ShortToChar(RC_TO_ZC_TACS_CROSS_MSG, &pDataBuf[Index]);
Index += 2u;
/*预留2字节发0*/
ShortToChar(0u, &pDataBuf[Index]);
Index += 2u;
/*跨压TACS主控列车数量*/
pDataBuf[Index] = wTacsCrossTrainSum;
Index += 1u;
for (j = 0u; j < wTacsCrossTrainSum; j++)
{
/*跨压信号机ID*/
ShortToChar(wTacsCrossSignalBuf[j], &pDataBuf[Index]);
Index += 2u;
/*跨压列车ID*/
pDataBuf[Index] = wTacsCrossTrainBuf[j];
Index += 1u;
}
/*最后赋值长度*/
ShortToChar((Index - 2u), &pDataBuf[0u]);
/*打印*/
debug_infor_printf((const)"SendTacsCross Len=%d:", Index);
for (i = 0u; i < Index; i++)
{
debug_infor_printf((const)"%x-", pDataBuf[i]);
}
debug_infor_printf((const)"\n");
return Index;
}
/* /*
* ZC码位值Buf * ZC码位值Buf
@@ -1448,6 +1563,92 @@ UINT8 ParseZcIteCutData(UINT8* dataBuf, UINT16 dataLen)
return cRetVal; return cRetVal;
} }
/*
* ZC到CI的CBTC主控列车跨压数据
* UINT8* pDataBuf
* UINT16 dataLen
* CI_ERROR 0
* CI_SUCCESS 1
* Edit By wyd 2026.3.26
*/
static UINT8 ParseZcCbtcCrossData(UINT8* pDataBuf, UINT16 dataLen)
{
UINT8 cRetVal = CI_ERROR; /*函数返回值*/
UINT8 wCrossNum = 0u; /*承接跨压状态*/
UINT16 ii = 0U; /*数组下标变量*/
UINT8 jj = 0U; /*循环变量*/
UINT16 wSignalId = 0U; /*承接跨压信号机ID*/
UINT8 wTrainId = 0U; /*承接跨压列车ID*/
if (NULL != pDataBuf)
{
cRetVal = CI_SUCCESS;
wCrossNum = pDataBuf[ii];
ii++;
if (ALL_CBTC_CROSS_SUM_MAX >= wCrossNum)
{
ZcToCiDataStru.wCbtcCrossNum = wCrossNum;
for (jj = 0U; jj < wCrossNum; jj++)
{
wSignalId = ShortFromChar(&pDataBuf[ii]); /*解析信号机ID*/
ii += 2u;
if ((0U < wSignalId) && (CROSS_SIGNAL_ID_MAX >= wSignalId))
{
ZcToCiDataStru.wCbtcCrossSignalId[jj] = wSignalId;
}
else
{
debug_infor_printf((const)"ParseZcCbtcCrossData: wSignalId Error\n");
cRetVal = CI_ERROR; /*Z信号机ID超限,返回失败*/
}
wTrainId = pDataBuf[ii]; /*解析列车ID*/
ii += 1u;
if ((0U < wTrainId) && (CBTC_CROSS_ID_MAX >= wTrainId))
{
ZcToCiDataStru.wCbtcCrossTrainId[jj] = wTrainId;
}
else
{
debug_infor_printf((const)"ParseZcCbtcCrossData: wTrainId Error\n");
cRetVal = CI_ERROR; /*列车ID超限,返回失败*/
}
}
if (CI_SUCCESS == cRetVal)
{
if (dataLen != ii)
{
debug_infor_printf((const)"ParseZcCbtcCrossData: Msg Len Error\n");
cRetVal = CI_ERROR;
}
else
{
/*不处理*/
}
}
else
{
/*不处理*/
}
}
else
{
debug_infor_printf((const)"ParseZcCbtcCrossData Error: wCrossNum Error\n");
cRetVal = CI_ERROR; /*状态非法,返回失败*/
}
}
else
{
cRetVal = CI_ERROR; /*入参非法,返回失败*/
}
return cRetVal;
}
/** /**
* @brief ZC发送的进路停车保证标志 * @brief ZC发送的进路停车保证标志
* @param[in] UINT16 wDeviceId ID * @param[in] UINT16 wDeviceId ID
@@ -2017,4 +2218,61 @@ void SetLocalSnowModelZc(UINT8 setmodle)
{ {
; /*不处理*/ ; /*不处理*/
} }
}
/*
* ZC发送的CBTC主控列车跨压数量
*
*
* Created By wyd 2026.3.27
*/
UINT8 GetCbtcCrossNumZc(void)
{
return gCbtcCrossNumZc;
}
/*
* ZC发送的CBTC主控列车跨压信息
*
*
* Created By wyd 2026.3.27
*/
CbtcCrossStructZC *GetCbtcCrossStructZc(void)
{
return gCbtcCrossStructZc;
}
/*
* ZC发送CBTC主控列车跨压信息
* UINT8 wCrossNum
* UINT16 wSignalId[ALL_CBTC_CROSS_SUM_MAX] ID
* UINT8 wTrainId[ALL_CBTC_CROSS_SUM_MAX] ID
*
* RC接收CI->RC同步过来的该信息时
* Created By wyd 2026.3.26
*/
void SetCbtcCrossInfo(UINT8 wCrossNum, UINT16 wSignalId[ALL_CBTC_CROSS_SUM_MAX],
UINT8 wTrainId[ALL_CBTC_CROSS_SUM_MAX])
{
UINT8 i = 0u;
/*先清空,防止残留脏数据*/
(void)CommonMemSet(gCbtcCrossStructZc, ALL_CBTC_CROSS_SUM_MAX * sizeof(CbtcCrossStructZC),
0x00u, ALL_CBTC_CROSS_SUM_MAX * sizeof(CbtcCrossStructZC));
/*赋值跨压数量和ID*/
gCbtcCrossNumZc = wCrossNum;
if ((NULL == wSignalId) || (NULL == wTrainId))
{
/*不处理*/
}
else
{
for (i = 0u; i < wCrossNum; i++)
{
gCbtcCrossStructZc[i].wSignalId = wSignalId[i];
gCbtcCrossStructZc[i].wTrainId = wTrainId[i];
}
}
} }
+52 -11
View File
@@ -26,15 +26,17 @@
#include "../ParsePack/ParsePackTmcData.h" #include "../ParsePack/ParsePackTmcData.h"
#define CI_ZC_INTERFACE_INFOTYPE ((UINT16)0x0106) /*互联互通CI_ZC接口信息类型*/ #define CI_ZC_INTERFACE_INFOTYPE ((UINT16)0x0106) /*互联互通CI_ZC接口信息类型*/
#define CI_ZC_PRTCL_VER ((UINT16)0x65) /*CI_ZC协议版本号,根据《IFAO-3048-ZC-CI接口说明书》修改*/ #define CI_ZC_PRTCL_VER ((UINT16)0x65) /*CI_ZC协议版本号,根据《IFAO-3048-ZC-CI接口说明书》修改*/
#define ZC_TO_TIOC_MASK_MSG ((UINT16)0x0201u) /*ZC发送TIOC码位信息类型*/ #define ZC_TO_TIOC_MASK_MSG ((UINT16)0x0201u) /*ZC发送TIOC码位信息类型*/
#define TIOC_TO_ZC_MASK_MSG ((UINT16)0x0202u) /*TIOC发送ZC码位信息类型*/ #define TIOC_TO_ZC_MASK_MSG ((UINT16)0x0202u) /*TIOC发送ZC码位信息类型*/
#define ZC_TO_TIOC_TSR_MSG ((UINT16)0x0203u) /*ZC发送TIOC临时限速信息类型*/ #define ZC_TO_TIOC_TSR_MSG ((UINT16)0x0203u) /*ZC发送TIOC临时限速信息类型*/
#define ZC_TO_TIOC_WLB_MSG ((UINT16)0x0204u) /*ZC发送TIOC紧急制动信息类型*/ #define ZC_TO_TIOC_WLB_MSG ((UINT16)0x0204u) /*ZC发送TIOC紧急制动信息类型*/
#define ZC_TO_TIOC_SNOW_MSG ((UINT16)0x0205u) /*ZC发送TIOC雨雪模式信息类型*/ #define ZC_TO_TIOC_SNOW_MSG ((UINT16)0x0205u) /*ZC发送TIOC雨雪模式信息类型*/
#define ZC_TO_TIOC_ITELINECUT_MSG ((UINT16)0x0206U) /*ZC发送TIOC的全线ITE切除状态信息类型*/ #define ZC_TO_TIOC_ITELINECUT_MSG ((UINT16)0x0206U) /*ZC发送TIOC的全线ITE切除状态信息类型*/
#define ZC_TSR_VALID ((UINT8)0x55U) /*ZC发送临时限速有效*/ #define ZC_TO_RC_CBTC_CROSS_MSG ((UINT16)0x0207U) /*ZC发送给RC的主控CBTC列车跨压信息*/
#define RC_TO_ZC_TACS_CROSS_MSG ((UINT16)0x0208u) /*RC发送给ZC的主控TACS列车跨压信息*/
#define ZC_TSR_VALID ((UINT8)0x55U) /*ZC发送临时限速有效*/
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@@ -64,6 +66,9 @@ typedef struct S_ZcToCiDataStruct
UINT8 cIteLineCutState; /* ITE全线切除状态 */ UINT8 cIteLineCutState; /* ITE全线切除状态 */
UINT8 cAreaIteCutNum; /*区间ITE切除数量*/ UINT8 cAreaIteCutNum; /*区间ITE切除数量*/
UINT16 szAreaIteCutId[ALL_AREA_SNOW_SUM_MAX]; /*区间ITE切除ID数组*/ UINT16 szAreaIteCutId[ALL_AREA_SNOW_SUM_MAX]; /*区间ITE切除ID数组*/
UINT8 wCbtcCrossNum; /*CBTC主控列车跨压数量*/
UINT16 wCbtcCrossSignalId[ALL_CBTC_CROSS_SUM_MAX]; /*CBTC主控列车跨压信号机ID*/
UINT8 wCbtcCrossTrainId[ALL_CBTC_CROSS_SUM_MAX]; /*CBTC主控列车跨压列车ID*/
} ZcToCiDataStruct; } ZcToCiDataStruct;
/*ZC发送的信号机动态数据结构体*/ /*ZC发送的信号机动态数据结构体*/
@@ -87,7 +92,7 @@ typedef struct S_LogicSectionDataStructZC
typedef struct S_AxisSectionDataStructZC typedef struct S_AxisSectionDataStructZC
{ {
UINT16 AxisSectionId; /*计轴区段ID (初始化字段)*/ UINT16 AxisSectionId; /*计轴区段ID (初始化字段)*/
UINT8 AxisArbState; /*计轴ARB状态CC(0x55-未ARB0xaa-ARB)*/ UINT8 AxisArbState; /*计轴ARB状态(0x55-未ARB0xaa-ARB)*/
}AxisSectionDataStructZC; }AxisSectionDataStructZC;
/*ZC发送的物理区段动态数据结构体*/ /*ZC发送的物理区段动态数据结构体*/
@@ -104,6 +109,13 @@ typedef struct S_RouteDataStructZC
UINT8 StopensureFlag; /*停车保证标志ZC(0x55:已设置,0xAA:未设置) */ UINT8 StopensureFlag; /*停车保证标志ZC(0x55:已设置,0xAA:未设置) */
}RouteDataStructZC; }RouteDataStructZC;
/*ZC发送的CBTC主控列车跨压结构体*/
typedef struct S_CbtcCrossStructZC
{
UINT16 wSignalId; /*跨压信号机ID*/
UINT8 wTrainId; /*跨压列车ID*/
}CbtcCrossStructZC;
/*存储ZC发送的动态数据结构体*/ /*存储ZC发送的动态数据结构体*/
typedef struct S_ZcToCiDynamicDataStruct typedef struct S_ZcToCiDynamicDataStruct
{ {
@@ -133,7 +145,8 @@ extern ComTrainPosDataStruct ComTrainPosDataStru[ZC_TO_CI_TRAIN_MAX];
extern UINT16 ComTrainSum; extern UINT16 ComTrainSum;
extern UINT8 lineIdentity; extern UINT8 lineIdentity;
extern ZcToCiDynamicDataStruct gZcToCiDymDataStru; /*ZC动态数据结构体*/ extern ZcToCiDynamicDataStruct gZcToCiDymDataStru; /*ZC动态数据结构体*/
extern UINT8 gCbtcCrossNumZc;
extern CbtcCrossStructZC gCbtcCrossStructZc[ALL_CBTC_CROSS_SUM_MAX];
#endif #endif
@@ -468,6 +481,34 @@ UINT8 GetLocalSnowModelZc(void);
*/ */
void SetLocalSnowModelZc(UINT8 setmodle); void SetLocalSnowModelZc(UINT8 setmodle);
/*
* ZC发送的CBTC主控列车跨压数量
*
*
* Created By wyd 2026.3.27
*/
UINT8 GetCbtcCrossNumZc(void);
/*
* ZC发送的CBTC主控列车跨压信息
*
*
* Created By wyd 2026.3.27
*/
CbtcCrossStructZC *GetCbtcCrossStructZc(void);
/*
* ZC发送CBTC主控列车跨压信息
* UINT8 wCrossNum
* UINT16 wSignalId[ALL_CBTC_CROSS_SUM_MAX] ID
* UINT8 wTrainId[ALL_CBTC_CROSS_SUM_MAX] ID
*
* RC接收CI->RC同步过来的该信息时
* Created By wyd 2026.3.26
*/
void SetCbtcCrossInfo(UINT8 wCrossNum, UINT16 wSignalId[ALL_CBTC_CROSS_SUM_MAX],
UINT8 wTrainId[ALL_CBTC_CROSS_SUM_MAX]);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
File diff suppressed because it is too large Load Diff
+68 -11
View File
@@ -49,9 +49,6 @@
/*4个字节*/ /*4个字节*/
#define LONG_LEN ((UINT8)4) #define LONG_LEN ((UINT8)4)
/*dquCICfgDtStr.OCSwitchCfgStr中成员个数*/
#define OC_SWITCH_CFG_STR_MEMBER_NUM ((UINT8)2)
/*dquCICfgDtStr.OCSwitchCfgStr中成员个数_旧版*/ /*dquCICfgDtStr.OCSwitchCfgStr中成员个数_旧版*/
#define OC_SWITCH_CFG_STR_MEMBER_NUM_OLD ((UINT8)6) #define OC_SWITCH_CFG_STR_MEMBER_NUM_OLD ((UINT8)6)
@@ -839,14 +836,6 @@ UINT8 EaConfigDataStruFromDquEaStr(DSU_EMAP_EA_STRU* pEa, EaConfigStru* pEaCfgDt
*01 *01
*********************************************/ *********************************************/
UINT8 EaConfigDataStructInit(CHAR * FSName); UINT8 EaConfigDataStructInit(CHAR * FSName);
/*********************************************
*OC
*pDataAddr
*01
*cgh-CID-2539-5OC_配置数据表
*********************************************/
void R_OCSwitchConfigDataFromChar(UINT8* pDataAddr);
/********************************************* /*********************************************
*OC *OC
*pDataAddr *pDataAddr
@@ -1011,5 +1000,73 @@ INT16 SetNoRepeatDataToBuf(UINT16* pBuf, UINT16 maxlen, UINT16 dwData, UINT16 cu
* add by mpt 20260104 * add by mpt 20260104
*********************************************/ *********************************************/
UINT8 SetCldAndScxMergeConfig(void); UINT8 SetCldAndScxMergeConfig(void);
/*********************************************
*
*pDataAddr
*01
* add by mpt 20260325
*********************************************/
void R_OCSwitchModeCfgDataFromChar(UINT8* pDataAddr);
/*********************************************
*OC的板卡配置情况到道岔配置数据结构体
*SwitchBelongOCConfigDataStr* pSwitchOCcfgDtStr
* OCSwitchConfigDataStruct* pOcCfgDtStr OC配置表结构体
*01
* add by mpt 20260325
*********************************************/
UINT8 SwitchOcCfgStrFromOCconfigStr(SwitchBelongOCConfigDataStr* pSwitchOCcfgDtStr, OCSwitchConfigDataStruct* pOcCfgDtStr);
/*********************************************
*
*SwitchConfigDataStruct* pSwitchCfgDtStr
*01
* add by mpt 20260325
*********************************************/
UINT8 SwitchCfgDtStruFromOCconfigStr(SwitchConfigDataStruct* pSwitchCfgDtStr);
/*********************************************
*OC的插箱数
*SwitchConfigDataStruct* pSwitchCfgDtStr
*01
* add by mpt 20260325
*********************************************/
UINT8 CalcuSwitchInsertionBoxData(SwitchConfigDataStruct* pSwitchCfgDtStr);
/*********************************************
*
*
*
*-1,-1
* add by mpt 20260330
*********************************************/
INT16 SetNoUINT8RepeatDataToBuf(UINT8* pBuf, UINT16 maxlen, UINT8 dwData, UINT16 currentLen);
/*********************************************
*
*pOverlapCfgDtStr保护区段配置数据结构体指针 pLogCfgDtStr配置数据结构体指针
*01
* add by mpt 20260331
*********************************************/
UINT8 LogRelateOverlapDataInit(OverlapConfigDataStruct* pOverlapCfgDtStr, LogicSectionConfigDataStruct* pLogCfgDtStr);
/*********************************************
*
*pLogCfgDtStr配置数据结构体指针
*01
* add mpt 20260331
*********************************************/
UINT8 LogRelateProSwDataByOverlapInit(LogicSectionConfigDataStruct* pLgScCfgDtStr);
/*********************************************
*
*LogsecSwitchStruct* pSrcSwitchStructBuf
UINT8 chSrclen
AxisSwitchStruct* pDstSwitchStructBuf
UINT8 dstLen
*-1
*add by mpt 20260331
*********************************************/
INT16 AxisSecCfgDtStruFromLogicSecStr(LogsecSwitchStruct* pSrcSwitchStructBuf, UINT8 chSrclen, AxisSwitchStruct* pDstSwitchStructBuf, UINT8 dstLen);
/*********************************************
*
*void
*01
* add mpt 20260331
*********************************************/
UINT8 AxisSecProtectSwitchInit(void);
#endif #endif
+2 -34
View File
@@ -2369,57 +2369,25 @@ UINT8 ReadSystemParamConfDataNew(const UINT8 ciId,SystemParameterStructNew* Syst
} }
if (1u == rtnVal) if (1u == rtnVal)
{ /*给从公共查询函数中*/ { /*给从公共查询函数中*/
/*紧急制动最高触发速度(单位已在dfsInitSubSystemCommonConfigData_CC函数中转换)*/
SystemParameterStru->MaxLineLimitSpeed = dquCICfgDtStr.SystemParaStrNew.MaxLineLimitSpeed;
/*临时限速最高限速(km/h)(未进行单位转换)*/ /*临时限速最高限速(km/h)(未进行单位转换)*/
SystemParameterStru->MaxTsrSpeed = dquCICfgDtStr.SystemParaStrNew.MaxTsrSpeed; SystemParameterStru->MaxTsrSpeed = dquCICfgDtStr.SystemParaStrNew.MaxTsrSpeed;
/*NTP校时时区差(小时)*/
SystemParameterStru->TimeZoneDifference = dquCICfgDtStr.SystemParaStrNew.TimeZoneDifference;
/*区间同向行驶双车间隔最小安全距离(cm))*/
SystemParameterStru->MABackDistance = dquCICfgDtStr.SystemParaStrNew.MABackDistance;
/*一次设置的临时限速最大个数*/ /*一次设置的临时限速最大个数*/
SystemParameterStru->MaxTsrNum = dquCICfgDtStr.SystemParaStrNew.MaxTsrNum; SystemParameterStru->MaxTsrNum = dquCICfgDtStr.SystemParaStrNew.MaxTsrNum;
/*一个临时限速报文中包含的最大限速区段数量*/ /*一个临时限速报文中包含的最大限速区段数量*/
SystemParameterStru->MaxSectionOfTsr = dquCICfgDtStr.SystemParaStrNew.MaxSectionOfTsr; SystemParameterStru->MaxSectionOfTsr = dquCICfgDtStr.SystemParaStrNew.MaxSectionOfTsr;
/*IVOC-IVOC信故障判断时间(ms*/
SystemParameterStru->IvocIvocCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.IvocIvocCommunicationErrorTime;
/*IVOC-OC通信故障判断时间(ms)*/ /*IVOC-OC通信故障判断时间(ms)*/
SystemParameterStru->IvocOcCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.IvocOcCommunicationErrorTime; SystemParameterStru->IvocOcCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.IvocOcCommunicationErrorTime;
/*VOBC-ITS通信故障判断时间(ms)*/
SystemParameterStru->VobcAtsCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.VobcAtsCommunicationErrorTime;
/*TMC-ITS通信故障判断时间(ms*/
SystemParameterStru->TmcItsCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.TmcItsCommunicationErrorTime;
/*ITS-OC通信故障判断时间(ms*/
SystemParameterStru->ItsOcCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.ItsOcCommunicationErrorTime;
/*OC-PSD通信故障判断时间(ms*/
SystemParameterStru->OcPsdCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.OcPsdCommunicationErrorTime;
/*IVOC-TSL通信故障判断时间(ms*/
SystemParameterStru->IvocTslCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.IvocTslCommunicationErrorTime;
/*OC-TSL通信故障判断时间(ms*/ /*OC-TSL通信故障判断时间(ms*/
SystemParameterStru->OcTslCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.OcTslCommunicationErrorTime; SystemParameterStru->OcTslCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.OcTslCommunicationErrorTime;
/*满足精确停车条件的MA延伸长度(cm)*/
SystemParameterStru->MALengthForATOParking = dquCICfgDtStr.SystemParaStrNew.MALengthForATOParking;
/*本线系统定义逻辑方向与上下行方向的关系*/ /*本线系统定义逻辑方向与上下行方向的关系*/
SystemParameterStru->LinkLogicDirUpAndDown = dquCICfgDtStr.SystemParaStrNew.LinkLogicDirUpAndDown; SystemParameterStru->LinkLogicDirUpAndDown = dquCICfgDtStr.SystemParaStrNew.LinkLogicDirUpAndDown;
/*对向行驶双车间隔最小安全距离(cm)*/
SystemParameterStru->OppositeTrackDistance = dquCICfgDtStr.SystemParaStrNew.OppositeTrackDistance;
/*线路最差情况下紧急制动距离(单位m)*/ /*线路最差情况下紧急制动距离(单位m)*/
SystemParameterStru->MaxMALength = dquCICfgDtStr.SystemParaStrNew.MaxMALength; SystemParameterStru->MaxMALength = dquCICfgDtStr.SystemParaStrNew.MaxMALength;
@@ -3465,7 +3433,7 @@ void ReadEmapCiConfig(EmapCiConfigStru emapVerArr[])
for (i = 0u; i < wCIStruSum; i++) for (i = 0u; i < wCIStruSum; i++)
{ {
ciId = (UINT8)(dsuStaticHeadStru.pCIStruStru[i].wID & 0x00FF); ciId = (UINT8)(dsuStaticHeadStru.pCIStruStru[i].wID & 0x00FFu);
emapVerArr[ciId].devId = ciId; emapVerArr[ciId].devId = ciId;
emapVerArr[ciId].ciType = (UINT8)(dsuStaticHeadStru.pCIStruStru[i].wType); emapVerArr[ciId].ciType = (UINT8)(dsuStaticHeadStru.pCIStruStru[i].wType);
if (CI_TYPE_TCC == dsuStaticHeadStru.pCIStruStru[i].wType) if (CI_TYPE_TCC == dsuStaticHeadStru.pCIStruStru[i].wType)
@@ -3531,7 +3499,7 @@ void ReadEmapCiConfig(EmapCiConfigStru emapVerArr[])
for (i = 0u; i < wRCStruSum; i++) for (i = 0u; i < wRCStruSum; i++)
{ {
/*并非所有联锁均包含在RC表,因此未配置在RC表中时根据CI表初始化*/ /*并非所有联锁均包含在RC表,因此未配置在RC表中时根据CI表初始化*/
ciId = (UINT8)(dsuStaticHeadStru.pRCStruStru[i].wID & 0x00FF); ciId = (UINT8)(dsuStaticHeadStru.pRCStruStru[i].wID & 0x00FFu);
emapVerArr[ciId].devId = ciId; emapVerArr[ciId].devId = ciId;
emapVerArr[ciId].ciType = (UINT8)(dsuStaticHeadStru.pRCStruStru[i].wType); emapVerArr[ciId].ciType = (UINT8)(dsuStaticHeadStru.pRCStruStru[i].wType);
if (CI_TYPE_TCC == dsuStaticHeadStru.pRCStruStru[i].wType) if (CI_TYPE_TCC == dsuStaticHeadStru.pRCStruStru[i].wType)
@@ -521,13 +521,16 @@ UINT8 R_WashMachineStructFromChar(UINT8* pDataAddr, Relay_WashMachineStruct* pWa
pData += 2U; pData += 2U;
pWashMachineStr->TailWashAllowRelayId = dquCiShortFromChar(pData); /*出发2继电器ID*/ pWashMachineStr->TailWashAllowRelayId = dquCiShortFromChar(pData); /*出发2继电器ID*/
pData += 2U; pData += 2U;
pWashMachineStr->wCouplingWashAllowRelayId = dquCiShortFromChar(pData); /*联挂端出发继电器ID*/
pData += 2U;
pWashMachineStr->WashTrainRequestRelayId = dquCiShortFromChar(pData); /*洗车请求继电器ID*/ pWashMachineStr->WashTrainRequestRelayId = dquCiShortFromChar(pData); /*洗车请求继电器ID*/
pData += 2U; pData += 2U;
pWashMachineStr->TrainHeadStopSteadyRelayId = dquCiShortFromChar(pData); /*列车停稳1继电器ID*/ pWashMachineStr->TrainHeadStopSteadyRelayId = dquCiShortFromChar(pData); /*列车停稳1继电器ID*/
pData += 2U; pData += 2U;
pWashMachineStr->TrainTailStopSteadyRelayId = dquCiShortFromChar(pData); /*列车停稳2继电器ID*/ pWashMachineStr->TrainTailStopSteadyRelayId = dquCiShortFromChar(pData); /*列车停稳2继电器ID*/
pData += 2U; pData += 2U;
pWashMachineStr->wCoupingStopSteadyRelayId = dquCiShortFromChar(pData); /*联挂端停稳继电器ID*/
pData += 2U;
pWashMachineStr->TrainOutWashPortAllowRelayId = dquCiShortFromChar(pData);/*允许出库继电器ID*/ pWashMachineStr->TrainOutWashPortAllowRelayId = dquCiShortFromChar(pData);/*允许出库继电器ID*/
pData += 2U; pData += 2U;
pWashMachineStr->PauseTrainWashRequestRelayId = dquCiShortFromChar(pData); /*暂停洗车继电器ID*/ pWashMachineStr->PauseTrainWashRequestRelayId = dquCiShortFromChar(pData); /*暂停洗车继电器ID*/
@@ -611,6 +614,10 @@ UINT8 R_NoRouteDcStruFromChar(UINT8 * pDataAddr,Relay_NoRouteDcStruct* pNoRotStr
pNoRotStr->wRelayColTongYiScId = dquCiShortFromChar(pData); /* 试车线采集同意试车继电器ID */ pNoRotStr->wRelayColTongYiScId = dquCiShortFromChar(pData); /* 试车线采集同意试车继电器ID */
pData += 2u; pData += 2u;
pNoRotStr->wWaysideTryTrainIndRelayId = dquCiShortFromChar(pData); /* 轨旁试车指示器继电器ID */
pData += 2u;
rtnvalue = 1u; rtnvalue = 1u;
return rtnvalue; return rtnvalue;
+1 -1
View File
@@ -40,7 +40,7 @@
#define CI_SYSTEM_OUTSIG_RALATE_AXIS_LEN ((UINT8)82) #define CI_SYSTEM_OUTSIG_RALATE_AXIS_LEN ((UINT8)82)
#define CI_SYSTEM_CI_PATTERN_ID ((UINT8)0x08) /*增加联锁类型配置表*/ #define CI_SYSTEM_CI_PATTERN_ID ((UINT8)0x08) /*增加联锁类型配置表*/
#define CI_SYSTEM_CI_PATTERN_LEN ((UINT8)13) /*修改为13,增加是否分布式联锁,UT/CT保护区段解锁停稳时间,UT/CT接近区段延时解锁超限时间*/ #define CI_SYSTEM_CI_PATTERN_LEN ((UINT8)14) /*修改为14,增加是否分布式联锁,UT/CT保护区段解锁停稳时间,UT/CT接近区段延时解锁超限时间*/
#define CI_SYSTEM_VIRCI_INCLUDEOC_ID ((UINT8)0x09) /*增加虚拟联锁与OC对应关系表*/ #define CI_SYSTEM_VIRCI_INCLUDEOC_ID ((UINT8)0x09) /*增加虚拟联锁与OC对应关系表*/
#define CI_SYSTEM_VIRCI_INCLUDEOC_LEN ((UINT8)22) #define CI_SYSTEM_VIRCI_INCLUDEOC_LEN ((UINT8)22)
+18 -17
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_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_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_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,MASK_TYPE_PSD_JXTCPANGLU_FAULT,MASK_TYPE_PSD_IBP_STATE,MASK_TYPE_PSD_IBP_FAULT,MASK_TYPE_PSD_JXTC_STATE,0U }; MASK_TYPE_PSD_VIDEO_QK_LU,MASK_TYPE_PSD_VIDEO_QK_HONG,MASK_TYPE_PSD_EXCEPT,MASK_TYPE_PSD_JXTCPANGLU_FAULT,MASK_TYPE_PSD_IBP_STATE,MASK_TYPE_PSD_IBP_FAULT,MASK_TYPE_PSD_JXTC_STATE,0U };
#else #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 }; 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 #endif
@@ -546,7 +546,7 @@ UINT8 MaskCfgDtStruFrmCIATSLogSgmtT(UINT8* FSDataName)
MASK_TYPE_LOGICSECTION_JUMPLOCK, MASK_TYPE_LOGICSECTION_JUMPLOCK,
MASK_TYPE_UPWARD_DIRECTION, MASK_TYPE_UPWARD_DIRECTION,
MASK_TYPE_DOWNWARD_DIRECTION, MASK_TYPE_DOWNWARD_DIRECTION,
MASK_TYPE_LOGICSECTION_ARB, MASK_TYPE_LOGSEC_CBTC_ARB,
MASK_TYPE_LOGICSECTION_EMERG_XIANSU,1u }; MASK_TYPE_LOGICSECTION_EMERG_XIANSU,1u };
UINT16 BuChang = 0u; UINT16 BuChang = 0u;
funcRtn = dquGetConfigDataNew(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_LOGIC_SGMT_MASK_ID, &pDataAddr, &DataSize, &rowCount); funcRtn = dquGetConfigDataNew(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_LOGIC_SGMT_MASK_ID, &pDataAddr, &DataSize, &rowCount);
@@ -594,7 +594,7 @@ UINT8 MaskCfgDtStruFrmCIATSLogSgmtT(UINT8* FSDataName)
if ((0xFFFFu != tempMaskId) && (0u != tempMaskId)) if ((0xFFFFu != tempMaskId) && (0u != tempMaskId))
{ {
/*0和0xFFFF是无效的码位*/ /*0和0xFFFF是无效的码位*/
if ((CI_SUM_MAX > MaskRow) && (CI_TO_ATS_MASK_SUM_MAX > tempMaskId) && (0u < tempMaskId))/*¼ì²éÊÇ·ñΪÓÐЧÂëλֵ*/ if ((CI_SUM_MAX > MaskRow) && (CI_TO_ATS_MASK_SUM_MAX > tempMaskId))/*¼ì²éÊÇ·ñΪÓÐЧÂëλֵ*/
{ {
ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID; ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID;
ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_LOGICSEC; ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_LOGICSEC;
@@ -669,8 +669,9 @@ UINT8 MaskCfgDtStruFrmCIATSLogSgmt(UINT8 * FSDataName)
MASK_TYPE_LOGICSECTION_JUMPLOCK, MASK_TYPE_LOGICSECTION_JUMPLOCK,
MASK_TYPE_UPWARD_DIRECTION, MASK_TYPE_UPWARD_DIRECTION,
MASK_TYPE_DOWNWARD_DIRECTION, MASK_TYPE_DOWNWARD_DIRECTION,
MASK_TYPE_LOGICSECTION_ARB, MASK_TYPE_LOGSEC_CBTC_ARB,
MASK_TYPE_LOGICSECTION_SPKS_FLOCK, MASK_TYPE_LOGICSECTION_SPKS_FLOCK,
MASK_TYPE_LOGSEC_PB_TACS_ARB,
1u}; 1u};
UINT16 BuChang = 0u; UINT16 BuChang = 0u;
funcRtn = dquGetConfigDataNew(FSDataName,CI_ATS_MASK_TYPE,CI_ATS_LOGIC_SGMT_MASK_ID,&pDataAddr,&DataSize,&rowCount); funcRtn = dquGetConfigDataNew(FSDataName,CI_ATS_MASK_TYPE,CI_ATS_LOGIC_SGMT_MASK_ID,&pDataAddr,&DataSize,&rowCount);
@@ -1426,7 +1427,7 @@ UINT8 MaskCfgDtStruFrmCIATSWashM(UINT8* FSDataName)
UINT16 residue = 0u; UINT16 residue = 0u;
UINT16 tempMaskId = 0u; /*码位ID临时变量*/ UINT16 tempMaskId = 0u; /*码位ID临时变量*/
UINT8 MaskType[] = { 0u,MASK_TYPE_WASHMACHINE_READYSTATE,MASK_TYPE_WASHMACHINE_WORKMODE,0u }; UINT8 MaskType[] = { 0u,MASK_TYPE_WASHMACHINE_READYSTATE,0u };
UINT16 BuChang = 0u; UINT16 BuChang = 0u;
funcRtn = dquGetConfigData(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_WASHMACHINE_MASK_ID, &pDataAddr, &DataSize); funcRtn = dquGetConfigData(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_WASHMACHINE_MASK_ID, &pDataAddr, &DataSize);
if (0u == funcRtn) if (0u == funcRtn)
@@ -2459,7 +2460,7 @@ UINT8 MaskCfgDtStruFrmCIZCPsdMask(UINT8 * FSDataName)
UINT16 DeviceID=0u; UINT16 DeviceID=0u;
UINT16 tempMaskId = 0u; /*码位ID临时变量*/ UINT16 tempMaskId = 0u; /*码位ID临时变量*/
UINT8 MaskType[] = { 1u,MASK_TYPE_PSD_STATE,MASK_TYPE_PSD_EXCEPT_OPEN,1u }; UINT8 MaskType[] = { 1u,MASK_TYPE_PSD_STATE,MASK_TYPE_PSD_EXCEPT,1u };
UINT16 BuChang = 0u; UINT16 BuChang = 0u;
UINT16 wTempCount = 0U; UINT16 wTempCount = 0U;
funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_PSD_MASK_ID,&pDataAddr,&DataSize); funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_PSD_MASK_ID,&pDataAddr,&DataSize);
@@ -3333,7 +3334,7 @@ UINT8 MaskCfgStruFrmCIZCAxleSgmtMask(UINT8 * FSDataName)
UINT8 MaskType[]={1u,MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_OCCUPY, UINT8 MaskType[]={1u,MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_OCCUPY,
MASK_TYPE_PHYSECTION_ROUTELOCK,MASK_TYPE_PHYSECTION_JUMPLOCK_ZC,MASK_TYPE_AXISSECTION_ARB,MASK_TYPE_LIECHE_STOPSTATE, MASK_TYPE_PHYSECTION_ROUTELOCK,MASK_TYPE_PHYSECTION_JUMPLOCK_ZC,MASK_TYPE_AXISSECTION_ARB,MASK_TYPE_LIECHE_STOPSTATE,
MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_JUMPLOCK_APPLY, MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_JUMPLOCK_APPLY,
MASK_TYPE_PHYSECTION_JUMPLOCK_CANCEL,1u}; MASK_TYPE_PHYSECTION_JUMPLOCK_CANCEL,MASK_TYPE_PHYSECTION_INTRUSION,MASK_TYPE_PHYSECTION_ATS_FLOCK,1u};
UINT16 BuChang = 0u; UINT16 BuChang = 0u;
funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_AXLE_SGMT_MASK_ID,&pDataAddr,&DataSize); funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_AXLE_SGMT_MASK_ID,&pDataAddr,&DataSize);
if(funcRtn==0u) if(funcRtn==0u)
@@ -3397,7 +3398,7 @@ UINT8 MaskCfgStruFrmCIZCAxleSgmtMask(UINT8 * FSDataName)
} }
} }
} }
else if((0u < residue )&&( residue < 6u)) else if(((0u < residue )&&( residue < 6u))||((11U < residue)&&(residue < 14U)))
{ {
/*获取码位ID*/ /*获取码位ID*/
tempMaskId = ShortFromChar(pDataAddr); tempMaskId = ShortFromChar(pDataAddr);
@@ -3438,7 +3439,7 @@ UINT8 MaskCfgStruFrmCIZCAxleSgmtMask(UINT8 * FSDataName)
BuChang++; BuChang++;
} }
} }
funcRtn = 1u; funcRtn = 1u;
return funcRtn; return funcRtn;
} }
@@ -3581,7 +3582,7 @@ UINT8 MaskCfgStruFrmZCCIAxleSgmtMask(UINT8 * FSDataName)
UINT8 MaskType[]={1u,MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_OCCUPY, UINT8 MaskType[]={1u,MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_OCCUPY,
MASK_TYPE_PHYSECTION_ROUTELOCK,MASK_TYPE_PHYSECTION_JUMPLOCK_ZC,MASK_TYPE_AXISSECTION_ARB,MASK_TYPE_LIECHE_STOPSTATE, MASK_TYPE_PHYSECTION_ROUTELOCK,MASK_TYPE_PHYSECTION_JUMPLOCK_ZC,MASK_TYPE_AXISSECTION_ARB,MASK_TYPE_LIECHE_STOPSTATE,
MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_JUMPLOCK_APPLY, MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_JUMPLOCK_APPLY,
MASK_TYPE_PHYSECTION_JUMPLOCK_CANCEL,1u}; MASK_TYPE_PHYSECTION_JUMPLOCK_CANCEL,MASK_TYPE_PHYSECTION_INTRUSION,MASK_TYPE_PHYSECTION_ATS_FLOCK,1u};
UINT16 BuChang = 0u; UINT16 BuChang = 0u;
funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_AXLE_SGMT_MASK_ID,&pDataAddr,&DataSize); funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_AXLE_SGMT_MASK_ID,&pDataAddr,&DataSize);
if(0U == funcRtn) if(0U == funcRtn)
@@ -3658,7 +3659,7 @@ UINT8 MaskCfgStruFrmZCCIAxleSgmtMask(UINT8 * FSDataName)
return funcRtn; return funcRtn;
} }
} }
else if((6u <= residue)&&(residue <((CI_ZC_AXLE_SGMT_MASK_LEN/2u)-1u))) else if((6u <= residue)&&(residue < 12U))
{ {
/*获取码位ID*/ /*获取码位ID*/
tempMaskId = ShortFromChar(pDataAddr); tempMaskId = ShortFromChar(pDataAddr);
@@ -4697,7 +4698,7 @@ UINT8 MaskInit(UINT8 * FSDataName)
******CI到ATS码位表解析 ******CI到ATS码位表解析
********/ ********/
/*CI-ATS道岔码位*/ /*CI-ATS道岔码位*/
if (DATA_TYPE_NEW == chPulicData) if (DATA_TYPE_MAIN_BRANCH == chPulicData)
{ {
/*CI-ATS道岔码位*/ /*CI-ATS道岔码位*/
funcRtn = MaskCfgDtStruFrmCIATSSwitchMask(FSDataName); funcRtn = MaskCfgDtStruFrmCIATSSwitchMask(FSDataName);
@@ -4718,7 +4719,7 @@ UINT8 MaskInit(UINT8 * FSDataName)
/*CI-ATS紧急停车按钮码位*/ /*CI-ATS紧急停车按钮码位*/
funcRtn *= MaskCfgDtStruFrmCIATSEsbMask( FSDataName); funcRtn *= MaskCfgDtStruFrmCIATSEsbMask( FSDataName);
/*CI-ATS逻辑区段码位*/ /*CI-ATS逻辑区段码位*/
if (DATA_TYPE_NEW == chPulicData) if (DATA_TYPE_MAIN_BRANCH == chPulicData)
{ {
/*主线*/ /*主线*/
funcRtn *= MaskCfgDtStruFrmCIATSLogSgmt(FSDataName); funcRtn *= MaskCfgDtStruFrmCIATSLogSgmt(FSDataName);
@@ -4742,7 +4743,7 @@ UINT8 MaskInit(UINT8 * FSDataName)
funcRtn *= MaskCfgDtStruFrmCIATSSPKSMask(FSDataName); funcRtn *= MaskCfgDtStruFrmCIATSSPKSMask(FSDataName);
/*CI-ATS 洗车机码位*/ /*CI-ATS 洗车机码位*/
if (DATA_TYPE_NEW == chPulicData) if (DATA_TYPE_MAIN_BRANCH == chPulicData)
{ {
/*主线*/ /*主线*/
funcRtn *= MaskCfgDtStruFrmCIATSWash(FSDataName); funcRtn *= MaskCfgDtStruFrmCIATSWash(FSDataName);
@@ -4773,7 +4774,7 @@ UINT8 MaskInit(UINT8 * FSDataName)
if(RC_WORK_MODE_CI == ciPattern) if(RC_WORK_MODE_CI == ciPattern)
{ {
if (DATA_TYPE_NEW == chPulicData) if (DATA_TYPE_MAIN_BRANCH == chPulicData)
{ {
/*CI-ZC道岔码位*/ /*CI-ZC道岔码位*/
funcRtn *= MaskCfgDtStruFrmCIZCSwitchMask(FSDataName); funcRtn *= MaskCfgDtStruFrmCIZCSwitchMask(FSDataName);
@@ -4806,7 +4807,7 @@ UINT8 MaskInit(UINT8 * FSDataName)
/*ZC-CI逻辑区段码位*/ /*ZC-CI逻辑区段码位*/
funcRtn *= MaskCfgStruFrmZCCILogSgmtMask( FSDataName); funcRtn *= MaskCfgStruFrmZCCILogSgmtMask( FSDataName);
/*CI-ZC逻辑区段码位*/ /*CI-ZC逻辑区段码位*/
if (DATA_TYPE_NEW == chPulicData) if (DATA_TYPE_MAIN_BRANCH == chPulicData)
{ {
funcRtn *= MaskCfgDtStruFrmCI2ZCLogSgmt(FSDataName); funcRtn *= MaskCfgDtStruFrmCI2ZCLogSgmt(FSDataName);
} }
@@ -4818,7 +4819,7 @@ UINT8 MaskInit(UINT8 * FSDataName)
/*CI-ZC进路码位*/ /*CI-ZC进路码位*/
funcRtn *= MaskCfgStruFrmCIZCRouteMask( FSDataName); funcRtn *= MaskCfgStruFrmCIZCRouteMask( FSDataName);
/*ZC-CI进路码位*/ /*ZC-CI进路码位*/
if (DATA_TYPE_NEW == chPulicData) if (DATA_TYPE_MAIN_BRANCH == chPulicData)
{ {
funcRtn *= MaskCfgDtStruFrmZC2CiRouteMask(FSDataName); funcRtn *= MaskCfgDtStruFrmZC2CiRouteMask(FSDataName);
} }
+2 -2
View File
@@ -53,7 +53,7 @@
#define CI_ZC_ROUTE_MASK_LEN ((UINT32)14) /*CI-ZC进路码位字节长度--1行长度*/ #define CI_ZC_ROUTE_MASK_LEN ((UINT32)14) /*CI-ZC进路码位字节长度--1行长度*/
#define CI_ZC_AXLE_SGMT_MASK_ID ((UINT32)5) /*CI-ZC计轴区段码位*/ #define CI_ZC_AXLE_SGMT_MASK_ID ((UINT32)5) /*CI-ZC计轴区段码位*/
#define CI_ZC_AXLE_SGMT_MASK_LEN ((UINT32)26) /*CI-ZC计轴区段码位字节长度--1行长度,Modified 20151015*/ #define CI_ZC_AXLE_SGMT_MASK_LEN ((UINT32)30) /*CI-ZC计轴区段码位字节长度--1行长度,Modified 20151015*/
#define CI_ZC_OVER_LAP_MASK_ID ((UINT32)8) /*CI-ZC保护区段码位*/ #define CI_ZC_OVER_LAP_MASK_ID ((UINT32)8) /*CI-ZC保护区段码位*/
#define CI_ZC_OVER_LAP_MASK_LEN ((UINT32)8) /*CI-ZC保护区段码位字节长度--1行长度*/ #define CI_ZC_OVER_LAP_MASK_LEN ((UINT32)8) /*CI-ZC保护区段码位字节长度--1行长度*/
@@ -114,7 +114,7 @@
#define CI_ATS_SPKS_MASK_LEN ((UINT32)8) /*CI-ATS SPKS开关状态码位字节长度--1行长度;2018.03.19 由6改为8CI_ATS SPKS开关码位表增加一列开关旁路状态码位*/ #define CI_ATS_SPKS_MASK_LEN ((UINT32)8) /*CI-ATS SPKS开关状态码位字节长度--1行长度;2018.03.19 由6改为8CI_ATS SPKS开关码位表增加一列开关旁路状态码位*/
#define CI_ATS_WASHMACHINE_MASK_ID ((UINT32)11) /*CI-ATS 洗车机就绪状态码位*/ #define CI_ATS_WASHMACHINE_MASK_ID ((UINT32)11) /*CI-ATS 洗车机就绪状态码位*/
#define CI_ATS_WASHMACHINE_MASK_LEN ((UINT32)8) /*CI-ATS 洗车机就绪状态码位字节长度--1行长度*/ #define CI_ATS_WASHMACHINE_MASK_LEN ((UINT32)6) /*CI-ATS 洗车机就绪状态码位字节长度--1行长度*/
#define CI_ATS_AAR_ROUTE_MASK_ID ((UINT32)12) /*CI-ATS全自动折返进路码位*/ #define CI_ATS_AAR_ROUTE_MASK_ID ((UINT32)12) /*CI-ATS全自动折返进路码位*/
#define CI_ATS_AAR_ROUTE_MASK_LEN ((UINT32)6) /*CI-ATS全自动折返进路码位字节长度--1行长度*/ #define CI_ATS_AAR_ROUTE_MASK_LEN ((UINT32)6) /*CI-ATS全自动折返进路码位字节长度--1行长度*/
+6 -2
View File
@@ -108,7 +108,8 @@
/*道岔配置表*/ /*道岔配置表*/
#define OC_SWITCH_ID ((UINT8)2) #define OC_SWITCH_ID ((UINT8)2)
#define LEN_OC_SWITCH ((UINT8)8) #define LEN_OC_SWITCH ((UINT8)25)
#define SWITCH_BOARD_MODE_MAX 5U /*一个OC中道岔最多的模块数*/
/*道岔继电器配置表*/ /*道岔继电器配置表*/
#define OC_SWITCH_RELAY_ID ((UINT8)4) #define OC_SWITCH_RELAY_ID ((UINT8)4)
#define LEN_OC_SWITCH_RELAY ((UINT8)24) #define LEN_OC_SWITCH_RELAY ((UINT8)24)
@@ -171,7 +172,7 @@
/*非进路调车继电器表*/ /*非进路调车继电器表*/
#define OC_RELAY_NO_ROUTE_ID ((UINT8)20) #define OC_RELAY_NO_ROUTE_ID ((UINT8)20)
#define OC_LEN_RELAY_NO_ROUTE ((UINT8)10) #define OC_LEN_RELAY_NO_ROUTE ((UINT8)12)
/*车库门继电器表*/ /*车库门继电器表*/
#define OC_RELAY_GARAGE_DOOR_ID ((UINT8)21) #define OC_RELAY_GARAGE_DOOR_ID ((UINT8)21)
@@ -340,6 +341,7 @@ typedef struct S_Relay_NoRouteDcStruct
UINT16 wRelayTongYiScId; /*同意试车继电器ID*/ UINT16 wRelayTongYiScId; /*同意试车继电器ID*/
UINT16 wRelayDrvShiCheShengQingId; /* 试车线驱动的申请试车继电器ID */ UINT16 wRelayDrvShiCheShengQingId; /* 试车线驱动的申请试车继电器ID */
UINT16 wRelayColTongYiScId; /* 试车线同意试车继电器ID */ UINT16 wRelayColTongYiScId; /* 试车线同意试车继电器ID */
UINT16 wWaysideTryTrainIndRelayId; /* 轨旁试车指示器继电器ID */
} Relay_NoRouteDcStruct; } Relay_NoRouteDcStruct;
/*照查继电器结构体*/ /*照查继电器结构体*/
@@ -437,9 +439,11 @@ typedef struct S_Relay_WashMachineStruct
UINT16 TrainEmergencyStopRelayId; /*全自动列车紧急停车继电器(配置字段:采集继电器)*/ UINT16 TrainEmergencyStopRelayId; /*全自动列车紧急停车继电器(配置字段:采集继电器)*/
UINT16 HeadWashAllowRelayId; /*全自动允许车头清洗继电器(配置字段:采集继电器)*/ UINT16 HeadWashAllowRelayId; /*全自动允许车头清洗继电器(配置字段:采集继电器)*/
UINT16 TailWashAllowRelayId; /*全自动允许车尾清洗继电器(配置字段:采集继电器)*/ UINT16 TailWashAllowRelayId; /*全自动允许车尾清洗继电器(配置字段:采集继电器)*/
UINT16 wCouplingWashAllowRelayId; /*全自动允许联挂段清洗继电器(配置字段:采集继电器)*/
UINT16 WashTrainRequestRelayId; /*全自动洗车请求继电器(配置字段:驱动继电器)*/ UINT16 WashTrainRequestRelayId; /*全自动洗车请求继电器(配置字段:驱动继电器)*/
UINT16 TrainHeadStopSteadyRelayId; /*全自动车头停稳继电器(配置字段:驱动继电器)*/ UINT16 TrainHeadStopSteadyRelayId; /*全自动车头停稳继电器(配置字段:驱动继电器)*/
UINT16 TrainTailStopSteadyRelayId; /*全自动车尾停稳继电器(配置字段:驱动继电器)*/ UINT16 TrainTailStopSteadyRelayId; /*全自动车尾停稳继电器(配置字段:驱动继电器)*/
UINT16 wCoupingStopSteadyRelayId; /*全自动车尾停稳继电器(配置字段:驱动继电器)*/
UINT16 TrainPassRequestRelayId; /*全自动通过请求继电器(配置字段:驱动继电器)*/ UINT16 TrainPassRequestRelayId; /*全自动通过请求继电器(配置字段:驱动继电器)*/
UINT16 TrainOutWashPortAllowRelayId; /*全自动允许列车出库继电器(配置字段:采集继电器)*/ UINT16 TrainOutWashPortAllowRelayId; /*全自动允许列车出库继电器(配置字段:采集继电器)*/
UINT16 PauseTrainWashRequestRelayId; /*全自动暂停洗车继电器(配置字段:驱动继电器)*/ UINT16 PauseTrainWashRequestRelayId; /*全自动暂停洗车继电器(配置字段:驱动继电器)*/
+28 -17
View File
@@ -900,6 +900,7 @@ UINT8 rrm_PrepareSwitchStatOfAC(UINT16 acID)
UINT8 cycleESB = 0u; UINT8 cycleESB = 0u;
UINT8 chLinkNum = 0u; UINT8 chLinkNum = 0u;
UINT8 ESBStatus = ESB_STATE_VALID_YES; UINT8 ESBStatus = ESB_STATE_VALID_YES;
UINT8 chEsbCutState = 0U; /*ESB旁路状态*/
const UINT16 *pLinkIdBuf = NULL; const UINT16 *pLinkIdBuf = NULL;
const DSU_DEVICE_IN_LINK_STRU* pTempDeviceStru = NULL; const DSU_DEVICE_IN_LINK_STRU* pTempDeviceStru = NULL;
@@ -932,14 +933,22 @@ UINT8 rrm_PrepareSwitchStatOfAC(UINT16 acID)
for (cycleESB = 0u;cycleESB < pTempDeviceStru->struESBDev.wDevCount;cycleESB++) for (cycleESB = 0u;cycleESB < pTempDeviceStru->struESBDev.wDevCount;cycleESB++)
{ {
ESBStatus = GetEsbState(pTempDeviceStru->struESBDev.wDevSetId[cycleESB]); ESBStatus = GetEsbState(pTempDeviceStru->struESBDev.wDevSetId[cycleESB]);
chEsbCutState = GetEsbCutState(pTempDeviceStru->struESBDev.wDevSetId[cycleESB]);
if (ESB_STATE_VALID_NO == ESBStatus) if (ESB_CUT_YES == chEsbCutState)
{ {
/** ESB未按下,继续遍历*/ /* ESB旁路,认为按钮未按下*/
} }
else else
{ {
break; if (ESB_STATE_VALID_NO == ESBStatus)
{
/** ESB未按下,继续遍历*/
}
else
{
break;
}
} }
} }
@@ -986,6 +995,7 @@ UINT8 rrm_PrepareSwitchStatOfAC(UINT16 acID)
UINT8 PSDStatus = PSD_STATE_OPEN; UINT8 PSDStatus = PSD_STATE_OPEN;
const UINT16 *pLinkIdBuf = NULL; const UINT16 *pLinkIdBuf = NULL;
const DSU_DEVICE_IN_LINK_STRU* pTempDeviceStru = NULL; const DSU_DEVICE_IN_LINK_STRU* pTempDeviceStru = NULL;
UINT8 chPsdMutualLockStat = 0U; /*PSD互锁解除状态*/
chLinkNum = GetAxisLinkSum(acID); chLinkNum = GetAxisLinkSum(acID);
pLinkIdBuf = GetAxisLinkIdBuf(acID); pLinkIdBuf = GetAxisLinkIdBuf(acID);
@@ -1016,15 +1026,23 @@ UINT8 rrm_PrepareSwitchStatOfAC(UINT16 acID)
for (cyclePSD = 0u;cyclePSD < pTempDeviceStru->struScreenDev.wDevCount;cyclePSD++) for (cyclePSD = 0u;cyclePSD < pTempDeviceStru->struScreenDev.wDevCount;cyclePSD++)
{ {
PSDStatus = GetPsdState(pTempDeviceStru->struScreenDev.wDevSetId[cyclePSD]); PSDStatus = GetPsdState(pTempDeviceStru->struScreenDev.wDevSetId[cyclePSD]);
chPsdMutualLockStat = GetPsdMutualLockRemoveState(pTempDeviceStru->struScreenDev.wDevSetId[cyclePSD]);
if (PSD_STATE_CLOSE == PSDStatus) if (PSD_MUTUALLOCK_REMOVE_YES == chPsdMutualLockStat)
{ {
/** 屏蔽门关闭,继续遍历*/ /*互锁解除认为PSD状态正常,继续检查*/
} }
else else
{ {
break; if (PSD_STATE_CLOSE == PSDStatus)
} {
/** 屏蔽门关闭,继续遍历*/
}
else
{
break;
}
}
} }
if (cyclePSD != pTempDeviceStru->struScreenDev.wDevCount) if (cyclePSD != pTempDeviceStru->struScreenDev.wDevCount)
@@ -1182,20 +1200,13 @@ UINT8 rrm_PrepareSwitchStatOfAC(UINT16 acID)
*/ */
void rrm_SetRRMResult(UINT16 trainID,UINT8 rrmReply,UINT8 rrmReason,UINT8 nextOCId) void rrm_SetRRMResult(UINT16 trainID,UINT8 rrmReply,UINT8 rrmReason,UINT8 nextOCId)
{ {
UINT16 wRcIdWithType = 0U; UINT16 wRcIdWithType = 0x3D00U;
if (RC_WORK_MODE_CI == CI_SYSTEM_TYPE_RCI)
{
wRcIdWithType = 0x3C00U;
}
else
{
wRcIdWithType = 0x3D00U;
}
wRcIdWithType |= (UINT16)nextOCId; wRcIdWithType |= (UINT16)nextOCId;
SetTrainRrmState(trainID,rrmReply); SetTrainRrmState(trainID,rrmReply);
SetTrainRrmReson(trainID,rrmReason); SetTrainRrmReson(trainID,rrmReason);
SetTrainNextTioc(trainID, wRcIdWithType); /*设置下一控区ID需带0x3c,否则给IVOC组包时无法获取互联互通ID*/ SetTrainNextTioc(trainID, wRcIdWithType);
} }
/** /**
@@ -3699,5 +3699,31 @@ UINT8 GetPhySecInRoutePosIndex(const UINT16 routeId, const UINT16 phySectionId)
retVal = ROUTE_PHYSICALSECTION_SUM_MAX; /*·µ»ØÊ§°Ü*/ retVal = ROUTE_PHYSICALSECTION_SUM_MAX; /*·µ»ØÊ§°Ü*/
} }
return retVal;
}
/*
* ID进路配置方向
* const UINT16 routeId, ID
* 0x55 Link方向一致
* 0xAA Link方向相反
** by LYJ 20260330
*/
UINT8 GetRouteConfigDirection(const UINT16 routeId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT8 retVal = CI_ERROR;
bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/
if (ROUTE_SUM_MAX > bufIndex)
{
retVal = RouteConfigDataStru[bufIndex].chRouteConfigDirection;
}
else
{
retVal = CI_ERROR;
}
return retVal; return retVal;
} }
@@ -188,7 +188,8 @@ typedef struct S_RouteConfigDataStruct
UINT16 RouteId; /*进路ID (配置字段)*/ UINT16 RouteId; /*进路ID (配置字段)*/
UINT8 BelongCiId; /*所属联锁ID (配置字段)*/ UINT8 BelongCiId; /*所属联锁ID (配置字段)*/
UINT8 BelongVirCIid; /*所属虚拟联锁ID*/ UINT8 BelongVirCIid; /*所属虚拟联锁ID*/
UINT8 RouteDirection; /*进路方向(向左/向右) (配置字段)*/ UINT8 RouteDirection; /*进路方向(向左/向右) (配置字段叠系统定义逻辑方向与上下行方向的关系计算的上下行)*/
UINT8 chRouteConfigDirection; /*进路方向(向左/向右) (纯配置字段0x55 与Link方向一致 0xAA 与Link方向相反)*/
UINT8 RouteType; /*进路类型(列车进路/折返进路/调车进路) (配置字段)*/ UINT8 RouteType; /*进路类型(列车进路/折返进路/调车进路) (配置字段)*/
UINT8 ConfigRouteType; /*配置进路类型(列车进路/折返进路/调车进路) (配置字段)*/ UINT8 ConfigRouteType; /*配置进路类型(列车进路/折返进路/调车进路) (配置字段)*/
UINT8 LeadProperty; /*进路引导属性(不可引导/可引导) (配置字段)*/ UINT8 LeadProperty; /*进路引导属性(不可引导/可引导) (配置字段)*/
@@ -1418,6 +1419,14 @@ UINT8 GetRouteThisPortecSwitchPos(const UINT16 wRouteId, const UINT16 wSwitchId)
* *
*/ */
UINT8 GetPhySecInRoutePosIndex(const UINT16 routeId, const UINT16 phySectionId); UINT8 GetPhySecInRoutePosIndex(const UINT16 routeId, const UINT16 phySectionId);
/*
* ID进路配置方向
* const UINT16 routeId, ID
* 0x55 Link方向一致
* 0xAA Link方向相反
** by LYJ 20260330
*/
UINT8 GetRouteConfigDirection(const UINT16 routeId);
#ifdef __cplusplus #ifdef __cplusplus
} }
+1 -1
View File
@@ -72,7 +72,7 @@ typedef struct S_RouteDataStruct
UINT8 RouteAssoSwitSingOperStat; /*进路带动道岔单操状态*/ UINT8 RouteAssoSwitSingOperStat; /*进路带动道岔单操状态*/
UINT8 RouteInnerSwitDrivState; /*进路内道岔驱动状态*/ UINT8 RouteInnerSwitDrivState; /*进路内道岔驱动状态*/
UINT8 RouteAssocSwitDrivState; /*进路带动道岔驱动状态*/ UINT8 RouteAssocSwitDrivState; /*进路带动道岔驱动状态*/
UINT8 RouteStateFlag; /*进路状态标志(1:表示有效;0:表示无效)*/ UINT8 RouteStateFlag; /*进路状态标志(0x55:表示有效;0xAA:表示无效)*/
UINT8 TrainEnterFlag; /*列车驶入标志*/ UINT8 TrainEnterFlag; /*列车驶入标志*/
UINT8 ZongRenJieDelayType; /*总人解延时类型,分为:倒计时结束后立刻全部区段解锁,第一个占压的物理区段前变异常锁闭,所有的物理区段变异常锁闭*/ UINT8 ZongRenJieDelayType; /*总人解延时类型,分为:倒计时结束后立刻全部区段解锁,第一个占压的物理区段前变异常锁闭,所有的物理区段变异常锁闭*/
UINT8 RecoverOpenState; /*进路需要重开状态,用于处理PSD、SPKS、扣车恢复重开信号*/ UINT8 RecoverOpenState; /*进路需要重开状态,用于处理PSD、SPKS、扣车恢复重开信号*/
@@ -17,7 +17,7 @@
AxisSectionConfigDataStruct AxisSectionConfigDataStru[AXIS_SECTION_SUM_MAX]; /*定义计轴区段配置数据结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/ AxisSectionConfigDataStruct AxisSectionConfigDataStru[AXIS_SECTION_SUM_MAX]; /*定义计轴区段配置数据结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
UINT16 LocalCiAxisSectionIdBuf[AXIS_SECTION_SUM_MAX] = {0u}; /*定义本地联锁计轴区段ID映射数组*/ UINT16 LocalCiAxisSectionIdBuf[AXIS_SECTION_SUM_MAX] = {0u}; /*定义本地联锁计轴区段ID映射数组*/
INT16 AxisSectionCurSum = 0; /*逻辑区段当前总数*/ INT16 AxisSectionCurSum = 0; /*计轴区段当前总数*/
UINT16 totalAxisNum = 0u; /*本联锁+相邻联锁的计轴区段ID数量*/ UINT16 totalAxisNum = 0u; /*本联锁+相邻联锁的计轴区段ID数量*/
/* /*
@@ -1150,4 +1150,56 @@ UINT8 GetAxisSecCbtcProperty(const UINT16 axisSectionId)
} }
return retVal; return retVal;
} }
/*
* ID计轴区段关联防护道岔数目
* const UINT16 wLogicSecId, ID
* 0:
* >0:
* : mpt 20260331
*/
UINT8 GetAxisSecRelateProSwSum(const UINT16 wAxisSecId)
{
UINT16 wBufIndex = 0u; /*数组下标*/
UINT8 retVal = CI_ERROR;
wBufIndex = GetAxisSecConfigBufIndex(wAxisSecId); /*获取计轴区段数组下标*/
if (AXIS_SECTION_SUM_MAX > wBufIndex)
{
retVal = AxisSectionConfigDataStru[wBufIndex].chRelateProSwSum;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* ID计轴区段关联防护道岔结构体
* const UINT16 wLogicSecId, ID
* NULL:
* NULL: ID数组指针
* : mpt 20260331
*/
AxisSwitchStruct* GetAxisSecRelateProSwStru(const UINT16 wAxisSecId)
{
UINT16 wBufIndex = 0u; /*数组下标*/
AxisSwitchStruct* retVal = NULL;
wBufIndex = GetAxisSecConfigBufIndex(wAxisSecId); /*获取数组下标*/
if (AXIS_SECTION_SUM_MAX > wBufIndex)
{
retVal = AxisSectionConfigDataStru[wBufIndex].wRelateProSwId;
}
else
{
retVal = NULL;
}
return retVal;
}
@@ -53,6 +53,8 @@ typedef struct S_AxisSectionConfigDataStruct
UINT8 chAxisLinXian; /*计轴临线属性-是否为本线路-电子地图Link表获得*/ UINT8 chAxisLinXian; /*计轴临线属性-是否为本线路-电子地图Link表获得*/
UINT32 dwAxisTotalLen; /*计轴关联link总长*/ UINT32 dwAxisTotalLen; /*计轴关联link总长*/
UINT8 cAcCbtcAttr; /*计轴区段CBTC区域属性:0x55-具有CBTC区域属性,0xaa-不具有CBTC区域属性*/ UINT8 cAcCbtcAttr; /*计轴区段CBTC区域属性:0x55-具有CBTC区域属性,0xaa-不具有CBTC区域属性*/
UINT8 chRelateProSwSum; /* add by mpt 20260331 计轴区段关联防护道岔数量*/
AxisSwitchStruct wRelateProSwId[AXIS_RELATE_PRO_SW_SUM_MAX];/* add by mpt 20260331 计轴区段关联防护道岔ID数组*/
} AxisSectionConfigDataStruct; } AxisSectionConfigDataStruct;
extern AxisSectionConfigDataStruct AxisSectionConfigDataStru[AXIS_SECTION_SUM_MAX]; /*定义计轴区段配置数据结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/ extern AxisSectionConfigDataStruct AxisSectionConfigDataStru[AXIS_SECTION_SUM_MAX]; /*定义计轴区段配置数据结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
@@ -320,6 +322,22 @@ UINT8 GetAxisSecBorderProperty(const UINT16 axisSectionId);
* Created By LQ 2025.08.05 * Created By LQ 2025.08.05
*/ */
UINT8 GetAxisSecCbtcProperty(const UINT16 axisSectionId); UINT8 GetAxisSecCbtcProperty(const UINT16 axisSectionId);
/*
* ID计轴区段关联防护道岔数目
* const UINT16 wLogicSecId, ID
* 0:
* >0:
* : mpt 20260331
*/
UINT8 GetAxisSecRelateProSwSum(const UINT16 wAxisSecId);
/*
* ID计轴区段关联防护道岔结构体
* const UINT16 wLogicSecId, ID
* NULL:
* NULL: ID数组指针
* : mpt 20260331
*/
AxisSwitchStruct* GetAxisSecRelateProSwStru(const UINT16 wAxisSecId);
#ifdef __cplusplus #ifdef __cplusplus
} }
@@ -854,4 +854,49 @@ void SetAxisSecArbStateCC(const UINT16 axisSectionId, const UINT8 arbState)
{ {
; /*不设置*/ ; /*不设置*/
} }
}
/*
*
* void
*
* by cgh 20260327
*/
void AxisSecStateDeal(void)
{
UINT8 cLocalCiId = 0U; /*本地联锁ID*/
UINT16 ii = 0U;
UINT16 wAxisSecSum = 0U; /*本控区计轴区段数量*/
UINT16 wAxisSecId = 0U; /*计轴区段ID*/
UINT8 cAxisSecBlongCiId = 0U; /*计轴区段所属控区*/
UINT8 chAcArbState = 0U; /*计轴区段ARB状态*/
cLocalCiId = GetSystemParaLocalCiId();
wAxisSecSum = GetAxisSecCurSum();
/*遍历本控区计轴区段*/
for (ii = 0U; ii < wAxisSecSum; ii++)
{
wAxisSecId = GetAxisSecId(ii);
cAxisSecBlongCiId = GetAxisSectionBelongCiId(wAxisSecId);
if ((cLocalCiId == cAxisSecBlongCiId) && (0U != cAxisSecBlongCiId))
{
chAcArbState = aam_GetAxisStatusAPI(wAxisSecId);
/* 计轴区段ARB,则逻辑区段ARB */
if (AAM_STATUS_ARB == chAcArbState)
{
/*设置RC计轴区段ARB状态为ARB*/
SetAxisSecArbStateCC(wAxisSecId, AXIS_SECTION_ARB_YES);
}
else
{
/*设置RC计轴区段ARB状态为未ARB*/
SetAxisSecArbStateCC(wAxisSecId, AXIS_SECTION_ARB_NO);
}
}
else
{
; /*不属于本控区,只是异常防护*/
}
}
} }
@@ -288,6 +288,14 @@ UINT8 GetAxisSecArbStateCC(const UINT16 axisSectionId);
*/ */
void SetAxisSecArbStateCC(const UINT16 axisSectionId, const UINT8 arbState); void SetAxisSecArbStateCC(const UINT16 axisSectionId, const UINT8 arbState);
/*
*
* void
*
* by cgh 20260327
*/
void AxisSecStateDeal(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
@@ -89,6 +89,9 @@ typedef struct S_LogicSectionConfigDataStruct
UINT16 logSecRltPsdBuf[LOGSEC_RELATE_PSD_MAX]; /*逻辑区段关联屏蔽门ID数组*/ UINT16 logSecRltPsdBuf[LOGSEC_RELATE_PSD_MAX]; /*逻辑区段关联屏蔽门ID数组*/
UINT8 logSecRltEsbSum; /*关联紧急按钮数量*/ UINT8 logSecRltEsbSum; /*关联紧急按钮数量*/
UINT16 logSecRltEsbBuf[LOGSEC_RELATE_ESB_MAX]; /*逻辑区段关联紧急按钮ID数组*/ UINT16 logSecRltEsbBuf[LOGSEC_RELATE_ESB_MAX]; /*逻辑区段关联紧急按钮ID数组*/
UINT8 chRelateOverLapSum; /* add by mpt 20260330 逻辑区段关联保护区段数量*/
UINT16 wRelateOverLapIdBuf[LOGSEC_RELATE_OVERLAP_SUM_MAX];/* add by mpt 20260330 逻辑区段关联保护区段ID数组*/
} LogicSectionConfigDataStruct; } LogicSectionConfigDataStruct;
/*******************************全局变量声明*******************************/ /*******************************全局变量声明*******************************/
@@ -1099,7 +1099,6 @@ void RemoveLogSecTrainInfoById(const UINT16 wLogSectionId, const UINT16 wTrnId)
UINT8 chTrainSum = 0U; UINT8 chTrainSum = 0U;
UINT8 ii = 0U; UINT8 ii = 0U;
UINT8 chNeedKeepSum = 0U; UINT8 chNeedKeepSum = 0U;
LogicTrainResStruct * pLogicTrainInfo = NULL;
wBufIndex = GetlogSectionBufIndex(wLogSectionId); /*获取区段数组下标*/ wBufIndex = GetlogSectionBufIndex(wLogSectionId); /*获取区段数组下标*/
@@ -1406,7 +1405,7 @@ void AddLogSecTrainResFromCI(const UINT16 wLogSectionId, const UINT16 wTrnId)
if (TRANSMIT_STATE_GOOD == trainTransSta) if (TRANSMIT_STATE_GOOD == trainTransSta)
{ {
trainInRoutePos = dsuTrainMinHeadCrossSignal(wTrnId, wRLockBelongRouteId); trainInRoutePos = dsuTrainMinHeadCrossSignal(wTrnId, wRLockBelongRouteId, CI_ERROR);
if ((ROUTE_AUTOROUTE_NORMAL == autoRouteType) if ((ROUTE_AUTOROUTE_NORMAL == autoRouteType)
|| (ROUTE_AUTOROUTE_NORMAL == autoProtRouteType) || (ROUTE_AUTOROUTE_NORMAL == autoProtRouteType)
|| (ROUTE_AUTOSIGROUTE_YES == (ROUTE_AUTOSIGROUTE_YES & autoSigRouteType)) || (ROUTE_AUTOSIGROUTE_YES == (ROUTE_AUTOSIGROUTE_YES & autoSigRouteType))
@@ -1589,7 +1588,6 @@ void ClearLgcSecResTrain(UINT16 wLogSecId)
UINT8 chTrainResSum = 0U; UINT8 chTrainResSum = 0U;
UINT16 wBufIndex = 0U; UINT16 wBufIndex = 0U;
UINT8 ii = 0U; UINT8 ii = 0U;
UINT8 logRouteSum = 0;
UINT16 wTrainId = 0U; /*列车ID*/ UINT16 wTrainId = 0U; /*列车ID*/
UINT16 chFlag = 0U; UINT16 chFlag = 0U;
UINT8 chNeedKeepSum = 0U; UINT8 chNeedKeepSum = 0U;
@@ -1620,7 +1618,7 @@ void ClearLgcSecResTrain(UINT16 wLogSecId)
/*清0防脏*/ /*清0防脏*/
for (ii = chNeedKeepSum; ii < LOGIC_SECTION_RES_SUM_MAX; ii++) for (ii = chNeedKeepSum; ii < LOGIC_SECTION_RES_SUM_MAX; ii++)
{ {
(void)ComMemSet(&(LogicSectionDataStruCC[wBufIndex].szTrainResData[ii]), (UINT16)sizeof(LogicTrainResStruct), 0U); (void)ComMemSet((UINT8*)&(LogicSectionDataStruCC[wBufIndex].szTrainResData[ii]), (UINT16)sizeof(LogicTrainResStruct), 0U);
} }
LogicSectionDataStruCC[wBufIndex].chTrainInfoSum = chNeedKeepSum; LogicSectionDataStruCC[wBufIndex].chTrainInfoSum = chNeedKeepSum;
} }
@@ -1647,7 +1645,7 @@ void CpyLgcSecResTrain(UINT16 wLogSecId,UINT8 chTrainSum, LogicTrainResStruct *p
} }
else else
{ {
(void)ComMemCopy(pstLgcResInfo, (LogicSectionDataStruCC[wBufIndex].szTrainResData), (UINT16)(sizeof(LogicTrainResStruct)*LOGIC_SECTION_RES_SUM_MAX)); (void)ComMemCopy((UINT8*)pstLgcResInfo, (UINT8*)(LogicSectionDataStruCC[wBufIndex].szTrainResData), (UINT16)(sizeof(LogicTrainResStruct)*LOGIC_SECTION_RES_SUM_MAX));
LogicSectionDataStruCC[wBufIndex].chTrainInfoSum = chTrainSum; LogicSectionDataStruCC[wBufIndex].chTrainInfoSum = chTrainSum;
} }
} }
@@ -1774,7 +1772,7 @@ void SetLogSecTrainLockApply(const UINT16 wLogSectionId, const UINT16 wTrnId)
} }
else else
{ {
trainInRoutePos = dsuTrainMinHeadCrossSignal(wTrnId, wRLockBelongRouteId); trainInRoutePos = dsuTrainMinHeadCrossSignal(wTrnId, wRLockBelongRouteId, CI_ERROR);
if ((TRAIN_ENTER_ROUTE_FULL == trainInRoutePos) || (TRAIN_ENTER_ROUTE_TAIL == trainInRoutePos)) if ((TRAIN_ENTER_ROUTE_FULL == trainInRoutePos) || (TRAIN_ENTER_ROUTE_TAIL == trainInRoutePos))
{ {
; /*不处理 V12.0.2变更2*/ ; /*不处理 V12.0.2变更2*/
@@ -1900,17 +1898,10 @@ UINT8 GetLgcSecResCanAdd(const UINT16 wLogSectionId,const UINT16 wTrnId)
UINT16 wBufIndex = 0u; /*数组下标*/ UINT16 wBufIndex = 0u; /*数组下标*/
UINT16 wRLockBelongRouteId = 0U; UINT16 wRLockBelongRouteId = 0U;
UINT16 wRLockStartSignalId = 0U; UINT16 wRLockStartSignalId = 0U;
UINT16 wPLockStartSignalId = 0U;
UINT16 wPLockEndSignalId = 0U;
UINT16 wRLockLightUpTrainId = 0U; UINT16 wRLockLightUpTrainId = 0U;
UINT16 wPLockLightUpTrainId = 0U;
UINT16 wRouteLockOverLapId = 0U;
UINT8 chOverLapBelongCiId = 0U;
UINT8 chTrainCrossPLockStt = 0U;
UINT8 chTrainCrossRLockStt = 0U; UINT8 chTrainCrossRLockStt = 0U;
UINT8 cRouteCId = 0u; UINT8 cRouteCId = 0u;
UINT8 cLocalCiId = 0u; UINT8 cLocalCiId = 0u;
UINT8 chLgcResShareFlag = 0U;
UINT8 autoRouteType = 0U; UINT8 autoRouteType = 0U;
UINT8 autoSigRouteType = 0U; UINT8 autoSigRouteType = 0U;
UINT8 autoProtRouteType = 0U; UINT8 autoProtRouteType = 0U;
@@ -2983,7 +2974,7 @@ UINT8 GetBackUpVobcMinTsr(UINT16* minSpeed, UINT16 logSum, UINT16 szLogId[])
{ {
if (pTsrData[jj].cSpeed < *minSpeed) if (pTsrData[jj].cSpeed < *minSpeed)
{ {
for (mm == 0U; mm < pTsrData[jj].cLogSecSum; mm++) for (mm = 0U; mm < pTsrData[jj].cLogSecSum; mm++)
{ {
for (kk = 0U; kk < logSum; kk++) for (kk = 0U; kk < logSum; kk++)
{ {
@@ -3037,7 +3028,7 @@ void SetTsrSum(UINT8 cTsrSum)
*/ */
TsrDataStruct* GetTsrData(void) TsrDataStruct* GetTsrData(void)
{ {
return &g_TsrDataStru; return g_TsrDataStru;
} }
/* /*
@@ -3790,6 +3781,9 @@ void LogJumpLockCmdManage(const UINT16 logSectionId, const UINT8 jumpLockState)
{ {
UINT16 bufIndex = 0u; /*数组下标*/ UINT16 bufIndex = 0u; /*数组下标*/
UINT8 checkResult = CI_ERROR; UINT8 checkResult = CI_ERROR;
UINT16 devId = 0u; /*设备ID*/
UINT8 devState = 0u; /*设备状态*/
UINT8 retVal = 0u;
/** 获取逻辑区段数组下标*/ /** 获取逻辑区段数组下标*/
bufIndex = GetlogSectionBufIndex(logSectionId); bufIndex = GetlogSectionBufIndex(logSectionId);
@@ -3811,9 +3805,20 @@ void LogJumpLockCmdManage(const UINT16 logSectionId, const UINT8 jumpLockState)
else else
{ {
/** 设置跳跃锁闭允许标志为允许 */ /** 设置跳跃锁闭允许标志为允许 */
SetLogSecJumpLockPermFlag(logSectionId, LOGIC_JUMPUNLOCK_PERMISSIVE_YES);
/** 设置逻辑区段跳跃锁闭 */ /** 设置逻辑区段跳跃锁闭 */
SetLogSecJumpLockState(logSectionId, LOGIC_SECTION_JUMP_LOCK_YES); SetLogSecJumpLockState(logSectionId, LOGIC_SECTION_JUMP_LOCK_YES);
SetLogSecRelProSwitchLockSta(logSectionId, SWITCH_LOCK_PROTECT_SET);
devId = 0u;
devState = 0u;
retVal = LogicSecRltvPrtctSwLockCheck(logSectionId, &devId, &devState);
if (CI_SUCCESS == retVal)
{
SetLogSecJumpLockPermFlag(logSectionId, LOGIC_JUMPUNLOCK_PERMISSIVE_YES);
}
} }
} }
/** 逻辑区段跳跃锁闭未锁闭*/ /** 逻辑区段跳跃锁闭未锁闭*/
@@ -3823,6 +3828,8 @@ void LogJumpLockCmdManage(const UINT16 logSectionId, const UINT8 jumpLockState)
SetLogSecJumpLockPermFlag(logSectionId, LOGIC_JUMPUNLOCK_PERMISSIVE_NO); SetLogSecJumpLockPermFlag(logSectionId, LOGIC_JUMPUNLOCK_PERMISSIVE_NO);
/** 设置跳跃锁闭未锁闭 */ /** 设置跳跃锁闭未锁闭 */
SetLogSecJumpLockState(logSectionId, LOGIC_SECTION_JUMP_LOCK_NO); SetLogSecJumpLockState(logSectionId, LOGIC_SECTION_JUMP_LOCK_NO);
SetLogSecRelProSwitchLockSta(logSectionId, SWITCH_LOCK_PROTECT_CANCEL);
} }
else else
{ {
@@ -4283,7 +4290,7 @@ UINT8 GetLgcArbState(const UINT16 wLgcId)
} }
/* /*
* ARB状态 * ARB状态
* const UINT16 wLgcId, ID * const UINT16 wLgcId, ID
* const UINT8 chArb ARB状态 * const UINT8 chArb ARB状态
* *
@@ -4384,6 +4391,7 @@ void SetLgcArbStateProc(void)
} }
} }
} }
/* /*
* *
* const UINT16 logSectionId, ID * const UINT16 logSectionId, ID
@@ -4460,7 +4468,6 @@ UINT8 GetLogicSupicTrainStat(UINT16 wLgcId)
UINT8 chIndex = 0u; UINT8 chIndex = 0u;
UINT8 chRtn = CI_ERROR; UINT8 chRtn = CI_ERROR;
TRAIN_SEQUANCE_s strTmp[SIZE_MAX_TRAINOFAC] = { 0u }; TRAIN_SEQUANCE_s strTmp[SIZE_MAX_TRAINOFAC] = { 0u };
TRAIN_SEQUANCE_s strTmpB = { 0u };
UINT8 chTrainNum = 0u; UINT8 chTrainNum = 0u;
chLinkNum = GetSecIntrudeLinkSum(wLgcId); chLinkNum = GetSecIntrudeLinkSum(wLgcId);
pLinkId = GetSecIntrudeLinkIdBuf(wLgcId); pLinkId = GetSecIntrudeLinkIdBuf(wLgcId);
@@ -4853,7 +4860,7 @@ UINT8 DelLogSecBelongLogRouteId(const UINT16 logSectionId, const UINT16 wLogRout
} }
} }
/* 清0防止脏数据*/ /* 清0防止脏数据*/
(void)ComMemSet(&logRoutBuf[chNeedKeepSum], (UINT16)sizeof(LogSecLockBelLogRouteStruct), 0U); (void)ComMemSet((UINT8*)&logRoutBuf[chNeedKeepSum], (UINT16)sizeof(LogSecLockBelLogRouteStruct), 0U);
LogicSectionDataStruCC[bufIndex].chLogSecLockBelLogRouteSum = chNeedKeepSum;/*修改所属逻辑进路数量*/ LogicSectionDataStruCC[bufIndex].chLogSecLockBelLogRouteSum = chNeedKeepSum;/*修改所属逻辑进路数量*/
retVal = CI_SUCCESS; retVal = CI_SUCCESS;
} }
@@ -4883,8 +4890,6 @@ UINT8 AddLogSecBelongLogRouteId(const UINT16 logSectionId, const UINT16 wLogRout
LogSecLockBelLogRouteStruct* logRoutBuf = NULL; /*逻辑区段所属逻辑进路数组*/ LogSecLockBelLogRouteStruct* logRoutBuf = NULL; /*逻辑区段所属逻辑进路数组*/
UINT16 logRoutSum = 0U; /*逻辑区段所属逻辑进路数组数量*/ UINT16 logRoutSum = 0U; /*逻辑区段所属逻辑进路数组数量*/
UINT8 retVal = CI_ERROR; UINT8 retVal = CI_ERROR;
UINT8 ii = 0U;
UINT8 chNeedKeepSum = 0U;
bufIndex = GetlogSectionBufIndex(logSectionId); /*获取区段数组下标*/ bufIndex = GetlogSectionBufIndex(logSectionId); /*获取区段数组下标*/
@@ -5647,7 +5652,6 @@ UINT8 GetLogSecLockBelLogRouteBuf(const UINT16 wLgcId,OUT LogSecLockBelLogRouteS
void SetLogSecLockStateHlht(UINT16 wLogSectionId, const UINT8 lockState) void SetLogSecLockStateHlht(UINT16 wLogSectionId, const UINT8 lockState)
{ {
UINT16 bufIndex = 0u; /*数组下标*/ UINT16 bufIndex = 0u; /*数组下标*/
UINT8 preLockState = 0u;
bufIndex = GetlogSectionBufIndex(wLogSectionId); /*获取区段数组下标*/ bufIndex = GetlogSectionBufIndex(wLogSectionId); /*获取区段数组下标*/
@@ -5756,11 +5760,10 @@ void SetLogSecPLockRouteIdHlht(UINT16 wLogSectionId, const UINT16 routeId)
/* /*
* ID * ID
* UINT16 wLogSectionId, ID * UINT16 wLogSectionId, ID
const UINT16 routeId,ID
* *
* by 20250117 * by 20250117
*/ */
void SetLogSecRLockRouteIdHlht(UINT16 wLogSectionId, const UINT16 routeId) void SetLogSecRLockRouteIdHlht(UINT16 wLogSectionId)
{ {
UINT16 bufIndex = 0u; /*数组下标*/ UINT16 bufIndex = 0u; /*数组下标*/
@@ -6396,4 +6399,218 @@ UINT8 ReqAlignmentInfoCalc(void)
} }
return chRetVal; return chRetVal;
}
/*
* ATS的逻辑区段ARB状态
* const UINT16 wLgcId
* const UINT8 chDevType
* LGC_SECTION_ARB_NO ARB
* LGC_SECTION_ARB_YES ARB
* by cgh 20260327
*/
UINT8 GetToAtsLgcArbState(const UINT16 wLgcId,const UINT8 chDevType)
{
UINT8 chReval = LGC_SECTION_ARB_NO;
UINT8 chAcNum = 0U; /*逻辑区段对应计轴区段数目*/
UINT16* pAcId = NULL; /*逻辑区段关联计轴区段ID*/
UINT8 chAcIndex = 0U; /*计轴区段循环索引*/
UINT8 chAcArbState = 0U; /*计轴区段ARB状态*/
chAcNum = GetLgcSecRelativeAxleSecSum(wLgcId);
pAcId = GetLgcSecRltvAxleSecIdBuf(wLgcId);
/*逻辑区段关联计轴区段数据合法*/
if ((0U != chAcNum) && (NULL != pAcId) && ((RC_WORK_MODE_TIOC == chDevType) || (RC_WORK_MODE_CI == chDevType)))
{
/*遍历逻辑区段关联的所有计轴区段*/
for (chAcIndex = 0U; chAcIndex < chAcNum; chAcIndex++)
{
/*当前系统工作模式为RC*/
if (RC_WORK_MODE_TIOC == chDevType)
{
chAcArbState = GetAxisSecArbStateCC(pAcId[chAcIndex]);
}
/*当前系统工作模式为CI*/
else
{
chAcArbState = GetAxisSecArbStateZc(pAcId[chAcIndex]);
}
/* 计轴区段ARB,则逻辑区段ARB */
if (AXIS_SECTION_ARB_YES == chAcArbState)
{
chReval = LGC_SECTION_ARB_YES;
/*找到逻辑区段关联的任意一个计轴区段ARB,则不再继续查找,认为逻辑区段ARB*/
break;
}
else
{
/* 计轴区段非ARB,继续查找 */
;
}
}
}
else
{
/* 数据获取失败 */
}
return chReval;
}
/*
* CBTC_ARB状态
* const UINT16 wLgcId, ID
* 0:
* >0: CBTC_ARB状态
* BY CGH 20260330
*/
UINT8 GetLogSecCbtcArbState(const UINT16 wLgcId)
{
UINT16 bufIndex = LGC_SECTION_ARB_NO; /*数组下标*/
UINT8 retVal = CI_ERROR;
bufIndex = GetlogSectionBufIndex(wLgcId); /*获取区段数组下标*/
if (LOGIC_SECTION_SUM_MAX > bufIndex)
{
retVal = LogicSectionDataStru[bufIndex].chLogSecCbtcArbState;
}
else
{
;
}
return retVal;
}
/*
* CBTC_ARB状态
* const UINT16 wLgcId, ID
* const UINT8 chArb ARB状态
*
* BY CGH 20260330
*/
void SetLogSecCbtcArbState(const UINT16 wLgcId, const UINT8 chArb)
{
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetlogSectionBufIndex(wLgcId); /*获取区段数组下标*/
if ((LOGIC_SECTION_SUM_MAX > bufIndex)
&& ((LGC_SECTION_ARB_NO == chArb) || (LGC_SECTION_ARB_YES == chArb)))
{
LogicSectionDataStru[bufIndex].chLogSecCbtcArbState = chArb;
}
else
{
;
}
}
/*
* PB_TACS_ARB状态
* const UINT16 wLgcId, ID
* 0:
* >0: PB_TACS_ARB状态
* BY CGH 20260330
*/
UINT8 GetLogSecPbTacsArbState(const UINT16 wLgcId)
{
UINT16 bufIndex = LGC_SECTION_ARB_NO; /*数组下标*/
UINT8 retVal = CI_ERROR;
bufIndex = GetlogSectionBufIndex(wLgcId); /*获取区段数组下标*/
if (LOGIC_SECTION_SUM_MAX > bufIndex)
{
retVal = LogicSectionDataStru[bufIndex].chLogSecPbTacsArbState;
}
else
{
;
}
return retVal;
}
/*
* PB_TACS_ARB状态
* const UINT16 wLgcId, ID
* const UINT8 chArb ARB状态
*
* BY CGH 20260330
*/
void SetLogSecPbTacsArbState(const UINT16 wLgcId, const UINT8 chArb)
{
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetlogSectionBufIndex(wLgcId); /*获取区段数组下标*/
if ((LOGIC_SECTION_SUM_MAX > bufIndex)
&& ((LGC_SECTION_ARB_NO == chArb) || (LGC_SECTION_ARB_YES == chArb)))
{
LogicSectionDataStru[bufIndex].chLogSecPbTacsArbState = chArb;
}
else
{
;
}
}
/*
* ATS的逻辑区段ARB状态
*
*
* by cgh 20260330
*/
void SetSendAtsLgcArbState(void)
{
UINT8 chLocalId = 0U; /*本地联锁ID*/
UINT8 chBelongCiId = 0U; /*所属联锁ID*/
UINT16 wLgcNum = 0U; /*逻辑区段数目*/
UINT16 wLgcIndex = 0U; /*逻辑区段索引ID*/
UINT16 wLgcId = 0U; /*逻辑区段ID*/
UINT8 chArbState = 0U; /*ARB状态*/
chLocalId = GetSystemParaLocalCiId();
/* 获取逻辑区段数量 */
wLgcNum = GetLogicSecCurSum();
for (wLgcIndex = 0u; wLgcIndex < wLgcNum; wLgcIndex++)
{
wLgcId = GetLogicSecId(wLgcIndex);
chBelongCiId = GetLogSecBelongCiId(wLgcId);
if ((chLocalId == chBelongCiId) && (0U != chBelongCiId))
{
/*处理CBTC_ARB状态*/
chArbState = GetToAtsLgcArbState(wLgcId, RC_WORK_MODE_CI);
if (LGC_SECTION_ARB_YES == chArbState)
{
SetLogSecCbtcArbState(wLgcId, LGC_SECTION_ARB_YES);
}
else
{
SetLogSecCbtcArbState(wLgcId, LGC_SECTION_ARB_NO);
}
/*处理PB_TACS_ARB状态*/
chArbState = GetToAtsLgcArbState(wLgcId, RC_WORK_MODE_TIOC);
if (LGC_SECTION_ARB_YES == chArbState)
{
SetLogSecPbTacsArbState(wLgcId, LGC_SECTION_ARB_YES);
}
else
{
SetLogSecPbTacsArbState(wLgcId, LGC_SECTION_ARB_NO);
}
}
else
{
; /* 数据获取失败 */
}
}
} }
@@ -75,6 +75,8 @@ typedef struct S_LogicSectionDataStruct
UINT8 chLogicSpksFLockState; /*逻辑区段被SPKS封锁状态 0x55 未封锁 0xaa 封锁*/ UINT8 chLogicSpksFLockState; /*逻辑区段被SPKS封锁状态 0x55 未封锁 0xaa 封锁*/
UINT8 chLogSecEmergXianSu; /*逻辑区段紧急临时限速*/ UINT8 chLogSecEmergXianSu; /*逻辑区段紧急临时限速*/
UINT8 chLogSecCbtcArbState; /*逻辑区段CBTC_ARB状态*/
UINT8 chLogSecPbTacsArbState; /*逻辑区段PB_TACS_ARB状态*/
} LogicSectionDataStruct; } LogicSectionDataStruct;
/*逻辑区段结构体-车车*/ /*逻辑区段结构体-车车*/
@@ -1310,11 +1312,10 @@ void SetLogSecPLockRouteIdHlht(UINT16 wLogSectionId, const UINT16 routeId);
/* /*
* ID * ID
* UINT16 wLogSectionId, ID * UINT16 wLogSectionId, ID
const UINT16 routeId,ID
* *
* by 20250117 * by 20250117
*/ */
void SetLogSecRLockRouteIdHlht(UINT16 wLogSectionId, const UINT16 routeId); void SetLogSecRLockRouteIdHlht(UINT16 wLogSectionId);
/* /*
* *
@@ -1415,6 +1416,60 @@ void SetLogSecTXOccupyStateCC(const UINT16 logSectionId, const UINT8 curOccupySt
*/ */
UINT8 ReqAlignmentInfoCalc(void); UINT8 ReqAlignmentInfoCalc(void);
/*
* ATS的逻辑区段ARB状态
* const UINT16 wLgcId
* const UINT8 chDevType
* LGC_SECTION_ARB_NO ARB
* LGC_SECTION_ARB_YES ARB
* by cgh 20260327
*/
UINT8 GetToAtsLgcArbState(const UINT16 wLgcId, const UINT8 chDevType);
/*
* CBTC_ARB状态
* const UINT16 wLgcId, ID
* 0:
* >0: CBTC_ARB状态
* BY CGH 20260330
*/
UINT8 GetLogSecCbtcArbState(const UINT16 wLgcId);
/*
* CBTC_ARB状态
* const UINT16 wLgcId, ID
* const UINT8 chArb ARB状态
*
* BY CGH 20260330
*/
void SetLogSecCbtcArbState(const UINT16 wLgcId, const UINT8 chArb);
/*
* PB_TACS_ARB状态
* const UINT16 wLgcId, ID
* 0:
* >0: PB_TACS_ARB状态
* BY CGH 20260330
*/
UINT8 GetLogSecPbTacsArbState(const UINT16 wLgcId);
/*
* PB_TACS_ARB状态
* const UINT16 wLgcId, ID
* const UINT8 chArb ARB状态
*
* BY CGH 20260330
*/
void SetLogSecPbTacsArbState(const UINT16 wLgcId, const UINT8 chArb);
/*
* ATS的逻辑区段ARB状态
*
*
* by cgh 20260330
*/
void SetSendAtsLgcArbState(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
+4 -2
View File
@@ -26,7 +26,7 @@
#define PHYSICAL_INCLUDE_SWITCH_SUM_MAX ((UINT16)10) /*定义物理区段包含的道岔数量最大值*/ #define PHYSICAL_INCLUDE_SWITCH_SUM_MAX ((UINT16)10) /*定义物理区段包含的道岔数量最大值*/
#define SEC_INVASECT_N_CONDSWIT_SUM_MAX ((UINT16)20) /*定义物理区段包含的侵限区段数量最大值*/ #define SEC_INVASECT_N_CONDSWIT_SUM_MAX ((UINT16)20) /*定义物理区段包含的侵限区段数量最大值*/
#define LOGSEC_INV_N_CONDSWIT_SUM_MAX ((UINT16)8) /*定义逻辑区段包含的侵限区段数量最大值*/ #define LOGSEC_INV_N_CONDSWIT_SUM_MAX ((UINT16)8) /*定义逻辑区段包含的侵限区段数量最大值*/
#define LINK_SUM_MAX ((UINT16)1300) /*定义LINK数量最大值*//* add 2022.02.28 */ #define LINK_SUM_MAX ((UINT16)1600) /*定义LINK数量最大值*//* add 2022.02.28 20260211增加置1600厦门3*/
#define LOGSEC_INCLUDE_AXIS_SUM_MAX ((UINT16)8) /*定义逻辑区段包含的计轴区段数量最大值*//* add 20220919 TIOC5.0*/ #define LOGSEC_INCLUDE_AXIS_SUM_MAX ((UINT16)8) /*定义逻辑区段包含的计轴区段数量最大值*//* add 20220919 TIOC5.0*/
#define LOGSEC_INCLUDE_SWITCH_SUM_MAX ((UINT16)4) /*定义逻辑区段包含的道岔数量最大值*//* add 20220921 TIOC5.0*/ #define LOGSEC_INCLUDE_SWITCH_SUM_MAX ((UINT16)4) /*定义逻辑区段包含的道岔数量最大值*//* add 20220921 TIOC5.0*/
#define LOGSEC_LTRL_DFNC_SUM_MAX ((UINT16)8) /*定义逻辑区段侧防条件数量最大值*//* add 20220921 TIOC5.0*/ #define LOGSEC_LTRL_DFNC_SUM_MAX ((UINT16)8) /*定义逻辑区段侧防条件数量最大值*//* add 20220921 TIOC5.0*/
@@ -34,12 +34,14 @@
#define LOGSEC_NEXT_LOGSEC_SUM_MAX ((UINT16)16) /*定义逻辑区段相邻逻辑区段数量最大值*//* add 20230408 cgh*/ #define LOGSEC_NEXT_LOGSEC_SUM_MAX ((UINT16)16) /*定义逻辑区段相邻逻辑区段数量最大值*//* add 20230408 cgh*/
#define LOGSEC_RELATE_SIG_SUM_MAX ((UINT16)2) /*定义逻辑区段关联信号机数量最大值*//* add 20230504 cgh*/ #define LOGSEC_RELATE_SIG_SUM_MAX ((UINT16)2) /*定义逻辑区段关联信号机数量最大值*//* add 20230504 cgh*/
#define LOGSEC_RELATE_ROUTE_SUM_MAX ((UINT16)200) /*定义逻辑区段关联进路数量最大值*//* add 20230504 cgh*/ #define LOGSEC_RELATE_ROUTE_SUM_MAX ((UINT16)200) /*定义逻辑区段关联进路数量最大值*//* add 20230504 cgh*/
#define LOGSEC_RELATE_PRO_SW_SUM_MAX ((UINT16)8) /*定义逻辑区段关联防护道岔数量最大值*//* add 20230504 cgh*/ #define LOGSEC_RELATE_PRO_SW_SUM_MAX ((UINT16)50) /*定义逻辑区段关联防护道岔数量最大值*//* add 20230504 cgh*/
#define LOGSEC_RELATE_CON_SW_SUM_MAX ((UINT16)4) /*定义逻辑区段关联联络线道岔数量最大值*//* add 20230504 cgh*/ #define LOGSEC_RELATE_CON_SW_SUM_MAX ((UINT16)4) /*定义逻辑区段关联联络线道岔数量最大值*//* add 20230504 cgh*/
#define PHYSEC_RELATE_ROUTE_SUM_MAX ((UINT16)24) /*定义物理区段关联进路数量最大值*//* add 20231113 lq*/ #define PHYSEC_RELATE_ROUTE_SUM_MAX ((UINT16)24) /*定义物理区段关联进路数量最大值*//* add 20231113 lq*/
#define LOGSEC_RELATE_PSD_MAX ((UINT8)0X04U) /*定义逻辑区段关联屏蔽门数量最大值*//* add 20240410 fan*/ #define LOGSEC_RELATE_PSD_MAX ((UINT8)0X04U) /*定义逻辑区段关联屏蔽门数量最大值*//* add 20240410 fan*/
#define LOGSEC_RELATE_ESB_MAX ((UINT8)10U) /*定义逻辑区段关联紧急按钮数量最大值*//* add 20240410 fan*/ #define LOGSEC_RELATE_ESB_MAX ((UINT8)10U) /*定义逻辑区段关联紧急按钮数量最大值*//* add 20240410 fan*/
#define TRCAK_SECTION_SUM_MAX ((UINT16)5000) /*定义轨道区段数量最大值*/ #define TRCAK_SECTION_SUM_MAX ((UINT16)5000) /*定义轨道区段数量最大值*/
#define LOGSEC_RELATE_OVERLAP_SUM_MAX ((UINT16)200) /*定义逻辑区段关联保护区段数量最大值 add 20260330 mpt*/
#define AXIS_RELATE_PRO_SW_SUM_MAX ((UINT16)100) /*定义计轴区段关联防护道岔数量最大值*/
#define QINXIAN_SWITCH_MAX_NUM ((UINT8)0X16U) /*定义侵限区段关联条件道岔的最大数量 add 20240607 LC */ #define QINXIAN_SWITCH_MAX_NUM ((UINT8)0X16U) /*定义侵限区段关联条件道岔的最大数量 add 20240607 LC */
+34 -6
View File
@@ -5646,9 +5646,9 @@ UINT32 GetDetainSndBtnPressCycNum(const UINT16 signalId)
* ID信号机亮灭状态CC * ID信号机亮灭状态CC
* const UINT16 signalId, ID * const UINT16 signalId, ID
* 0 * 0
* 0x55 * 0x55
* 0xaa * 0xaa
* Created By LQ 2025.11.05 * EDIT By CGH 2026.02.01
*/ */
UINT8 GetSignalLightExtinctStateCC(const UINT16 signalId) UINT8 GetSignalLightExtinctStateCC(const UINT16 signalId)
{ {
@@ -5736,23 +5736,51 @@ UINT8 GetSignalCrossStateCC(const UINT16 signalId)
return reVal; return reVal;
} }
/*
* TACS主控列车ID
* const UINT16 signalId, ID
* TACS主控列车ID
* Created By wyd 2026.3.27
*/
UINT8 GetSignalCrossTacsTrainIdCC(const UINT16 signalId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT8 reVal = CI_ERROR;
bufIndex = GetSignalConfigBufIndex(signalId); /*获取区段数组下标*/
if (SIGNAL_SUM_MAX > bufIndex)
{
reVal = SignalDataStruCC[bufIndex].wCrossTacsTrainId;
}
else
{
/*不处理*/
}
return reVal;
}
/* /*
* CC * CC
* const UINT16 signalId, ID * const UINT16 signalId, ID
* const UINT8 signalCrossState
* const UINT8 wTrainId ID
* *
* Created By LQ 2025.11.05 * Created By LQ 2025.11.05
*/ */
void SetSignalCrossStateCC(const UINT16 signalId, const UINT8 signalCrossState) void SetSignalCrossStateCC(const UINT16 signalId, const UINT8 signalCrossState, const UINT8 wTrainId)
{ {
UINT16 bufIndex = 0U; /*数组下标*/ UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetSignalConfigBufIndex(signalId); /*获取道岔数组下标*/ bufIndex = GetSignalConfigBufIndex(signalId); /*获取信号机数组下标*/
if (bufIndex < SIGNAL_SUM_MAX) if (bufIndex < SIGNAL_SUM_MAX)
{ {
if ((SIGNAL_CROSS_STATE_NO == signalCrossState) || (SIGNAL_CROSS_STATE_YES == signalCrossState)) if (((SIGNAL_CROSS_STATE_NO == signalCrossState) || (SIGNAL_CROSS_STATE_YES == signalCrossState))
&& (TACS_CROSS_ID_MAX >= wTrainId))
{ {
SignalDataStruCC[bufIndex].SignalCrossState = signalCrossState; /*设置通信车跨压通过信号机状态*/ SignalDataStruCC[bufIndex].SignalCrossState = signalCrossState; /*设置通信车跨压通过信号机状态*/
SignalDataStruCC[bufIndex].wCrossTacsTrainId = wTrainId; /*设置通信车跨压通过信号机列车ID*/
} }
else else
{ {
+15 -4
View File
@@ -111,6 +111,7 @@ typedef struct S_SignalDataStructCC
UINT8 cSleepTrainLightUpFlag; /*休眠车点亮信号机标志:0x55 无效,0xAA 有效*/ UINT8 cSleepTrainLightUpFlag; /*休眠车点亮信号机标志:0x55 无效,0xAA 有效*/
UINT8 LightExtinctState; /*信号机亮灭状态CC(0x55:灭灯,0xaa:亮灯)*/ UINT8 LightExtinctState; /*信号机亮灭状态CC(0x55:灭灯,0xaa:亮灯)*/
UINT8 SignalCrossState; /*通信车跨压通过信号机状态CC(0x55:未跨压,0xaa:跨压)*/ UINT8 SignalCrossState; /*通信车跨压通过信号机状态CC(0x55:未跨压,0xaa:跨压)*/
UINT8 wCrossTacsTrainId; /*PB-TACS主控,通信车跨压通过信号机列车ID*/
}SignalDataStructCC; }SignalDataStructCC;
extern SignalDataStruct SignalDataStru[SIGNAL_SUM_MAX]; /*定义信号机数据结构体*/ extern SignalDataStruct SignalDataStru[SIGNAL_SUM_MAX]; /*定义信号机数据结构体*/
@@ -1205,9 +1206,9 @@ UINT32 GetDetainSndBtnPressCycNum(const UINT16 signalId);
* ID信号机亮灭状态CC * ID信号机亮灭状态CC
* const UINT16 signalId, ID * const UINT16 signalId, ID
* 0 * 0
* 0x55 δ¿çѹ * 0x55
* 0xaa ¿çѹ * 0xaa
* Created By LQ 2025.11.05 * EDIT By CGH 2026.02.01
*/ */
UINT8 GetSignalLightExtinctStateCC(const UINT16 signalId); UINT8 GetSignalLightExtinctStateCC(const UINT16 signalId);
@@ -1230,13 +1231,23 @@ void SetSignalLightExtinctStateCC(const UINT16 signalId, const UINT8 lightExtinc
*/ */
UINT8 GetSignalCrossStateCC(const UINT16 signalId); UINT8 GetSignalCrossStateCC(const UINT16 signalId);
/*
* TACS主控列车ID
* const UINT16 signalId, ID
* TACS主控列车ID
* Created By wyd 2026.3.27
*/
UINT8 GetSignalCrossTacsTrainIdCC(const UINT16 signalId);
/* /*
* CC * CC
* const UINT16 signalId, ID * const UINT16 signalId, ID
* const UINT8 signalCrossState
* const UINT8 wTrainId ID
* *
* Created By LQ 2025.11.05 * Created By LQ 2025.11.05
*/ */
void SetSignalCrossStateCC(const UINT16 signalId, const UINT8 signalCrossState); void SetSignalCrossStateCC(const UINT16 signalId, const UINT8 signalCrossState, const UINT8 wTrainId);
#ifdef __cplusplus #ifdef __cplusplus
} }
@@ -1467,4 +1467,262 @@ UINT16 GetSwitchIbpDrvRelayId(const UINT16 switchId)
retVal = CI_ERROR; retVal = CI_ERROR;
} }
return retVal; return retVal;
} }
/*
* OC数
* const UINT16 switchId, ID
* 0
* >0 OC数
* add by mpt 20260326
*/
UINT8 GetSwitchIncludeOcNum(const UINT16 switchId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = CI_ERROR;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (SWITCH_SUM_MAX > bufIndex)
{
retVal = SwitchConfigDataStru[bufIndex].chSwitchBelongOcNum;
if (SWITCH_BELONG_OC_MAX < retVal)
{
retVal = CI_ERROR;
}
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* OCID
* const UINT8 index
* OCID
* add by mpt 20260326
*/
UINT8 GetSwitchIncludeOCId(const UINT16 switchId,const UINT8 index)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = CI_ERROR;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX >bufIndex )&&(SWITCH_BELONG_OC_MAX > index))
{
retVal = SwitchConfigDataStru[bufIndex].belongOCConfigData[index].OcId;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* OC索引
* const UINT8 index
* OC索引
* add by mpt 20260326
*/
UINT8 GetSwitchThisOCIndex(const UINT16 switchId, const UINT8 ocId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = SWITCH_BELONG_OC_MAX;
UINT8 i = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (OC_SUM_MAX > ocId))
{
for (i = 0u; i < SWITCH_BELONG_OC_MAX;i++)
{
if (SwitchConfigDataStru[bufIndex].belongOCConfigData[i].OcId== ocId)
{
retVal = i;
break;
}
}
}
else
{
retVal = SWITCH_BELONG_OC_MAX;
}
return retVal;
}
/*
* OC的插箱ID
* const UINT16 switchId ID
* const UINT8 ocId OCID
* OC的插箱号
* add by mpt 20260326
*/
UINT8 GetSwitchszPlusBoxId(const UINT16 switchId, const UINT8 ocId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = CI_ERROR;
UINT8 i = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (OC_SUM_MAX > ocId))
{
for (i = 0u; i < SwitchConfigDataStru[bufIndex].chSwitchBelongOcNum; i++)
{
if (ocId == SwitchConfigDataStru[bufIndex].belongOCConfigData[i].OcId)
{
retVal = SwitchConfigDataStru[bufIndex].belongOCConfigData[i].szPlusBoxId;
break;
}
}
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* OC的转辙机板卡数
* const UINT16 switchId ID
* const UINT8 ocId OCID
* OC的转辙机板卡数
* add by mpt 20260326
*/
UINT8 GetSwitchThisOCBoardNum(const UINT16 switchId, const UINT8 ocId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = CI_ERROR;
UINT8 i = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (OC_SUM_MAX > ocId))
{
for (i = 0u; i < SwitchConfigDataStru[bufIndex].chSwitchBelongOcNum; i++)
{
if (ocId == SwitchConfigDataStru[bufIndex].belongOCConfigData[i].OcId)
{
retVal = SwitchConfigDataStru[bufIndex].belongOCConfigData[i].chSwitchBoardNum;
break;
}
}
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* OC的转辙机板卡ID的索引号
* const UINT16 switchId ID
* const UINT8 ocId OCID
* OC的转辙机板卡ID的索引号
* add by mpt 20260326
*/
UINT8 GetSwitchThisOCBoardIDindex(const UINT16 switchId, const UINT8 ocId,const UINT8 boardId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 num = 0u;
UINT8 i = 0u;
UINT8 j = 0u;
UINT8 retVal = MAX_OC_SWITCH_INCLUDE_BOARD_NUM;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (OC_SUM_MAX > ocId))
{
for (i = 0u; i < SwitchConfigDataStru[bufIndex].chSwitchBelongOcNum; i++)
{
if (ocId == SwitchConfigDataStru[bufIndex].belongOCConfigData[i].OcId)
{
num = SwitchConfigDataStru[bufIndex].belongOCConfigData[i].chSwitchBoardNum;
for (j = 0u; j < num; j++)
{
if (boardId == SwitchConfigDataStru[bufIndex].belongOCConfigData[i].ModuleAddr[j])
{
retVal = j;
break;
}
}
break;
}
}
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* OC的另一OCId
* const UINT16 switchId ID
* const UINT8 ocId OCID
* OC的另一OCId
* add by mpt 20260326
*/
UINT8 GetSwitchThisOcOtherOCId(const UINT16 switchId, const UINT8 ocId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 i = 0u;
UINT8 retVal = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (OC_SUM_MAX > ocId)&&(0u < ocId))
{
for (i = 0u; i < SwitchConfigDataStru[bufIndex].chSwitchBelongOcNum; i++)
{
if ((ocId != SwitchConfigDataStru[bufIndex].belongOCConfigData[i].OcId)&&(0u < SwitchConfigDataStru[bufIndex].belongOCConfigData[i].OcId))
{
retVal = SwitchConfigDataStru[bufIndex].belongOCConfigData[i].OcId;
break;
}
}
}
return retVal;
}
/*
* OC
*
*
* UINT16 switchId ID
* UINT8 ocId OCID
* 0:
* 1:
* Add by mpt 20260330
*/
UINT8 GetSwitchWhetherBelongThisOc(UINT16 switchId, UINT8 ocId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 i = 0u;
UINT8 retVal = CI_ERROR;
UINT8 chOCIndex = 0U;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (OC_SUM_MAX > ocId) && (0u < ocId))
{
chOCIndex = GetSwitchThisOCIndex(switchId, ocId);
if (SWITCH_BELONG_OC_MAX > chOCIndex)
{
if (ocId == SwitchConfigDataStru[bufIndex].belongOCConfigData[chOCIndex].OcId)
{
retVal = CI_SUCCESS;
}
}
}
return retVal;
}
@@ -33,6 +33,14 @@ typedef struct S_ZzjPowerConfigDataStruct
UINT16 ZzjFanweiPower2; /*转辙机J1反表灯_供电2*/ UINT16 ZzjFanweiPower2; /*转辙机J1反表灯_供电2*/
}ZzjPowerConfigDataStruct; }ZzjPowerConfigDataStruct;
typedef struct S_SwitchBelongOCConfigDataStr/*道岔所属OC配置数据*/
{
UINT8 OcId; /*当前OC*/
UINT8 chSwitchBoardNum; /*道岔板卡数*/
UINT8 ModuleAddr[MAX_OC_SWITCH_INCLUDE_BOARD_NUM]; /*地址ID*/
UINT8 szPlusBoxId; /*转辙机板所在插箱ID*/
}SwitchBelongOCConfigDataStr;
typedef struct S_SwitchConfigDataStruct typedef struct S_SwitchConfigDataStruct
{ {
UINT16 SwitchId; /*道岔ID (配置字段)*/ UINT16 SwitchId; /*道岔ID (配置字段)*/
@@ -99,6 +107,9 @@ typedef struct S_SwitchConfigDataStruct
UINT16 DsDrvHRelayId; /*道岔单锁后节点驱动继电器ID (配置字段-联络线使用)*/ UINT16 DsDrvHRelayId; /*道岔单锁后节点驱动继电器ID (配置字段-联络线使用)*/
UINT16 IbpDrvRelayId; /*IBP盘道岔旁路驱动继电器ID (配置字段-联络线使用)*/ UINT16 IbpDrvRelayId; /*IBP盘道岔旁路驱动继电器ID (配置字段-联络线使用)*/
ZzjPowerConfigDataStruct ZzjPowerData[SWITCH_ZZJ_POWER_STATE_MAX_NUM]; /*转辙机供电配置数据*/ ZzjPowerConfigDataStruct ZzjPowerData[SWITCH_ZZJ_POWER_STATE_MAX_NUM]; /*转辙机供电配置数据*/
UINT8 chSwitchBelongOcNum;/*道岔所属OC数*/
SwitchBelongOCConfigDataStr belongOCConfigData[SWITCH_BELONG_OC_MAX];/*道岔所属各OC的配置情况*/
} SwitchConfigDataStruct; } SwitchConfigDataStruct;
@@ -107,6 +118,8 @@ typedef struct S_OC_SwitchConfigDataStruct
{ {
UINT16 SwitchId; /*道岔ID(配置字段)*/ UINT16 SwitchId; /*道岔ID(配置字段)*/
UINT16 BelongOcId; /*所属OCID(配置字段)*/ UINT16 BelongOcId; /*所属OCID(配置字段)*/
UINT8 ModuleAddrA[MAX_OC_SWITCH_INCLUDE_BOARD_NUM]; /*A系地址*/
UINT8 ModuleAddrB[MAX_OC_SWITCH_INCLUDE_BOARD_NUM]; /*B系地址*/
}OCSwitchConfigDataStruct; }OCSwitchConfigDataStruct;
/*旧版OC道岔配置数据表*/ /*旧版OC道岔配置数据表*/
@@ -592,8 +605,71 @@ ZzjPowerConfigDataStruct* GetSwitchZzjPowerConfigData(const UINT16 switchId);
* >0: IBP盘道岔旁路表示灯驱动继电器ID * >0: IBP盘道岔旁路表示灯驱动继电器ID
*/ */
UINT16 GetSwitchIbpDrvRelayId(const UINT16 switchId); UINT16 GetSwitchIbpDrvRelayId(const UINT16 switchId);
/*
* OC数
* const UINT16 switchId, ID
* 0
* >0 OC数
* add by mpt 20260326
*/
UINT8 GetSwitchIncludeOcNum(const UINT16 switchId);
/*
* OCID
* const UINT8 index
* OCID
* add by mpt 20260326
*/
UINT8 GetSwitchIncludeOCId(const UINT16 switchId, const UINT8 index);
/*
* OC索引
* const UINT8 index
* OC索引
* add by mpt 20260326
*/
UINT8 GetSwitchThisOCIndex(const UINT16 switchId, const UINT8 ocId);
/*
* OC的插箱ID
* const UINT16 switchId ID
* const UINT8 ocId OCID
* OC的插箱号
* add by mpt 20260326
*/
UINT8 GetSwitchszPlusBoxId(const UINT16 switchId, const UINT8 ocId);
/*
* OC的转辙机板卡数
* const UINT16 switchId ID
* const UINT8 ocId OCID
* OC的转辙机板卡数
* add by mpt 20260326
*/
UINT8 GetSwitchThisOCBoardNum(const UINT16 switchId, const UINT8 ocId);
/*
* OC的转辙机板卡ID的索引号
* const UINT16 switchId ID
* const UINT8 ocId OCID
* OC的转辙机板卡ID的索引号
* add by mpt 20260326
*/
UINT8 GetSwitchThisOCBoardIDindex(const UINT16 switchId, const UINT8 ocId, const UINT8 boardId);
/*
* OC的另一OCId
* const UINT16 switchId ID
* const UINT8 ocId OCID
* OC的另一OCId
* add by mpt 20260326
*/
UINT8 GetSwitchThisOcOtherOCId(const UINT16 switchId, const UINT8 ocId);
/*
* OC
*
*
* UINT16 switchId ID
* UINT8 ocId OCID
* 0:
* 1:
* Add by mpt 20260330
*/
UINT8 GetSwitchWhetherBelongThisOc(UINT16 switchId, UINT8 ocId);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
+591 -5
View File
@@ -416,6 +416,73 @@ void SetSwitchLockStatus(const UINT8 pLockType,const UINT16 pLockId,const UINT16
retVal = CI_SUCCESS; retVal = CI_SUCCESS;
} }
break; break;
case SWITCH_PLOCKTYPE_AXISSEC:/*锁闭类型为被计轴区段防护锁闭*/
{
if (SWITCH_LOCK_PROTECT_SET == lockCommand)
{/*设置防护锁闭*/
findFlag = 0u;/*置未找到*/
emptyIndex = -1;/*空位索引*/
/*查找被防护计轴区段id是否存在,存在,退出;不存在,找一个存放位置,更新被锁闭的计轴区段数量*/
for (ii = 0u; ii < SWITCH_MAX_PROTECT_LOCKED_NUM; ii++)
{
if (emptyIndex < 0)/*空位索引小于0,才查找空位索引*/
{
if (0u == SwitchDataStru[bufIndex].PLockedAxisSecIdArr[ii])
{
emptyIndex = (INT16)ii;/*空位值为0,表示为空位,记住索引*/
}
}
if (pLockId == SwitchDataStru[bufIndex].PLockedAxisSecIdArr[ii])
{/*找到被锁闭的id*/
findFlag = 1u;
}
}
if (0u == findFlag)
{/*没找到被锁闭id*/
if (emptyIndex >= 0)
{/*且空位存在*/
SwitchDataStru[bufIndex].PLockedAxisSecIdArr[emptyIndex] = pLockId;/*设置被锁闭id*/
SwitchDataStru[bufIndex].PLockedAxisSecNum++; /*被锁闭id数量增加1个*/
}
else
{/*超过软件支持的最大防护锁闭设备数目,输出打印信息*/
debug_infor_printf((const)"Set switch id %d PLOCK by axis %d fail,no empty space\n", bufIndex, pLockId);
}
}
}
else if (SWITCH_LOCK_PROTECT_CANCEL == lockCommand)
{/*取消防护锁闭*/
targetIndex = -1;/*目标索引*/
/*如果没找到,返回*/
/*找到,设为0,且把数量-1*/
for (ii = 0u; ii < SWITCH_MAX_PROTECT_LOCKED_NUM; ii++)
{
if (SwitchDataStru[bufIndex].PLockedAxisSecIdArr[ii] == pLockId)
{
targetIndex = (INT16)ii;
SwitchDataStru[bufIndex].PLockedAxisSecIdArr[ii] = 0;/*设为0*/
break;
}
}
if (targetIndex >= 0)/*找到了*/
{
if (SwitchDataStru[bufIndex].PLockedAxisSecNum > 0U)
{
SwitchDataStru[bufIndex].PLockedAxisSecNum--;/*减1处理*/
}
}
}
else
{
/*非法命令,不处理*/
}
retVal = CI_SUCCESS;
break;
}
default: default:
{ {
/*类型非法,置返回标志错误*/ /*类型非法,置返回标志错误*/
@@ -432,7 +499,7 @@ void SetSwitchLockStatus(const UINT8 pLockType,const UINT16 pLockId,const UINT16
(SWITCH_LOCK_STATUS_DAP == SwitchDataStru[bufIndex].LockStatus))/*道岔状态包含单锁*/ (SWITCH_LOCK_STATUS_DAP == SwitchDataStru[bufIndex].LockStatus))/*道岔状态包含单锁*/
{ {
if (SwitchDataStru[bufIndex].PLockedNonRouteNum + SwitchDataStru[bufIndex].PLockedOverlapNum + if (SwitchDataStru[bufIndex].PLockedNonRouteNum + SwitchDataStru[bufIndex].PLockedOverlapNum +
SwitchDataStru[bufIndex].PLockedRouteNum + SwitchDataStruCC[bufIndex].PLockedLogRouteNum > 0u) SwitchDataStru[bufIndex].PLockedRouteNum + SwitchDataStruCC[bufIndex].PLockedLogRouteNum + SwitchDataStru[bufIndex].PLockedAxisSecNum > 0u)
{/*被防护锁闭的设备数目大于0*/ {/*被防护锁闭的设备数目大于0*/
SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_DAP; SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_DAP;
} }
@@ -451,7 +518,7 @@ void SetSwitchLockStatus(const UINT8 pLockType,const UINT16 pLockId,const UINT16
else else
{/*不包含单锁*/ {/*不包含单锁*/
if (SwitchDataStru[bufIndex].PLockedNonRouteNum + SwitchDataStru[bufIndex].PLockedOverlapNum + if (SwitchDataStru[bufIndex].PLockedNonRouteNum + SwitchDataStru[bufIndex].PLockedOverlapNum +
SwitchDataStru[bufIndex].PLockedRouteNum + SwitchDataStruCC[bufIndex].PLockedLogRouteNum > 0u) SwitchDataStru[bufIndex].PLockedRouteNum + SwitchDataStruCC[bufIndex].PLockedLogRouteNum + SwitchDataStru[bufIndex].PLockedAxisSecNum > 0u)
{/*被防护锁闭的设备数目大于0*/ {/*被防护锁闭的设备数目大于0*/
SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_PROTECT; SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_PROTECT;
} }
@@ -1092,11 +1159,14 @@ void SetSwitchDrivePostion(const UINT16 switchId, const UINT8 drivePosition)
UINT8 singleSwitchCurPosition = 0U; UINT8 singleSwitchCurPosition = 0U;
UINT16 switchOtherId = 0U; /*双动道岔另一道岔ID*/ UINT16 switchOtherId = 0U; /*双动道岔另一道岔ID*/
UINT8 ciPattern = GetLocalCiPattern(); UINT8 ciPattern = GetLocalCiPattern();
UINT32 dwCurCycleNum = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/ bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
switchOtherId = GetDSwitchOtherId(switchId); switchOtherId = GetDSwitchOtherId(switchId);
bufIndex2 = GetSwitchConfigBufIndex(switchOtherId); /*获取双动道岔数组下标*/ bufIndex2 = GetSwitchConfigBufIndex(switchOtherId); /*获取双动道岔数组下标*/
dwCurCycleNum = Get2oo2CurCycleNum();
if (bufIndex < SWITCH_SUM_MAX) if (bufIndex < SWITCH_SUM_MAX)
{ {
@@ -1120,7 +1190,9 @@ void SetSwitchDrivePostion(const UINT16 switchId, const UINT8 drivePosition)
/*设置驱动位置*/ /*设置驱动位置*/
SwitchDataStru[bufIndex].SwitchDrivePos = drivePosition; SwitchDataStru[bufIndex].SwitchDrivePos = drivePosition;
/*道岔驱动开始时间*/ /*道岔驱动开始时间*/
SetSwitchDriveStartCycNum(switchId, Get2oo2CurCycleNum()); SetSwitchDriveStartCycNum(switchId, dwCurCycleNum);
/*设置道岔驱动起始周期,直到有位置时才清0*/
SetSwitchOutputDrvCmdCycNum(switchId, dwCurCycleNum);
} }
} }
else else
@@ -1156,7 +1228,10 @@ void SetSwitchDrivePostion(const UINT16 switchId, const UINT8 drivePosition)
/*设置驱动位置*/ /*设置驱动位置*/
SwitchDataStru[bufIndex2].SwitchDrivePos = drivePosition; SwitchDataStru[bufIndex2].SwitchDrivePos = drivePosition;
/*道岔驱动开始时间*/ /*道岔驱动开始时间*/
SetSwitchDriveStartCycNum(switchOtherId, Get2oo2CurCycleNum()); SetSwitchDriveStartCycNum(switchOtherId, dwCurCycleNum);
/*设置道岔驱动起始周期,直到有位置时才清0*/
SetSwitchOutputDrvCmdCycNum(switchOtherId, dwCurCycleNum);
} }
} }
else else
@@ -3068,4 +3143,515 @@ UINT8 GetSwitchThisOverlapPLocked(const UINT16 switchId, const UINT16 overlapId)
} }
return retVal; return retVal;
} }
/*
* OC的控制模式
* const UINT16 switchId, ID
* const UINT8 ocId OC
* const UINT8 controlMode
* void
* add by mpt 20260326
*/
void SetSwitchThisOcCotrolMode(const UINT16 switchId, const UINT8 ocId,const UINT8 controlMode)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 i = 0u;
UINT8 chSwitchIncludeOcNum = 0U;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
chSwitchIncludeOcNum = GetSwitchIncludeOcNum(switchId);
if ((SWITCH_SUM_MAX > bufIndex) && (0u < ocId))
{
for (i = 0u; i < chSwitchIncludeOcNum; i++)
{
if (ocId == SwitchDataStru[bufIndex].belongOCData[i].OcId)
{
if ((MAIN_CONTROL == controlMode) || (STANDBY_CONTROL == controlMode) || (NO_CONTROL_FUN == controlMode) || (ERR_MODE_CONTROL == controlMode))
{
SwitchDataStru[bufIndex].belongOCData[i].controlMode = controlMode;
}
break;
}
}
}
else
{
/*什么也不做*/
}
}
/*
* OC的控制模式
* const UINT16 switchId, ID
* const UINT8 ocId OC
*
* add by mpt 20260326
*/
UINT8 GetSwitchThisOcCotrolMode(const UINT16 switchId, const UINT8 ocId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = CI_ERROR;
UINT8 i = 0u;
UINT8 chSwitchIncludeOcNum = 0U;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
chSwitchIncludeOcNum = GetSwitchIncludeOcNum(switchId);
if ((SWITCH_SUM_MAX > bufIndex) && (0u < ocId))
{
for (i = 0u; i < chSwitchIncludeOcNum; i++)
{
if (ocId == SwitchDataStru[bufIndex].belongOCData[i].OcId)
{
retVal= SwitchDataStru[bufIndex].belongOCData[i].controlMode;
break;
}
}
}
else
{
/*什么也不做*/
}
return retVal;
}
/*
* OCID
* const UINT16 switchId, ID
* const UINT8 ocId OC
* void
* add by mpt 20260326
*/
void SetSwitchMainCotrolOCId(const UINT16 switchId, const UINT8 ocId)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (SWITCH_SUM_MAX > bufIndex)
{
SwitchDataStru[bufIndex].mainControlOcId = ocId;
}
else
{
/*什么也不做*/
}
}
/*
* OC
* const UINT16 switchId ID
* OCId
* add by mpt 20260326
*/
UINT8 GetSwitchMainCotrolOCId(const UINT16 switchId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = CI_ERROR;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (SWITCH_SUM_MAX > bufIndex)
{
retVal = SwitchDataStru[bufIndex].mainControlOcId;
}
else
{
/*什么也不做*/
}
return retVal;
}
/*
* OC执行电插箱的状态
* const UINT16 switchId, ID
* const UINT8 ocId OC
* const UINT8 state
* void
* add by mpt 20260326
*/
void SetSwitchOcPlusBoxSateState(const UINT16 switchId, const UINT8 ocId, const UINT8 state)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 i = 0u;
UINT8 chOCIndex = 0U;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
chOCIndex = GetSwitchThisOCIndex(switchId, ocId);
if ((SWITCH_SUM_MAX > bufIndex) && (chOCIndex < SWITCH_BELONG_OC_MAX))
{
SwitchDataStru[bufIndex].belongOCData[chOCIndex].PlusBoxSate = state;
}
else
{
/*什么也不做*/
}
}
/*
* OC中的执行电插箱状态
* const UINT16 switchId, ID
* const UINT8 ocId OC
* const UINT8 state
* 0x55
* 0xAA
* 0
* add by mpt 20260326
*/
UINT8 GetSwitchOcPlusBoxSateState(const UINT16 switchId, const UINT8 ocId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 ret = 0u;
UINT8 chOCIndex = 0U;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
chOCIndex = GetSwitchThisOCIndex(switchId, ocId);
if ((SWITCH_SUM_MAX > bufIndex) && (chOCIndex < SWITCH_BELONG_OC_MAX))
{
ret = SwitchDataStru[bufIndex].belongOCData[chOCIndex].PlusBoxSate;
}
else
{
/*什么也不做*/
}
return ret;
}
/*
* OC的转辙机板卡ID的状态
* const UINT16 switchId ID
* const UINT8 ocId OCID
* const UINT8 boardId ID
* UINT8 state
* void
* add by mpt 20260326
*/
void SetSwitchThisOCBoardState(const UINT16 switchId, const UINT8 ocId, const UINT8 boardId, const UINT8 state)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 chBoardIndex = 0u;
UINT8 chOCIndex = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (SWITCH_SUM_MAX > bufIndex)
{
chOCIndex = GetSwitchThisOCIndex(switchId, ocId);
chBoardIndex = GetSwitchThisOCBoardIDindex(switchId, ocId, boardId);
if ((MAX_OC_SWITCH_INCLUDE_BOARD_NUM > chBoardIndex)&&(SWITCH_BELONG_OC_MAX >chOCIndex))
{
SwitchDataStru[bufIndex].belongOCData[chOCIndex].BoardStateBuf[chBoardIndex] = state;
}
else
{
/*nothing*/
}
}
else
{
/*nothing*/
}
}
/*
* OC中是否存在某组转辙机板故障
* const UINT16 switchId ID
* const UINT8 ocId OCID
* const UINT8 boardId ID
* UINT8 state
* SWITCH_BOARD_FAULT
* SWITCH_BOARD_NORMAL
* add by mpt 20260326
*/
UINT8 GetSwitchThisOCBoardState(const UINT16 switchId, const UINT8 ocId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 num = 0u;
UINT8 i = 0u;
UINT8 chSwitchThisOCBoardNum = 0u;
UINT8 chOCIndex = 0U;
UINT8 addrAState = 0u;
UINT8 addrBState = 0u;
UINT8 retVal = SWITCH_BOARD_FAULT;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (SWITCH_SUM_MAX > bufIndex)
{
chOCIndex = GetSwitchThisOCIndex(switchId, ocId);
chSwitchThisOCBoardNum = GetSwitchThisOCBoardNum(switchId, ocId);
if (SWITCH_BELONG_OC_MAX > chOCIndex)
{
for (i = 0; i < (chSwitchThisOCBoardNum/2u); i+=2u)
{
addrAState = SwitchDataStru[bufIndex].belongOCData[chOCIndex].BoardStateBuf[i];
addrBState = SwitchDataStru[bufIndex].belongOCData[chOCIndex].BoardStateBuf[i+1];
if ((SWITCH_BOARD_FAULT == addrAState) && (SWITCH_BOARD_FAULT == addrBState))
{
retVal = SWITCH_BOARD_FAULT;
break;
}
}
if ((0U < chSwitchThisOCBoardNum) && (i == chSwitchThisOCBoardNum))
{
retVal = SWITCH_BOARD_NORMAL;
}
}
}
else
{
/*nothing*/
}
return retVal;
}
/*
* OC的主控命令
* const UINT16 switchId, ID
* const UINT8 ocId OC
* const UINT8 state
* void
* add by mpt 20260326
*/
void SetSwitchThisOcOutControlCmd(const UINT16 switchId, const UINT8 ocId, const UINT8 state)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 chOCIndex = 0U;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
chOCIndex = GetSwitchThisOCIndex(switchId, ocId);
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_BELONG_OC_MAX >chOCIndex))
{
if ((MAIN_CONTROL == state) || (STANDBY_CONTROL == state)||(NO_CONTROL_FUN == state))
{
SwitchDataStru[bufIndex].belongOCData[chOCIndex].OutControlCmd = state;
}
}
else
{
/*什么也不做*/
}
}
/*
* OC的主控命令
* const UINT16 switchId, ID
* const UINT8 ocId OC
* const UINT8 state
* 0x55
* 0xaa
* add by mpt 20260326
*/
UINT8 GetSwitchThisOcOutControlCmd(const UINT16 switchId, const UINT8 ocId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 chOCIndex = 0U;
UINT8 retVal = 0U;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
chOCIndex = GetSwitchThisOCIndex(switchId, ocId);
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_BELONG_OC_MAX > chOCIndex))
{
retVal = SwitchDataStru[bufIndex].belongOCData[chOCIndex].OutControlCmd;
}
else
{
/*什么也不做*/
}
return retVal;
}
/*
* OC的主控命令的设置周期
* const UINT16 switchId, ID
* const UINT8 ocId OC
* const UINT32 cycnum
* void
* add by mpt 20260326
*/
void SetSwitchOutMainContrCmdCycNum(const UINT16 switchId, const UINT8 ocId,const UINT32 cycnum)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 chOCIndex = 0U;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
chOCIndex = GetSwitchThisOCIndex(switchId, ocId);
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_BELONG_OC_MAX > chOCIndex))
{
SwitchDataStru[bufIndex].belongOCData[chOCIndex].OutMainControlCmdCycNum = cycnum;
}
else
{
/*什么也不做*/
}
}
/*
* OC的主控命令的设置周期
* const UINT16 switchId, ID
* const UINT8 ocId OC
* void
* add by mpt 20260326
*/
UINT32 GetSwitchOutMainContrCmdCycNum(const UINT16 switchId, const UINT8 ocId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 chOCIndex = 0U;
UINT32 retVal = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
chOCIndex = GetSwitchThisOCIndex(switchId, ocId);
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_BELONG_OC_MAX > chOCIndex))
{
retVal = SwitchDataStru[bufIndex].belongOCData[chOCIndex].OutMainControlCmdCycNum;
}
else
{
/*什么也不做*/
}
return retVal;
}
/*
*
* const UINT16 switchId, ID
* const UINT32 cycNum
*
* add mpt by 20260327
*/
void SetSwitchOutputDrvCmdCycNum(const UINT16 switchId, const UINT32 cycNum)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (bufIndex < SWITCH_SUM_MAX)
{
SwitchDataStru[bufIndex].SwitchOutputDrvCmdCycNum = cycNum;
}
}
/*
*
* const UINT16 switchId, ID
*
* add mpt by 20260327
*/
UINT32 GetSwitchOutputDrvCmdCycNum(const UINT16 switchId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT32 retVal = CI_ERROR;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (bufIndex < SWITCH_SUM_MAX)
{
retVal = SwitchDataStru[bufIndex].SwitchOutputDrvCmdCycNum;
}
return retVal;
}
/*
*
* const UINT16 switchId, ID
* const UINT8 ocId OCID
* const UINT8 chFindCmd
*
* add mpt by 20260327
*/
void SetSwitchThisOcFindPostionCmd(const UINT16 switchId, const UINT8 ocId, const UINT8 chFindCmd)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 chOCIndex = 0U;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (SWITCH_SUM_MAX > bufIndex)
{
chOCIndex = GetSwitchThisOCIndex(switchId, ocId);
if (SWITCH_BELONG_OC_MAX > chOCIndex)
{
if ((FIND_DINGWEI_CMD == chFindCmd)||(FIND_FANWEI_CMD == chFindCmd) || (INIT_FIND_CMD == chFindCmd)||(NO_FIND_CMD == chFindCmd))
{
SwitchDataStru[bufIndex].belongOCData[chOCIndex].FindPostionCmd = chFindCmd;
}
else
{
/*无处理*/
}
}
}
}
/*
*
* const UINT16 switchId, ID
* const UINT8 ocId OCID
*
* add mpt by 20260327
*/
UINT8 GetSwitchThisOcFindPostionCmd(const UINT16 switchId, const UINT8 ocId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 chOCIndex = 0U;
UINT8 retVal = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (SWITCH_SUM_MAX > bufIndex)
{
chOCIndex = GetSwitchThisOCIndex(switchId, ocId);
if (SWITCH_BELONG_OC_MAX > chOCIndex)
{
retVal = SwitchDataStru[bufIndex].belongOCData[chOCIndex].FindPostionCmd;
}
}
return retVal;
}
/*
*
* const UINT16 switchId, ID
* const UINT8 ocId OCID
*
* add mpt by 20260327
*/
UINT32 GetSwitchThisOcFindCmdCycNum(const UINT16 switchId, const UINT8 ocId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 chOCIndex = 0U;
UINT32 retVal = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (SWITCH_SUM_MAX > bufIndex)
{
chOCIndex = GetSwitchThisOCIndex(switchId, ocId);
if (SWITCH_BELONG_OC_MAX > chOCIndex)
{
retVal = SwitchDataStru[bufIndex].belongOCData[chOCIndex].FindCmdStartCycNum;
}
}
return retVal;
}
/*
*
* const UINT16 switchId, ID
* const UINT8 ocId OCID
* UINT32 cycNum
* void
* add mpt by 20260402
*/
void SetSwitchThisOcFindCmdCycNum(const UINT16 switchId, const UINT8 ocId, const UINT32 cycNum)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 chOCIndex = 0U;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (SWITCH_SUM_MAX > bufIndex)
{
chOCIndex = GetSwitchThisOCIndex(switchId, ocId);
if (SWITCH_BELONG_OC_MAX > chOCIndex)
{
SwitchDataStru[bufIndex].belongOCData[chOCIndex].FindCmdStartCycNum = cycNum;
}
}
}
@@ -28,6 +28,18 @@
extern "C" { extern "C" {
#endif #endif
/*道岔数据结构体*/
typedef struct S_SwitchOcDataStruct
{
UINT8 OcId; /*OC ID*/
UINT8 controlMode; /*当前主备控制模式*/
UINT8 OutControlCmd;/*控制主备命令*/
UINT8 PlusBoxSate; /*插箱状态*/
UINT8 BoardStateBuf[MAX_OC_SWITCH_INCLUDE_BOARD_NUM];/*板卡状态*/
UINT32 OutMainControlCmdCycNum;/*升主命令周期,向外输出升主命令时设置(一直输出则一直设置),或当前通信中断主控->备控时设置,收到OC数据由主控->备控时清除*/
UINT8 FindPostionCmd;/*1 寻定,2 寻反,3初始寻,0 无寻位置指令*/
UINT32 FindCmdStartCycNum;/*寻表示命令起始周期*/
}SwitchOCDataStr;
/*道岔数据结构体*/ /*道岔数据结构体*/
typedef struct S_SwitchDataStruct typedef struct S_SwitchDataStruct
@@ -83,6 +95,16 @@ typedef struct S_SwitchDataStruct
UINT8 chSwitchIncldeZzjNum; /*道岔对应转辙机数目,设备类型为信号机时,此个数为0*/ UINT8 chSwitchIncldeZzjNum; /*道岔对应转辙机数目,设备类型为信号机时,此个数为0*/
UINT8 szSwitchIncldeZzjState[SWITCH_ZZJ_POWER_STATE_MAX_NUM];/*转辙机状态*/ UINT8 szSwitchIncldeZzjState[SWITCH_ZZJ_POWER_STATE_MAX_NUM];/*转辙机状态*/
UINT32 SwitchOutputDrvCmdCycNum; /*道岔输出驱动命令起始周期*/
UINT8 mainControlOcId;/*主控OCId*/
UINT8 chSwitchBelongOcNum;/*道岔所属OC数*/
SwitchOCDataStr belongOCData[SWITCH_BELONG_OC_MAX];/*道岔所属各OC的状态*/
UINT8 PLockedAxisSecNum;/*被防护锁闭的计轴区段id数量,只能在本文件使用*/
UINT16 PLockedAxisSecIdArr[SWITCH_MAX_PROTECT_LOCKED_NUM];/*被防护锁闭的计轴区段id数组,只能在本文件使用*/
} SwitchDataStruct; } SwitchDataStruct;
/*道岔数据结构体*/ /*道岔数据结构体*/
@@ -748,7 +770,163 @@ UINT8 GetSwitchThisRoutePLocked(const UINT16 switchId, const UINT16 routeId);
* CI_SUCCESS CI_ERROR * CI_SUCCESS CI_ERROR
*/ */
UINT8 GetSwitchThisOverlapPLocked(const UINT16 switchId, const UINT16 overlapId); UINT8 GetSwitchThisOverlapPLocked(const UINT16 switchId, const UINT16 overlapId);
/*
* OC的控制模式
* const UINT16 switchId, ID
* const UINT8 ocId OC
* const UINT8 controlMode
* void
* add by mpt 20260326
*/
void SetSwitchThisOcCotrolMode(const UINT16 switchId, const UINT8 ocId, const UINT8 controlMode);
/*
* OC的控制模式
* const UINT16 switchId, ID
* const UINT8 ocId OC
*
* add by mpt 20260326
*/
UINT8 GetSwitchThisOcCotrolMode(const UINT16 switchId, const UINT8 ocId);
/*
* OCID
* const UINT16 switchId, ID
* const UINT8 ocId OC
* void
* add by mpt 20260326
*/
void SetSwitchMainCotrolOCId(const UINT16 switchId, const UINT8 ocId);
/*
* OC
* const UINT16 switchId ID
* OCId
* add by mpt 20260326
*/
UINT8 GetSwitchMainCotrolOCId(const UINT16 switchId);
/*
* OC执行电插箱的状态
* const UINT16 switchId, ID
* const UINT8 ocId OC
* const UINT8 state
* void
* add by mpt 20260326
*/
void SetSwitchOcPlusBoxSateState(const UINT16 switchId, const UINT8 ocId, const UINT8 state);
/*
* OC中的执行电插箱状态
* const UINT16 switchId, ID
* const UINT8 ocId OC
* const UINT8 state
* > 0OC执行电插箱的状态
* =0
* add by mpt 20260326
*/
UINT8 GetSwitchOcPlusBoxSateState(const UINT16 switchId, const UINT8 ocId);
/*
* OC的转辙机板卡ID的状态
* const UINT16 switchId ID
* const UINT8 ocId OCID
* const UINT8 boardId ID
* UINT8 state
* void
* add by mpt 20260326
*/
void SetSwitchThisOCBoardState(const UINT16 switchId, const UINT8 ocId, const UINT8 boardId, const UINT8 state);
/*
* OC中是否存在某组转辙机板故障
* const UINT16 switchId ID
* const UINT8 ocId OCID
* const UINT8 boardId ID
* UINT8 state
* SWITCH_BOARD_FAULT
* SWITCH_BOARD_NORMAL
* add by mpt 20260326
*/
UINT8 GetSwitchThisOCBoardState(const UINT16 switchId, const UINT8 ocId);
/*
* OC的主控命令
* const UINT16 switchId, ID
* const UINT8 ocId OC
* const UINT8 state
* void
* add by mpt 20260326
*/
void SetSwitchThisOcOutControlCmd(const UINT16 switchId, const UINT8 ocId, const UINT8 state);
/*
* OC的主控命令
* const UINT16 switchId, ID
* const UINT8 ocId OC
* const UINT8 state
* 0x55
* 0xaa
* add by mpt 20260326
*/
UINT8 GetSwitchThisOcOutControlCmd(const UINT16 switchId, const UINT8 ocId);
/*
* OC的主控命令的设置周期
* const UINT16 switchId, ID
* const UINT8 ocId OC
* void
* add by mpt 20260326
*/
void SetSwitchOutMainContrCmdCycNum(const UINT16 switchId, const UINT8 ocId, const UINT32 cycnum);
/*
* OC的主控命令的设置周期
* const UINT16 switchId, ID
* const UINT8 ocId OC
* void
* add by mpt 20260326
*/
UINT32 GetSwitchOutMainContrCmdCycNum(const UINT16 switchId, const UINT8 ocId);
/*
*
* const UINT16 switchId, ID
* const UINT32 cycNum
*
* add mpt by 20260327
*/
void SetSwitchOutputDrvCmdCycNum(const UINT16 switchId, const UINT32 cycNum);
/*
*
* const UINT16 switchId, ID
*
* add mpt by 20260327
*/
UINT32 GetSwitchOutputDrvCmdCycNum(const UINT16 switchId);
/*
*
* const UINT16 switchId, ID
* const UINT8 ocId OCID
* const UINT8 chFindCmd
*
* add mpt by 20260327
*/
void SetSwitchThisOcFindPostionCmd(const UINT16 switchId, const UINT8 ocId, const UINT8 chFindCmd);
/*
*
* const UINT16 switchId, ID
* const UINT8 ocId OCID
*
* add mpt by 20260327
*/
UINT8 GetSwitchThisOcFindPostionCmd(const UINT16 switchId, const UINT8 ocId);
/*
*
* const UINT16 switchId, ID
* const UINT8 ocId OCID
*
* add mpt by 20260327
*/
UINT32 GetSwitchThisOcFindCmdCycNum(const UINT16 switchId, const UINT8 ocId);
/*
*
* const UINT16 switchId, ID
* const UINT8 ocId OCID
* UINT32 cycNum
* void
* add mpt by 20260402
*/
void SetSwitchThisOcFindCmdCycNum(const UINT16 switchId, const UINT8 ocId, const UINT32 cycNum);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
+27 -2
View File
@@ -74,6 +74,9 @@
#define OC_SWITCH_DRIVE_POS_DINGWEI ((UINT16)0x5555) /*道岔驱动定位*/ #define OC_SWITCH_DRIVE_POS_DINGWEI ((UINT16)0x5555) /*道岔驱动定位*/
#define OC_SWITCH_DRIVE_POS_FANWEI ((UINT16)0xaaaa) /*道岔驱动反位*/ #define OC_SWITCH_DRIVE_POS_FANWEI ((UINT16)0xaaaa) /*道岔驱动反位*/
#define OC_SWITCH_DRIVE_POS_KEEP ((UINT16)0x55aa) /*道岔驱动位置保持*/ #define OC_SWITCH_DRIVE_POS_KEEP ((UINT16)0x55aa) /*道岔驱动位置保持*/
#define OC_SWITCH_FIND_DINGWEI ((UINT16)0x555f) /*道岔寻定*/
#define OC_SWITCH_FIND_FANWEI ((UINT16)0xaaaf) /*道岔寻反*/
#define OC_SWITCH_ININ_FIAND ((UINT16)0x5faf) /*道岔初始寻*/
#define OC_SWITCH_OTHER_BJ_STATE ((UINT8)0xf6) /*OC转辙机其他报警(除了封连、开盖)状态(板卡状态)*/ #define OC_SWITCH_OTHER_BJ_STATE ((UINT8)0xf6) /*OC转辙机其他报警(除了封连、开盖)状态(板卡状态)*/
#define OC_SWITCH_OPEN_CAP_STATE ((UINT8)0x01) /*OC转辙机开盖状态(板卡状态)*/ #define OC_SWITCH_OPEN_CAP_STATE ((UINT8)0x01) /*OC转辙机开盖状态(板卡状态)*/
@@ -96,8 +99,6 @@
#define SWITCH_KERAO_STATE_NO ((UINT8)0xAA) /*道岔可绕*/ #define SWITCH_KERAO_STATE_NO ((UINT8)0xAA) /*道岔可绕*/
/* zt 删除单轨相关代码 2022-02-15 */ /* zt 删除单轨相关代码 2022-02-15 */
#define SWITCH_LAST_DRV_STAY_MAX_NUM ((UINT8)10) /*道岔最近一次有效驱动位置延续最大周期数*/
#define SWITCH_MOVE_FAIL (UINT8)0x55 /*道岔移动失败*/ #define SWITCH_MOVE_FAIL (UINT8)0x55 /*道岔移动失败*/
#define SWITCH_USING_NORMAL (UINT8)0xaa /*道岔移动正常*/ #define SWITCH_USING_NORMAL (UINT8)0xaa /*道岔移动正常*/
@@ -109,6 +110,7 @@
#define SWITCH_PLOCKTYPE_NONROUTE ((UINT8)0x4) /*被非进路防护锁闭*/ #define SWITCH_PLOCKTYPE_NONROUTE ((UINT8)0x4) /*被非进路防护锁闭*/
#define SWITCH_PLOCKTYPE_NOROUTE_NOOVERLAP_NONONROUTE ((UINT8)0x5) /*解除道岔防护锁闭*/ #define SWITCH_PLOCKTYPE_NOROUTE_NOOVERLAP_NONONROUTE ((UINT8)0x5) /*解除道岔防护锁闭*/
#define SWITCH_PLOCKTYPE_LOGROUTE ((UINT8)0x6) /*被逻辑进路防护锁闭*/ #define SWITCH_PLOCKTYPE_LOGROUTE ((UINT8)0x6) /*被逻辑进路防护锁闭*/
#define SWITCH_PLOCKTYPE_AXISSEC ((UINT8)0x7) /*被计轴区段防护锁闭*/
#define SWITCH_OPER_NO_DANCAO ((UINT8)0x55) /*非单操操作:进路锁闭、保护区段锁闭、非进路锁闭、自动进路办理*/ #define SWITCH_OPER_NO_DANCAO ((UINT8)0x55) /*非单操操作:进路锁闭、保护区段锁闭、非进路锁闭、自动进路办理*/
#define SWITCH_OPER_DANCAO ((UINT8)0xaa) /*单操操作*/ #define SWITCH_OPER_DANCAO ((UINT8)0xaa) /*单操操作*/
@@ -147,5 +149,28 @@
#define SWITCH_ZZJ_POWER_STATE_MAX_NUM 5U /*道岔转辙机标识灯状态最大数*/ #define SWITCH_ZZJ_POWER_STATE_MAX_NUM 5U /*道岔转辙机标识灯状态最大数*/
#define MAX_OC_SWITCH_INCLUDE_BOARD_NUM ((UINT8)10) /*一个道岔支持最大板卡数量(不可达最大值)*/
#define SWITCH_BOX_NUM 10U /*单个OC插箱最大数*/
#define SWITCH_BELONG_OC_MAX 2U /*道岔所属OC最多数*/
#define MAIN_CONTROL 0x55U /*主控*/
#define STANDBY_CONTROL 0xAAU /*备控*/
#define NO_CONTROL_FUN 0x00U /*无此功能*/
#define ERR_MODE_CONTROL 0xCCU /*异常控制模式,部分主控部分备控,或OC没有全所有板卡*/
#define SWITCH_BOX_NORMAL ((UINT8)0x55) /*转辙机执行电表示电均表示正常*/
#define SWITCH_BOX_FAULT ((UINT8)0xAA) /*转辙机存在执行电熔丝或表示电熔丝报警*/
#define SWITCH_BOARD_FAULT ((UINT8)0xff) /*转辙机板故障*/
#define SWITCH_BOARD_NORMAL ((UINT8)0x55) /*转辙机板正常*/
#define FIND_DINGWEI_CMD ((UINT8)0x1) /*寻定*/
#define FIND_FANWEI_CMD ((UINT8)0x2) /*寻反*/
#define INIT_FIND_CMD ((UINT8)0x3) /*初始寻*/
#define NO_FIND_CMD ((UINT8)0x0) /*无寻位置指令*/
#endif #endif
@@ -62,7 +62,7 @@
#define VER_MAIN_SUBCI_CI_CID ((UINT8)25) /*子系统主版本号*/ #define VER_MAIN_SUBCI_CI_CID ((UINT8)25) /*子系统主版本号*/
#define VER_SUB_SUBCI_CI_CID ((UINT8)0) /*子系统子版本号*/ #define VER_SUB_SUBCI_CI_CID ((UINT8)0) /*子系统子版本号*/
#define VER_BRUNCH_CI_CID ((UINT8)0) /*分支版本号..........主线填0....分支填1 调试填2 */ #define VER_BRUNCH_CI_CID ((UINT8)0) /*分支版本号..........主线填0....分支填1 调试填2 */
#define VER_RETURN_SUBCI_CI_CID ((UINT8)0) /*子系统回归版本号*/ #define VER_RETURN_SUBCI_CI_CID ((UINT8)2) /*子系统回归版本号*/
#ifdef SCADE_MODE #ifdef SCADE_MODE
/*SCADE软件版本号*/ /*SCADE软件版本号*/
@@ -76,20 +76,20 @@
#define VER_SOFT_PRODUCT ((UINT8)40) /*产品编号*/ #define VER_SOFT_PRODUCT ((UINT8)40) /*产品编号*/
#define VER_SOFT_MODUAL_APP ((UINT8)1) /*模块编号*/ #define VER_SOFT_MODUAL_APP ((UINT8)1) /*模块编号*/
#define VER_SOFT_MIANVERSION ((UINT8)25) /*主版本号*/ #define VER_SOFT_MIANVERSION ((UINT8)25) /*主版本号*/
#define VER_SOFT_SUBVERSION ((UINT8)1) /*子版本号*/ #define VER_SOFT_SUBVERSION ((UINT8)3) /*子版本号*/
#endif #endif
/*可兼容的公共数据结构版本号*/ /*可兼容的公共数据结构版本号*/
#define VER_1_PUBLIC_FS_1 ((UINT8)31) #define VER_1_PUBLIC_FS_1 ((UINT8)31)
#define VER_1_PUBLIC_FS_2 ((UINT8)4) #define VER_1_PUBLIC_FS_2 ((UINT8)5)
#define VER_1_PUBLIC_FS_3 ((UINT8)0) #define VER_1_PUBLIC_FS_3 ((UINT8)0)
#define VER_1_PUBLIC_FS_4 ((UINT8)0) #define VER_1_PUBLIC_FS_4 ((UINT8)0)
#define VER_2_PUBLIC_FS_1 ((UINT8)0) #define VER_2_PUBLIC_FS_1 ((UINT8)23)
#define VER_2_PUBLIC_FS_2 ((UINT8)0) #define VER_2_PUBLIC_FS_2 ((UINT8)2)
#define VER_2_PUBLIC_FS_3 ((UINT8)0) #define VER_2_PUBLIC_FS_3 ((UINT8)1)
#define VER_2_PUBLIC_FS_4 ((UINT8)0) #define VER_2_PUBLIC_FS_4 ((UINT8)5)
#define VER_3_PUBLIC_FS_1 ((UINT8)28) #define VER_3_PUBLIC_FS_1 ((UINT8)28)
#define VER_3_PUBLIC_FS_2 ((UINT8)0) #define VER_3_PUBLIC_FS_2 ((UINT8)0)
@@ -98,7 +98,7 @@
/*可兼容的私有数据结构版本号*/ /*可兼容的私有数据结构版本号*/
#define VER_1_PRIVATE_FS_1 ((UINT8)49) #define VER_1_PRIVATE_FS_1 ((UINT8)50)
#define VER_1_PRIVATE_FS_2 ((UINT8)0) #define VER_1_PRIVATE_FS_2 ((UINT8)0)
#define VER_2_PRIVATE_FS_1 ((UINT8)0xFF) #define VER_2_PRIVATE_FS_1 ((UINT8)0xFF)
@@ -108,7 +108,7 @@
#define VER_3_PRIVATE_FS_2 ((UINT8)0xFF) #define VER_3_PRIVATE_FS_2 ((UINT8)0xFF)
/*可兼容OC数据结构版本号*/ /*可兼容OC数据结构版本号*/
#define VER_1_OCDATA_FS_1 ((UINT8)36) /*oc 3.0 较新数据版本*/ #define VER_1_OCDATA_FS_1 ((UINT8)37) /*oc 3.0 较新数据版本*/
#define VER_1_OCDATA_FS_2 ((UINT8)0) #define VER_1_OCDATA_FS_2 ((UINT8)0)
#define VER_2_OCDATA_FS_1 ((UINT8)0xFF) #define VER_2_OCDATA_FS_1 ((UINT8)0xFF)
+134 -25
View File
@@ -23,6 +23,8 @@ static UINT16 LocalCTProtectSecUnlockTime = 0u;/*
static UINT16 LocalUTNearUnLockTime = 0u;/*本联锁UT接近延时解锁超限时间(s)*/ static UINT16 LocalUTNearUnLockTime = 0u;/*本联锁UT接近延时解锁超限时间(s)*/
static UINT16 LocalCTNearUnLockTime = 0u;/*本联锁CT接近延时解锁超限时间(s)*/ static UINT16 LocalCTNearUnLockTime = 0u;/*本联锁CT接近延时解锁超限时间(s)*/
static UINT8 LocalWaysidePattern = 0u; /*本联锁轨旁继电器接口类型*/ static UINT8 LocalWaysidePattern = 0u; /*本联锁轨旁继电器接口类型*/
static UINT8 OCSswitch = 0u; /*OC-S开关*/
/* RC合并新增,用于区分TIOC功能或者联锁联锁 */ /* RC合并新增,用于区分TIOC功能或者联锁联锁 */
UINT8 CI_SYSTEM_TYPE_RCI = 0u; /*工作模式:0x3C-CI,0x3D-RC*/ UINT8 CI_SYSTEM_TYPE_RCI = 0u; /*工作模式:0x3C-CI,0x3D-RC*/
static UINT8 gLocalRcLinkLineAttr = 0u; /* RC联络线属性 */ static UINT8 gLocalRcLinkLineAttr = 0u; /* RC联络线属性 */
@@ -120,6 +122,10 @@ UINT32 wJXTCStopDetectTime = 0U; /*
static UINT16 g_TiocFsVersion[TIOCFS_VERSION_LENGTH] = { 0u };/* TIOC数据版本号 */ static UINT16 g_TiocFsVersion[TIOCFS_VERSION_LENGTH] = { 0u };/* TIOC数据版本号 */
UINT32 gSystemUpdateMainUseCycNum = 0U; /*系统升级主用起始周期号*/ UINT32 gSystemUpdateMainUseCycNum = 0U; /*系统升级主用起始周期号*/
static UINT32 wSwitchMachineCutInterval = 0U; /*RC/CI系统控制转辙机板主控切换间隔时间(单位:S)*/
static UINT32 wSwitchMachineDrvingCutInterval = 0U; /*RC/CI系统驱动道岔后控制转辙机板主控切换时间(单位:S)*/
static UINT32 wSwitchLastDrvValidTime = 0U; /*RC/CI系统上一次驱动道岔有效时间*/
/* /*
* *
* void * void
@@ -342,6 +348,17 @@ void SystemParaTimeToCycleCount(void)
paraVal = GetSystemParaValue(JXTC_STOP_DETECTION_TIME); paraVal = GetSystemParaValue(JXTC_STOP_DETECTION_TIME);
wJXTCStopDetectTime = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*JXTC停止检测时间(s*/ wJXTCStopDetectTime = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*JXTC停止检测时间(s*/
paraVal = GetSystemParaValue(SWITCH_MACHINE_CUT_INTERVAL);
wSwitchMachineCutInterval = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*RC/CI系统控制转辙机板主控切换间隔时间(单位:S)*/
paraVal = GetSystemParaValue(SWITCH_MACHINE_CUT_DRV_INTERVAL);
wSwitchMachineDrvingCutInterval = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*RC/CI系统驱动道岔后控制转辙机板主控切换时间(单位:S)*/
paraVal = GetSystemParaValue(SWITCH_LAST_DRV_TIME);
wSwitchLastDrvValidTime = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*RC/CI系统上一次驱动道岔有效时间*/
} }
/* /*
@@ -1340,20 +1357,22 @@ UINT8 CheckTiocPublicFsVersion(UINT8* pSrcFsVersion)
if (NULL != pSrcFsVersion) if (NULL != pSrcFsVersion)
{ {
SetLocalPublicDataType(DATA_TYPE_NEW); SetLocalPublicDataType(DATA_TYPE_MAIN_BRANCH);
/*查询公共数据结构版本号是否属于可兼容的版本 /*查询公共数据结构版本号是否属于可兼容的版本 */
28.0.0.14 VER_3_PUBLIC*/ /*28.0.0.14及其升级版本只支持配置到第三个兼容数据结构 VER_3_PUBLIC*/
/*23.2.1.4 及其升级版本只支持配置到第二个兼容数据结构 VER_2_PUBLIC */
if ((VER_1_PUBLIC_FS_1 == pSrcFsVersion[0]) && (VER_1_PUBLIC_FS_2 == pSrcFsVersion[1]) && (VER_1_PUBLIC_FS_3 == pSrcFsVersion[2]) && (VER_1_PUBLIC_FS_4 == pSrcFsVersion[3])) if ((VER_1_PUBLIC_FS_1 == pSrcFsVersion[0]) && (VER_1_PUBLIC_FS_2 == pSrcFsVersion[1]) && (VER_1_PUBLIC_FS_3 == pSrcFsVersion[2]) && (VER_1_PUBLIC_FS_4 == pSrcFsVersion[3]))
{ {
retVal = CI_SUCCESS; retVal = CI_SUCCESS;
} }
else if ((VER_2_PUBLIC_FS_1 == pSrcFsVersion[0]) && (VER_2_PUBLIC_FS_2 == pSrcFsVersion[1]) && (VER_2_PUBLIC_FS_3 == pSrcFsVersion[2]) && (VER_2_PUBLIC_FS_4 == pSrcFsVersion[3])) else if ((VER_2_PUBLIC_FS_1 == pSrcFsVersion[0]) && (VER_2_PUBLIC_FS_2 == pSrcFsVersion[1]) && (VER_2_PUBLIC_FS_3 == pSrcFsVersion[2]) && (VER_2_PUBLIC_FS_4 == pSrcFsVersion[3]))
{ {
SetLocalPublicDataType(DATA_TYPE_23_BRANCH);
retVal = CI_SUCCESS; retVal = CI_SUCCESS;
} }
else if ((VER_3_PUBLIC_FS_1 == pSrcFsVersion[0]) && (VER_3_PUBLIC_FS_2 == pSrcFsVersion[1]) && (VER_3_PUBLIC_FS_3 == pSrcFsVersion[2]) && (VER_3_PUBLIC_FS_4 == pSrcFsVersion[3])) else if ((VER_3_PUBLIC_FS_1 == pSrcFsVersion[0]) && (VER_3_PUBLIC_FS_2 == pSrcFsVersion[1]) && (VER_3_PUBLIC_FS_3 == pSrcFsVersion[2]) && (VER_3_PUBLIC_FS_4 == pSrcFsVersion[3]))
{ {
SetLocalPublicDataType(DATA_TYPE_OLD); SetLocalPublicDataType(DATA_TYPE_28_BRANCH);
retVal = CI_SUCCESS; retVal = CI_SUCCESS;
} }
else else
@@ -1421,11 +1440,11 @@ UINT8 CheckTiocOcFsVersion(UINT8* pSrcFsVersion)
/*查询OC数据结构版本号是否属于可兼容的版本*/ /*查询OC数据结构版本号是否属于可兼容的版本*/
if ((VER_1_OCDATA_FS_1 == pSrcFsVersion[0]) && (VER_1_OCDATA_FS_2 == pSrcFsVersion[1])) if ((VER_1_OCDATA_FS_1 == pSrcFsVersion[0]) && (VER_1_OCDATA_FS_2 == pSrcFsVersion[1]))
{ {
retVal = SetLocalOcPattern(DATA_TYPE_NEW); retVal = CI_SUCCESS;
} }
else if ((VER_2_OCDATA_FS_1 == pSrcFsVersion[0]) && (VER_2_OCDATA_FS_2 == pSrcFsVersion[1])) else if ((VER_2_OCDATA_FS_1 == pSrcFsVersion[0]) && (VER_2_OCDATA_FS_2 == pSrcFsVersion[1]))
{ {
retVal = SetLocalOcPattern(DATA_TYPE_OLD); retVal = CI_SUCCESS;
} }
else else
{ {
@@ -2426,6 +2445,55 @@ UINT16 GetTiocSystemParameterData(UINT32* pConfigDataAdderBuf, UINT16* pConfigDa
{ {
;/* 无处理 */ ;/* 无处理 */
} }
/* OC-S开关 */
wTmpLen = 1u + wTmpConfigDataSum;
if (wBufMaxLen >= wTmpLen)
{
pConfigDataAdderBuf[wTmpConfigDataSum] = &OCSswitch;
pConfigDataLenBuf[wTmpConfigDataSum] = (UINT16)sizeof(UINT8);
wTmpConfigDataSum++;
}
else
{
;/* 无处理 */
}
/* RC/CI系统控制转辙机板主控切换间隔时间(单位:S) */
wTmpLen = 1u + wTmpConfigDataSum;
if (wBufMaxLen >= wTmpLen)
{
pConfigDataAdderBuf[wTmpConfigDataSum] = &wSwitchMachineCutInterval;
pConfigDataLenBuf[wTmpConfigDataSum] = (UINT16)sizeof(UINT32);
wTmpConfigDataSum++;
}
else
{
;/* 无处理 */
}
/* RC/CI系统驱动道岔后控制转辙机板主控切换时间(单位:S) */
wTmpLen = 1u + wTmpConfigDataSum;
if (wBufMaxLen >= wTmpLen)
{
pConfigDataAdderBuf[wTmpConfigDataSum] = &wSwitchMachineDrvingCutInterval;
pConfigDataLenBuf[wTmpConfigDataSum] = (UINT16)sizeof(UINT32);
wTmpConfigDataSum++;
}
else
{
;/* 无处理 */
}
/* RC/CI系统上一次驱动道岔有效时间*/
wTmpLen = 1u + wTmpConfigDataSum;
if (wBufMaxLen >= wTmpLen)
{
pConfigDataAdderBuf[wTmpConfigDataSum] = &wSwitchLastDrvValidTime;
pConfigDataLenBuf[wTmpConfigDataSum] = (UINT16)sizeof(UINT32);
wTmpConfigDataSum++;
}
else
{
;/* 无处理 */
}
} }
else else
@@ -2880,24 +2948,7 @@ UINT32 GetdwNonReturnBtnErrEnsureCount(void)
return dwNonReturnBtnErrEnsureTime; return dwNonReturnBtnErrEnsureTime;
} }
/*
* OC版本
* OC版本
* CI_SUCCESS CI_ERROR
* Create: fan 20250210
*/
UINT8 SetLocalOcPattern(UINT8 localOcPattern)
{
UINT8 rtn = CI_ERROR; /*返回值*/
if ((DATA_TYPE_NEW == localOcPattern) || (DATA_TYPE_OLD == localOcPattern))
{
gLocalOcType = localOcPattern;
rtn = CI_SUCCESS;
}
return rtn;
}
#if 0 #if 0
/* /*
* OC版本 ----- * OC版本 -----
@@ -2952,7 +3003,7 @@ UINT8 GetLocalRcLinkLineAttr(void)
*/ */
void SetLocalPublicDataType(UINT8 localPublicData) void SetLocalPublicDataType(UINT8 localPublicData)
{ {
if ((DATA_TYPE_NEW == localPublicData) || (DATA_TYPE_OLD == localPublicData)) if ((DATA_TYPE_MAIN_BRANCH == localPublicData) || (DATA_TYPE_28_BRANCH == localPublicData) || (DATA_TYPE_23_BRANCH == localPublicData))
{ {
gLocalPublicDataType = localPublicData; gLocalPublicDataType = localPublicData;
} }
@@ -2961,7 +3012,9 @@ void SetLocalPublicDataType(UINT8 localPublicData)
/* /*
* *
* *
* 0x55 0xaa * 0x01 线
0x02 28.0.0.x版本
0x03 23.2.1.x版本
* Create: fan 20250521 * Create: fan 20250521
*/ */
UINT8 GetLocalPublicDataType(void) UINT8 GetLocalPublicDataType(void)
@@ -3216,3 +3269,59 @@ void SetCiFunctionSwitchConfig(UINT8 chFunctionConfigIndex,UINT8 chSwitchVal)
} }
} }
/*
* RC/CI系统控制转辙机板主控切换间隔时间(S)
*
* RC/CI系统控制转辙机板主控切换间隔时间(S)
* by mpt 20260324
*/
UINT32 GetSwitchMachineCutInterval(void)
{
return wSwitchMachineCutInterval;
}
/*
* RC/CI系统驱动道岔后控制转辙机板主控切换时间(S)
*
* RC/CI系统驱动道岔后控制转辙机板主控切换时间(S)
* by mpt 20260324
*/
UINT32 GetSwitchMachineDrvCutInterval(void)
{
return wSwitchMachineDrvingCutInterval;
}
/*
* RC/CI系统上一次驱动道岔有效时间
*
* RC/CI系统上一次驱动道岔有效时间
* by mpt 20260324
*/
UINT32 GetSwitchLastDrvValidTime(void)
{
return wSwitchLastDrvValidTime;
}
/*
* OCS开关
* OC-S开关
*
*/
UINT8 SetLocalCiOCSswitch(UINT8 funSwitch)
{
UINT8 rtn = 0u; /*返回值*/
if ((OC_S_ON == funSwitch) || (OC_S_OFF == funSwitch))
{
OCSswitch = funSwitch;
rtn = 1u;
}
return rtn;
}
/*
* OCS开关
* void
* OCS开关
*/
UINT8 GetLocalCiOCSswitch(void)
{
return OCSswitch;
}
@@ -84,7 +84,7 @@ extern "C" {
#define FUNC_DA_SWITCH ((UINT8)48) /*脱轨防护功能开关(0x55:不支持;0xaa:支持)*/ #define FUNC_DA_SWITCH ((UINT8)48) /*脱轨防护功能开关(0x55:不支持;0xaa:支持)*/
#define FUNC_OC_100_OR_200 ((UINT8)49) /*执行单元使用类型(0x55:OC-1000xaaOC-200*/ #define FUNC_OC_100_OR_200 ((UINT8)49) /*执行单元使用类型(0x55:OC-1000xaaOC-200*/
#define FUNC_OC_200_INOUTNET ((UINT8)50) /*OC通信使用内外网配置(0x55:外网;0xaa:内网)*/ #define FUNC_OC_200_INOUTNET ((UINT8)50) /*OC通信使用内外网配置(0x55:外网;0xaa:内网)*/
#define FUNC_ZIFUSHI_BUTTON ((UINT8)51) /*按钮是否为自复式(0x55:非自复式;0xaa:自复式)*/ #define FUNC_ZIFUSHI_BUTTON ((UINT8)51) /*按钮是否为自复式(0x55:非自复式;0xaa:自复式0x5A:宁象市域铁路*/
#define FUNC_JIZHONGQU_LINSHIXIASNSU_FLAG ((UINT8)52) /*与ZC通信中断后,是否设置集中区临时限速(0x55:设置;0xaa:不设置)*/ #define FUNC_JIZHONGQU_LINSHIXIASNSU_FLAG ((UINT8)52) /*与ZC通信中断后,是否设置集中区临时限速(0x55:设置;0xaa:不设置)*/
#define FUNC_REPEATE_OPEN_CHECK_SPKS ((UINT8)53) /*点式进路重开信号是否检查SPKS状态,(0x55:检查,点式不重开;0xaa:不检查,可重开)*/ #define FUNC_REPEATE_OPEN_CHECK_SPKS ((UINT8)53) /*点式进路重开信号是否检查SPKS状态,(0x55:检查,点式不重开;0xaa:不检查,可重开)*/
#define FUNC_SWITCH_SHIBIAO_PROMPTLY_ALARM ((UINT8)54) /*道岔失表是否立即向ATS报警(0XAA:立即报警 0X55:等待时间超限报警)*/ #define FUNC_SWITCH_SHIBIAO_PROMPTLY_ALARM ((UINT8)54) /*道岔失表是否立即向ATS报警(0XAA:立即报警 0X55:等待时间超限报警)*/
@@ -107,6 +107,7 @@ extern "C" {
#define FUNC_WDOWNWASH_ZIFUSHI_BUTTON ((UINT8)72) /*降级模式洗车同意按钮是否为自复式(0X55非自复式、0XAA自复式)*/ #define FUNC_WDOWNWASH_ZIFUSHI_BUTTON ((UINT8)72) /*降级模式洗车同意按钮是否为自复式(0X55非自复式、0XAA自复式)*/
#define FUNC_REOPRN_SET_NEAR ((UINT8)73) /*重开信号是否记忆进路接近锁闭状态开关:0xAA-重开后默认设置接近 0x55-重开后根据接近区段占用状态设置接近/未接近*/ #define FUNC_REOPRN_SET_NEAR ((UINT8)73) /*重开信号是否记忆进路接近锁闭状态开关:0xAA-重开后默认设置接近 0x55-重开后根据接近区段占用状态设置接近/未接近*/
#define FUNC_OVERLAP_UT_UNLOCK_MODE ((UINT8)74) /*UT列车占压停车区域时,保护区段解锁方式*/ #define FUNC_OVERLAP_UT_UNLOCK_MODE ((UINT8)74) /*UT列车占压停车区域时,保护区段解锁方式*/
#define FUNC_PSD_EXCEPT_CANCLE_TYPE ((UINT8)75) /*屏蔽门异常打开后解除异常方式:0xAA 需ATS发 0xBA命令;0x55未异常打开自动解除*/
#define CiSum_ID ((UINT16)1)/*实际联锁集中站数量 编号*/ #define CiSum_ID ((UINT16)1)/*实际联锁集中站数量 编号*/
@@ -186,7 +187,9 @@ extern "C" {
#define JXTCJXTC_MUTUALLOCK_FAULT_TIME (75U) /*间隙探测旁路按钮故障判断时间(s)*/ #define JXTCJXTC_MUTUALLOCK_FAULT_TIME (75U) /*间隙探测旁路按钮故障判断时间(s)*/
#define JXTC_STOP_DETECTION_TIME (76U) /*JXTC停止检测时间(s*/ #define JXTC_STOP_DETECTION_TIME (76U) /*JXTC停止检测时间(s*/
#define SWITCH_MACHINE_CUT_INTERVAL (77U) /*RC/CI系统控制转辙机板主控切换间隔时间(单位:S)*/
#define SWITCH_MACHINE_CUT_DRV_INTERVAL (78U) /*RC/CI系统驱动道岔后控制转辙机板主控切换时间(单位:S)*/
#define SWITCH_LAST_DRV_TIME (79U) /*RC/CI系统上一次驱动道岔有效时间*/
#define FUNC_SWITCH_ON ((UINT8)0xAA) /*功能配置开关打开*/ #define FUNC_SWITCH_ON ((UINT8)0xAA) /*功能配置开关打开*/
#define FUNC_SWITCH_OFF ((UINT8)0x55) /*功能配置开关关闭*/ #define FUNC_SWITCH_OFF ((UINT8)0x55) /*功能配置开关关闭*/
@@ -218,7 +221,7 @@ extern "C" {
#define Oc_Max_Board_Num (57U) /*属于一个OC的最大板卡数目(上层8块+其他3层*16块=56块)*/ #define Oc_Max_Board_Num (57U) /*属于一个OC的最大板卡数目(上层8块+其他3层*16块=56块)*/
#define CI_SIGNAL_MAX ((UINT16)300) /*属于一个CI的最大信号机的数目*/ #define CI_SIGNAL_MAX ((UINT16)300) /*属于一个CI的最大信号机的数目*/
#define CI_SWITCH_MAX ((UINT16)100) /*属于一个CI的最大道岔的数目*/ #define CI_SWITCH_MAX ((UINT16)200) /*属于一个CI的最大道岔的数目*/
#define CI_GD_MAX ((UINT16)700) /*轨道区段最大数量*/ #define CI_GD_MAX ((UINT16)700) /*轨道区段最大数量*/
#define RC_WORK_MODE_CI ((UINT8)0x3Cu) /*联锁工作模式*/ #define RC_WORK_MODE_CI ((UINT8)0x3Cu) /*联锁工作模式*/
@@ -242,8 +245,10 @@ extern "C" {
#define FUNC_OVERLAP_LOCK_BY_ATS ((UINT8)0x01) /*ATS锁闭保护区段*/ #define FUNC_OVERLAP_LOCK_BY_ATS ((UINT8)0x01) /*ATS锁闭保护区段*/
#define FUNC_OVERLAP_LOCK_BY_CI ((UINT8)0x02) /*联锁自行锁闭保护区段*/ #define FUNC_OVERLAP_LOCK_BY_CI ((UINT8)0x02) /*联锁自行锁闭保护区段*/
#define DATA_TYPE_NEW ((UINT8)0x55u) /*最新数据结构__OC3.2 数据结构及新公共数据结构30.X*/ #define DATA_TYPE_MAIN_BRANCH ((UINT8)0x01U) /*公共数据结构--主线--30.X*/
#define DATA_TYPE_OLD ((UINT8)0xAAu) /*兼容的老OC数据结构_或杭德数据结构28.0.0.X*/ #define DATA_TYPE_28_BRANCH ((UINT8)0x02U) /*公共数据结构--杭德数据结构-28.0.0.X*/
#define DATA_TYPE_23_BRANCH ((UINT8)0x03U) /*公共数据结构--厦门3数据结构23.2.1.X*/
#define OC200_VER2_1_9 ((UINT8)0x01u)/*功能开关7配置为1OC200 2.1.9接口*/ #define OC200_VER2_1_9 ((UINT8)0x01u)/*功能开关7配置为1OC200 2.1.9接口*/
#define OC200_VER3_2 ((UINT8)0x02u)/*功能开关7配置为2OC200 3.2接口*/ #define OC200_VER3_2 ((UINT8)0x02u)/*功能开关7配置为2OC200 3.2接口*/
@@ -254,6 +259,9 @@ extern "C" {
#define RC_LINK_LINE_YES ((UINT8)0x55U) /*具备联络线属性*/ #define RC_LINK_LINE_YES ((UINT8)0x55U) /*具备联络线属性*/
#define RC_LINK_LINE_NO ((UINT8)0xAAU) /*不具备联络线属性*/ #define RC_LINK_LINE_NO ((UINT8)0xAAU) /*不具备联络线属性*/
#define OC_S_ON ((UINT8)0xAA) /*持续OC-S*/
#define OC_S_OFF ((UINT8)0x55) /*不支持OC-S*/
/*系统参数结构体*/ /*系统参数结构体*/
typedef struct S_SystemParameterStruct typedef struct S_SystemParameterStruct
{ {
@@ -364,25 +372,14 @@ typedef struct S_SystemParaStruct
UINT32 CiAndPscTransmitBadEnsureTime ; UINT32 CiAndPscTransmitBadEnsureTime ;
/**********适配最新系统配置数据****************/ /**********适配最新系统配置数据****************/
UINT16 MaxLineLimitSpeed;/*线路最高限速,此处数据库中存放的是UINT8的km/h数据,需要在这里转换成cmps单位的数据*/
UINT8 MaxTsrSpeed;/*临时限速最高限速*/ UINT8 MaxTsrSpeed;/*临时限速最高限速*/
UINT8 TimeZoneDifference;/*NTP校时时区差.格林威治时间与本地时间的时区差,单位:时区,应用使用时应乘以3600转换为秒。*/
UINT16 MABackDistance;/*安全防护距离.考虑到最不利情况情况下(最大潜在退行距离和线路最大坡度等)移动授权考虑的安全防护距离*/
UINT16 MaxTsrNum;/*一次设置临时限速的最大个数*/ UINT16 MaxTsrNum;/*一次设置临时限速的最大个数*/
UINT16 MaxSectionOfTsr;/*一个临时限速报文中包含的最大逻辑区段数量*/ UINT16 MaxSectionOfTsr;/*一个临时限速报文中包含的最大逻辑区段数量*/
UINT32 IvocIvocCommunicationErrorTime;/*IVOC-IVOC信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 IvocOcCommunicationErrorTime;/*IVOC-OC通信故障判断时间(ms),add by yt,2022年3月1日,适配车车系统配置数据*/ UINT32 IvocOcCommunicationErrorTime;/*IVOC-OC通信故障判断时间(ms),add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 TmcItsCommunicationErrorTime;/*TMC-ITS通信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 TmcOcCommunicationErrorTime;/*TMC-OC通信故障判断时间(ms),add by yt,2022年3月1日,适配车车系统配置数据*/ UINT32 TmcOcCommunicationErrorTime;/*TMC-OC通信故障判断时间(ms),add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 ItsOcCommunicationErrorTime;/*ITS-OC通信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 OcPsdCommunicationErrorTime;/*OC-PSD通信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 IvocTslCommunicationErrorTime;/*IVOC-TSL通信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 OcTslCommunicationErrorTime;/*OC-TSL通信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/ UINT32 OcTslCommunicationErrorTime;/*OC-TSL通信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT16 MALengthForATOParking; /*满足ATO精准停车条件的MA长度,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT8 LinkLogicDirUpAndDown; /*系统定义逻辑方向与上下行方向的关系,add by yt,2022年3月1日,适配车车系统配置数据*/ UINT8 LinkLogicDirUpAndDown; /*系统定义逻辑方向与上下行方向的关系,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT16 OppositeTrackDistance; /*对向行驶双车间隔最小安全距离(cm),add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 MaxMALength; /*线路最差情况下紧急制动距离(单位m),add by yt,2022年3月1日,适配车车系统配置数据*/ UINT32 MaxMALength; /*线路最差情况下紧急制动距离(单位m),add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 VobcAtsCommunicationErrorTime;/*VOBCATS通信故障判断时间*/
UINT32 dwLineMinTrainLength; /*系统配置数据,线路最小车长*/ UINT32 dwLineMinTrainLength; /*系统配置数据,线路最小车长*/
UINT8 chZXDynamicTestSwitch; /*正线是否支持动态测试,55 关闭,AA打开 配置中 aa关闭 55打开*/ UINT8 chZXDynamicTestSwitch; /*正线是否支持动态测试,55 关闭,AA打开 配置中 aa关闭 55打开*/
UINT8 chDynamicTestSwitch; /*是否支持动态测试开关,55 关闭,AA打开 配置中 aa关闭 55打开*/ UINT8 chDynamicTestSwitch; /*是否支持动态测试开关,55 关闭,AA打开 配置中 aa关闭 55打开*/
@@ -508,6 +505,7 @@ extern UINT32 gSystemUpdateMainUseCycNum; /*ϵͳ
extern UINT8 localBackUpFlag; /*本机备用/主用模式 原共享内存主备系区分标志*/ extern UINT8 localBackUpFlag; /*本机备用/主用模式 原共享内存主备系区分标志*/
extern UINT32 dwDownWashWaitAcceptTime; /*降级模式洗车等待值班员同意最大时间(S)*/ extern UINT32 dwDownWashWaitAcceptTime; /*降级模式洗车等待值班员同意最大时间(S)*/
extern UINT32 LineMinTrainLength; /*系统配置数据,线路最小车长*/ extern UINT32 LineMinTrainLength; /*系统配置数据,线路最小车长*/
extern UINT32 wJXTCStopDetectTime; /*间隙探测停止检测时间(s*/
/* /*
* *
* void * void
@@ -1384,13 +1382,6 @@ UINT32 GetArbProtectCheckTime(void);
*/ */
UINT32 GetdwNonReturnBtnErrEnsureCount(void); UINT32 GetdwNonReturnBtnErrEnsureCount(void);
/*
* OC版本
* OC版本
* CI_SUCCESS CI_ERROR
* Create: fan 20250210
*/
UINT8 SetLocalOcPattern(UINT8 localOcPattern);
#if 0 #if 0
/* /*
* OC版本-----OC兼容需求 * OC版本-----OC兼容需求
@@ -1427,7 +1418,9 @@ void SetLocalPublicDataType(UINT8 localPublicData);
/* /*
* *
* *
* 0x55 0xaa * 0x01 线
0x02 28.0.0.x版本
0x03 23.2.1.x版本
* Create: fan 20250521 * Create: fan 20250521
*/ */
UINT8 GetLocalPublicDataType(void); UINT8 GetLocalPublicDataType(void);
@@ -1543,6 +1536,40 @@ UINT8 GetCldAndScxMergeFlag(void);
*/ */
void SetCiFunctionSwitchConfig(UINT8 chFunctionConfigIndex, UINT8 chSwitchVal); void SetCiFunctionSwitchConfig(UINT8 chFunctionConfigIndex, UINT8 chSwitchVal);
/*
* RC/CI系统控制转辙机板主控切换间隔时间(S)
*
* RC/CI系统控制转辙机板主控切换间隔时间(S)
* by mpt 20260324
*/
UINT32 GetSwitchMachineCutInterval(void);
/*
* RC/CI系统驱动道岔后控制转辙机板主控切换时间(S)
*
* RC/CI系统驱动道岔后控制转辙机板主控切换时间(S)
* by mpt 20260324
*/
UINT32 GetSwitchMachineDrvCutInterval(void);
/*
* RC/CI系统上一次驱动道岔有效时间
*
* RC/CI系统上一次驱动道岔有效时间
* by mpt 20260324
*/
UINT32 GetSwitchLastDrvValidTime(void);
/*
* OCS开关
* OC-S开关
*
*/
UINT8 SetLocalCiOCSswitch(UINT8 funSwitch);
/*
* OCS开关
* void
* OCS开关
*/
UINT8 GetLocalCiOCSswitch(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
File diff suppressed because it is too large Load Diff
+107 -8
View File
@@ -142,6 +142,17 @@ typedef struct S_ABLTrainInfoStru
}ABLTrainInfoStru; }ABLTrainInfoStru;
/*点连式信息结构体*/
typedef struct S_BlocLinkInfoStru
{
UINT8 chBlocLinkLogSecNum; /*点连式列车逻辑区段数量-车脚下以及车大前所在进路的逻辑区段*/
UINT16 wBlocLinkLogSecBuf[TRAIN_ABL_LOGSEC_SUM]; /*点连式列车逻辑区段数组*/
UINT8 chBlocLinkRouteNum; /*点连式匹配进路数量*/
UINT16 wBlocLinkRouteBuf[CI_VOBC_ROUTE_MAX]; /*点连式匹配进路数组*/
}BlocLinkInfoStru;
/*前车ATP位置信息结构体*/ /*前车ATP位置信息结构体*/
typedef struct S_HeadTrainAtpLocStru typedef struct S_HeadTrainAtpLocStru
{ {
@@ -213,12 +224,15 @@ typedef struct S_TrainInfoStru
UINT16 wTrainMinTailLink; /*列车最小安全后端所处link*/ UINT16 wTrainMinTailLink; /*列车最小安全后端所处link*/
UINT32 dwTrainMinTailOffset; /*列车最小安全后端偏移量*/ UINT32 dwTrainMinTailOffset; /*列车最小安全后端偏移量*/
UINT8 chSpeedDir; /*速度方向*/ UINT8 chSpeedDir; /*速度方向*/
UINT16 wTrainSpeed; /*速度方向*/ UINT16 wTrainSpeed; /*速度*/
UINT8 chTrainZeroState; /*列车零速状态*/ UINT8 chTrainZeroState; /*列车零速状态*/
UINT8 chTransmitStat; /*与列车传输状态*/ UINT8 chTransmitStat; /*与列车传输状态*/
UINT8 chHeadScreenStat; /*列车前筛标志*/ UINT8 chHeadScreenStat; /*列车前筛标志*/
UINT8 chTailScreenStat; /*列车后筛标志*/ UINT8 chTailScreenStat; /*列车后筛标志*/
TrainSafeLocStru strSafeLoc; /*列车安全位置*/ TrainSafeLocStru strSafeLoc; /*列车安全位置*/
UINT16 wMinSafeHeadLink; /*最小安全车头所处link*/
UINT32 dwMinSafeHeadOffset; /*最小安全车头所处link偏移量*/
UINT8 chMinSafeHeadDir; /*最小安全车头方向*/
UINT32 dwDelayTime; /*消息延迟时间*/ UINT32 dwDelayTime; /*消息延迟时间*/
UINT16 wGroupOtherTrainId; /* 编组另一列车ID*/ UINT16 wGroupOtherTrainId; /* 编组另一列车ID*/
UINT8 chGroupRunState; /* 编组列车状态: 1非编组 2编组建立 3编组运行 4编组折返 5编组解耦*/ UINT8 chGroupRunState; /* 编组列车状态: 1非编组 2编组建立 3编组运行 4编组折返 5编组解耦*/
@@ -280,6 +294,7 @@ typedef struct S_TrainInfoStru
UINT8 chtrainControlMode; /*本车当前控车模式,0不处于任何控制模式,1:处于IVOC主控,2处于VOBC主控*/ UINT8 chtrainControlMode; /*本车当前控车模式,0不处于任何控制模式,1:处于IVOC主控,2处于VOBC主控*/
UINT8 chTrainPostionMode; /*列车位置模式,0x10 使用IVOC位置,0x14使用VOBC位置*/ UINT8 chTrainPostionMode; /*列车位置模式,0x10 使用IVOC位置,0x14使用VOBC位置*/
BlocLinkInfoStru strBlocLinkData; /*点连式信息*/
}TrainInfoStru; }TrainInfoStru;
@@ -710,6 +725,41 @@ CI_SUCCESS:
*/ */
UINT8 SetTrainSafeHeadDir(const UINT16 wTrainId, const UINT8 chDir); UINT8 SetTrainSafeHeadDir(const UINT16 wTrainId, const UINT8 chDir);
/*
* link
* const UINT16 wTrainId, ID
* link
* : 2026.3.27
*/
UINT16 GetTrainMinSafeHeadLink(const UINT16 wTrainId);
/*
* link偏移量
* const UINT16 wTrainId, ID
* link偏移量
* : 2026.3.27
*/
UINT32 GetTrainMinSafeHeadOffset(const UINT16 wTrainId);
/*
*
* const UINT16 wTrainId, ID
*
* : 2026.3.27
*/
UINT8 GetTrainMinSafeHeadDir(const UINT16 wTrainId);
/*
*
* const UINT16 wTrainId, ID
* const UINT16 wLinkId
* const UINT16 dwLinkOffset
* const UINT16 chDir
*
* : 2026.3.27
*/
void SetTrainMinSafeHead(const UINT16 wTrainId, const UINT16 wLinkId, const UINT32 dwLinkOffset, const UINT8 chDir);
/* /*
* link * link
* const UINT16 wTrainId, ID * const UINT16 wTrainId, ID
@@ -1062,6 +1112,8 @@ UINT8 isGroupHeadTrain(const UINT16 wTrainId);
* @brief 使 * @brief 使
* @param UINT16 wTrainId ID * @param UINT16 wTrainId ID
* @param UINT16 wRouteId ID * @param UINT16 wRouteId ID
* @param UINT8 cSetResTag
* CBTC主控跨压时使用延时后的小前 CI_SUCCESS CI_ERROR
* @return 0 * @return 0
* 1 * 1
* 2 * 2
@@ -1069,7 +1121,7 @@ UINT8 isGroupHeadTrain(const UINT16 wTrainId);
* 4 * 4
* 5 * 5
*/ */
UINT8 dsuTrainMinHeadCrossSignal(const UINT16 wTrainId, const UINT16 wRouteId); UINT8 dsuTrainMinHeadCrossSignal(const UINT16 wTrainId, const UINT16 wRouteId, const UINT8 cSetResTag);
/** /**
* @brief * @brief
@@ -2854,12 +2906,6 @@ UINT32 CalTrainMsgDelayTime(UINT16 wTrainId, UINT8 trainType);
*/ */
void SetTrainPostionMode(const UINT16 wTrainId, const UINT8 chPos); void SetTrainPostionMode(const UINT16 wTrainId, const UINT8 chPos);
/* /*
*
* const UINT16 wTrainId, ID
*
*/
UINT8 GetTrainPostionMode(const UINT16 wTrainId);
/*
* IVOC列车主控模式 * IVOC列车主控模式
* const UINT16 wTrainId, ID * const UINT16 wTrainId, ID
* const UINT8 chMode * const UINT8 chMode
@@ -3004,6 +3050,59 @@ UINT8 SetIvocTrainMsgDelayTime(const UINT16 wTrainId, const UINT32 dwDelayTime);
* : * :
*/ */
UINT8 GetIvocTrainLevel(const UINT16 wTrainId); UINT8 GetIvocTrainLevel(const UINT16 wTrainId);
/*
*
* void
* void
*/
void ClearBlocLinkTrainInfo(UINT16 wTrainId);
/*
*
* const UINT16 wTrainId ID
* const UINT8 chAOcculogNum
* const UINT16* chOcculogIdbuff
* void
* by:lyj 20260316
*/
void SetBlocLinkOccLogSecData(const UINT16 wTrainId, const UINT8 chAOcculogNum, const UINT16* chOcculogIdbuff);
/*
*
* const UINT16 wTrainId ID
* const UINT16 wRouteId id
* void
* by:lyj 20260316
*/
void SetBlocLinkRouteData(const UINT16 wTrainId, const UINT16 wRouteId);
/*
*
* const UINT16 wTrainId ID
*
* by:lyj 20260316
*/
UINT8 GetBlocLinkRouteNum(const UINT16 wTrainId);
/*
*
* const UINT16 wTrainId ID
*
* by:lyj 20260316
*/
UINT16* GetBlocLinkRouteBuf(const UINT16 wTrainId);
/*
*
* const UINT16 wTrainId ID
*
* by:lyj 20260316
*/
UINT8 GetBlocLinkLogSecNum(const UINT16 wTrainId);
/*
*
* const UINT16 wTrainId ID
*
* by:lyj 20260316
*/
UINT16* GetBlocLinkLogSecBuf(const UINT16 wTrainId);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
+3
View File
@@ -279,6 +279,9 @@
/*³µÔؿسµ×´Ì¬*/ /*³µÔؿسµ×´Ì¬*/
#define VEHICLE_CONTROL_STATUS_YES ((UINT8)0x55) /*³µÔؿسµ×´Ì¬-¿Ø³µ*/ #define VEHICLE_CONTROL_STATUS_YES ((UINT8)0x55) /*³µÔؿسµ×´Ì¬-¿Ø³µ*/
#define VEHICLE_CONTROL_STATUS_NO ((UINT8)0xaa) /*³µÔؿسµ×´Ì¬-·Ç¿Ø³µ*/ #define VEHICLE_CONTROL_STATUS_NO ((UINT8)0xaa) /*³µÔؿسµ×´Ì¬-·Ç¿Ø³µ*/
/*点连式宏值定义*/
#define CI_VOBC_ROUTE_MAX ((UINT8)3U) /*CI-VOBC点连式匹配进路数量最大值*/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
@@ -1253,7 +1253,7 @@ UINT8 GetCiWithOtherCiTransmitState(const UINT8 DeviceType, const UINT8 DeviceId
{ {
pstrHlhtHeadCtx = GetCiToRcWithCiHeadCtx(DeviceId); pstrHlhtHeadCtx = GetCiToRcWithCiHeadCtx(DeviceId);
} }
else if (CI_SYSTEM_TYPE_CI == DeviceType) else if (CI_SYSTEM_TYPE_RC == DeviceType)
{ {
pstrHlhtHeadCtx = GetCiToRcWithRcHeadCtx(DeviceId); pstrHlhtHeadCtx = GetCiToRcWithRcHeadCtx(DeviceId);
} }
@@ -334,6 +334,30 @@ UINT16 GetTrainTailStopSteadyRelayId(const UINT16 washMachineId)
return retVal; return retVal;
} }
/*
* ID洗车机联挂端停稳继电器
* const UINT16 washMachineId, ID
* 0:
* >0:
*/
UINT16 GetCoupingStopSteadyRelayId(const UINT16 washMachineId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 retVal = 0u;
bufIndex = GetWashMachineIdConfigBufIndex(washMachineId); /*获取洗车机数组下标*/
if (bufIndex < WASHMACHINE_SUM_MAX)
{
retVal = WashMachineConfigDataStru[bufIndex].wCoupingStopSteadyRelayId;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/* /*
* *
* *
@@ -953,3 +977,29 @@ UINT16 GetDccWashPassApplyLightRelayId(const UINT16 washMachineId)
} }
return retVal; return retVal;
} }
/*
* ID洗车机允许联挂端清洗继电器
* const UINT16 washMachineId, ID
* 0:
* >0:
*/
UINT16 GetCoupingWashAllowRelayId(const UINT16 washMachineId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 retVal = 0u;
bufIndex = GetWashMachineIdConfigBufIndex(washMachineId); /*获取洗车机数组下标*/
if (bufIndex < WASHMACHINE_SUM_MAX)
{
retVal = WashMachineConfigDataStru[bufIndex].wCouplingWashAllowRelayId;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
@@ -37,14 +37,17 @@ typedef struct S_WashMachineConfigDataStruct
UINT16 TrainEmergencyStopRelayId; /*列车紧急停车继电器(配置字段:采集继电器)*/ UINT16 TrainEmergencyStopRelayId; /*列车紧急停车继电器(配置字段:采集继电器)*/
UINT16 HeadWashAllowRelayId; /*允许车头清洗继电器(配置字段:采集继电器)*/ UINT16 HeadWashAllowRelayId; /*允许车头清洗继电器(配置字段:采集继电器)*/
UINT16 TailWashAllowRelayId; /*允许车尾清洗继电器(配置字段:采集继电器)*/ UINT16 TailWashAllowRelayId; /*允许车尾清洗继电器(配置字段:采集继电器)*/
UINT16 wCouplingWashAllowRelayId; /*允许联挂端清洗继电器(配置字段:采集继电器)*/
UINT16 WashTrainRequestRelayId; /*洗车请求继电器(配置字段:驱动继电器),合肥用作洗车同意继电器*/ UINT16 WashTrainRequestRelayId; /*洗车请求继电器(配置字段:驱动继电器),合肥用作洗车同意继电器*/
UINT16 TrainHeadStopSteadyRelayId; /*车头停稳继电器(配置字段:驱动继电器)*/ UINT16 TrainHeadStopSteadyRelayId; /*车头停稳继电器(配置字段:驱动继电器)*/
UINT16 TrainTailStopSteadyRelayId; /*车尾停稳继电器(配置字段:驱动继电器)*/ UINT16 TrainTailStopSteadyRelayId; /*车尾停稳继电器(配置字段:驱动继电器)*/
UINT16 wCoupingStopSteadyRelayId; /*联挂端停稳继电器(配置字段:驱动继电器)*/
UINT16 TrainPassRequestRelayId; /*通过请求继电器(配置字段:驱动继电器)*/ UINT16 TrainPassRequestRelayId; /*通过请求继电器(配置字段:驱动继电器)*/
UINT16 TrainOutWashPortAllowRelayId; /*允许列车出库继电器(配置字段:采集继电器)*/ UINT16 TrainOutWashPortAllowRelayId; /*允许列车出库继电器(配置字段:采集继电器)*/
UINT16 PauseTrainWashRequestRelayId; /*暂停洗车继电器(配置字段:驱动继电器)*/ UINT16 PauseTrainWashRequestRelayId; /*暂停洗车继电器(配置字段:驱动继电器)*/
UINT16 WashModeBackRelayId; /*全自动洗车模式反馈继电器(配置字段:采集继电器)*/ UINT16 WashModeBackRelayId; /*全自动洗车模式反馈继电器(配置字段:采集继电器)*/
UINT16 WashModeRelayId; /*全自动自动洗车模式继电器(配置字段:驱动继电器)*/ UINT16 WashModeRelayId; /*全自动自动洗车模式继电器(配置字段:驱动继电器)*/
UINT16 wDownWashAllowRelayId; /*降级模式洗车同意按钮继电器ID(配置字段:采集继电器)*/ UINT16 wDownWashAllowRelayId; /*降级模式洗车同意按钮继电器ID(配置字段:采集继电器)*/
UINT16 wDownWashAllowLightRelayId; /*降级模式洗车同意指示灯继电器ID(配置字段:驱动继电器)*/ UINT16 wDownWashAllowLightRelayId; /*降级模式洗车同意指示灯继电器ID(配置字段:驱动继电器)*/
UINT16 wDownDccWashAllowRelayId; /*降级模式DCC洗车同意按钮继电器ID (配置字段:采集继电器)*/ UINT16 wDownDccWashAllowRelayId; /*降级模式DCC洗车同意按钮继电器ID (配置字段:采集继电器)*/
@@ -397,6 +400,21 @@ UINT16 GetWashPassApplyLightRelayId(const UINT16 washMachineId);
*/ */
UINT16 GetDccWashPassApplyLightRelayId(const UINT16 washMachineId); UINT16 GetDccWashPassApplyLightRelayId(const UINT16 washMachineId);
/*
* ID洗车机允许联挂端清洗继电器
* const UINT16 washMachineId, ID
* 0:
* >0:
*/
UINT16 GetCoupingWashAllowRelayId(const UINT16 washMachineId);
/*
* ID洗车机联挂端停稳继电器
* const UINT16 washMachineId, ID
* 0:
* >0:
*/
UINT16 GetCoupingStopSteadyRelayId(const UINT16 washMachineId);
#ifdef __cplusplus #ifdef __cplusplus
} }
@@ -2296,3 +2296,119 @@ void SetDownWashDccAllowPassCycle(const UINT16 washMachineId, const UINT32 washA
} }
} }
/*
* ID洗车机允许联挂端清洗状态
* const UINT16 WashMachineId, ID
* 0:
* >0:
*/
UINT8 GetCoupingWashAllowState(const UINT16 WashMachineId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = 0u;
bufIndex = GetWashMachineIdConfigBufIndex(WashMachineId); /*获取洗车机数组下标*/
if (bufIndex < WASHMACHINE_SUM_MAX)
{
retVal = WashMachineDataStru[bufIndex].chCoupingWashAllowState;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* ID洗车机允许联挂端清洗状态
* const UINT16 WashMachineId, ID
const UINT8 state,
* 0:
* 1:
*/
UINT8 SetCoupingWashAllowState(const UINT16 WashMachineId, const UINT8 state)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = 0u;
bufIndex = GetWashMachineIdConfigBufIndex(WashMachineId); /*获取洗车机数组下标*/
if (bufIndex < WASHMACHINE_SUM_MAX)
{
if ((WASHMACHINE_COL_COUPINGWASH_YES == state) || (WASHMACHINE_COL_COUPINGWASH_NO == state))
{
WashMachineDataStru[bufIndex].chCoupingWashAllowState = state;
retVal = CI_SUCCESS;
}
else
{
retVal = CI_ERROR;
}
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* ID洗车机联挂端停稳驱动状态
* const UINT16 WashMachineId, ID
* const UINT8 drvState,
*
*
*/
void SetCoupingStopSteadyDrvState(const UINT16 WashMachineId, const UINT8 drvState)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetWashMachineIdConfigBufIndex(WashMachineId); /*获取洗车机数组下标*/
if (bufIndex < WASHMACHINE_SUM_MAX)
{
if ((WASHMACHINE_COUPING_STEADY_YES == drvState) || (WASHMACHINE_COUPING_STEADY_NO == drvState))
{
WashMachineDataStru[bufIndex].chCoupingStopSteadyDrvState = drvState;
}
else
{
/*不做处理*/
}
}
else
{
/*不做处理*/
}
}
/*
* ID洗车机允许联挂端停稳驱动状态
* const UINT16 WashMachineId, ID
* 0:
* >0:
*/
UINT8 GetCoupingStopSteadyDrvState(const UINT16 WashMachineId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = 0u;
bufIndex = GetWashMachineIdConfigBufIndex(WashMachineId); /*获取洗车机数组下标*/
if (bufIndex < WASHMACHINE_SUM_MAX)
{
retVal = WashMachineDataStru[bufIndex].chCoupingStopSteadyDrvState;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
@@ -35,9 +35,11 @@ typedef struct S_WashMachineDataStruct
UINT8 TrainEmergencyStopState; /*列车紧急停车状态(动态字段:采集)*/ UINT8 TrainEmergencyStopState; /*列车紧急停车状态(动态字段:采集)*/
UINT8 HeadWashAllowState; /*允许车头清洗状态(动态字段:采集)*/ UINT8 HeadWashAllowState; /*允许车头清洗状态(动态字段:采集)*/
UINT8 TailWashAllowState; /*允许车尾清洗状态(动态字段:采集)*/ UINT8 TailWashAllowState; /*允许车尾清洗状态(动态字段:采集)*/
UINT8 chCoupingWashAllowState; /*允许联挂端清洗状态(动态字段:采集)*/
UINT8 WashTrainRequestDrvState; /*洗车请求驱动状态(动态字段:驱动)*/ UINT8 WashTrainRequestDrvState; /*洗车请求驱动状态(动态字段:驱动)*/
UINT8 TrainHeadStopSteadyDrvState; /*车头停稳驱动状态(动态字段:驱动)*/ UINT8 TrainHeadStopSteadyDrvState; /*车头停稳驱动状态(动态字段:驱动)*/
UINT8 TrainTailStopSteadyDrvState; /*车尾停稳驱动状态(动态字段:驱动)*/ UINT8 TrainTailStopSteadyDrvState; /*车尾停稳驱动状态(动态字段:驱动)*/
UINT8 chCoupingStopSteadyDrvState; /*联挂端停稳驱动状态(动态字段:驱动)*/
UINT8 TrainOutWashTrainPortAllowState; /*允许出洗车库状态(动态字段:采集)*/ UINT8 TrainOutWashTrainPortAllowState; /*允许出洗车库状态(动态字段:采集)*/
UINT8 PauseTrainWashRequestDrvState; /*暂停洗车请求驱动状态(动态字段:驱动)*/ UINT8 PauseTrainWashRequestDrvState; /*暂停洗车请求驱动状态(动态字段:驱动)*/
UINT8 PaseWashMachineRequesDrvtState; /*通过洗车机请求驱动状态(动态字段:驱动)*/ UINT8 PaseWashMachineRequesDrvtState; /*通过洗车机请求驱动状态(动态字段:驱动)*/
@@ -45,6 +47,7 @@ typedef struct S_WashMachineDataStruct
UINT32 WashWorkModeRelayDrvCycle; /*洗车模式继电器驱动起始周期号*/ UINT32 WashWorkModeRelayDrvCycle; /*洗车模式继电器驱动起始周期号*/
UINT8 WashModeState; /*洗车模式(动态字段:采集)*/ UINT8 WashModeState; /*洗车模式(动态字段:采集)*/
UINT8 chSetWashWorkModeBack; /*设置洗车机工作模式反馈(动态字段:采集)*/ UINT8 chSetWashWorkModeBack; /*设置洗车机工作模式反馈(动态字段:采集)*/
UINT8 chDownWashAllowState; /*降级模式洗车同意状态(动态字段:融合)*/ UINT8 chDownWashAllowState; /*降级模式洗车同意状态(动态字段:融合)*/
UINT8 chDownWashAllowPassState; /*降级模式洗车同意通过状态(动态字段:融合)*/ UINT8 chDownWashAllowPassState; /*降级模式洗车同意通过状态(动态字段:融合)*/
UINT8 chDownWashReqState; /*降级模式洗车请求状态*/ UINT8 chDownWashReqState; /*降级模式洗车请求状态*/
@@ -776,7 +779,39 @@ UINT8 GetDownDccWashAllowPassErrState(const UINT16 washMachineId);
*/ */
void SetDownDccWashAllowPassErrState(const UINT16 washMachineId, const UINT8 dccPassWashAdhesionState); void SetDownDccWashAllowPassErrState(const UINT16 washMachineId, const UINT8 dccPassWashAdhesionState);
/*
* ID洗车机允许联挂端清洗状态
* const UINT16 WashMachineId, ID
* 0:
* >0:
*/
UINT8 GetCoupingWashAllowState(const UINT16 WashMachineId);
/*
* ID洗车机允许联挂端清洗状态
* const UINT16 WashMachineId, ID
const UINT8 state,
* 0:
* 1:
*/
UINT8 SetCoupingWashAllowState(const UINT16 WashMachineId, const UINT8 state);
/*
* ID洗车机联挂端停稳驱动状态
* const UINT16 WashMachineId, ID
* const UINT8 drvState,
*
*
*/
void SetCoupingStopSteadyDrvState(const UINT16 WashMachineId, const UINT8 drvState);
/*
* ID洗车机允许联挂端停稳驱动状态
* const UINT16 WashMachineId, ID
* 0:
* >0:
*/
UINT8 GetCoupingStopSteadyDrvState(const UINT16 WashMachineId);
#ifdef __cplusplus #ifdef __cplusplus
} }
@@ -30,6 +30,9 @@
#define WASHMACHINE_TAIL_STEADY_YES ((UINT8)0x55) /*车尾停稳驱动状态*/ #define WASHMACHINE_TAIL_STEADY_YES ((UINT8)0x55) /*车尾停稳驱动状态*/
#define WASHMACHINE_TAIL_STEADY_NO ((UINT8)0xaa) /*车尾未停稳驱动状态*/ #define WASHMACHINE_TAIL_STEADY_NO ((UINT8)0xaa) /*车尾未停稳驱动状态*/
#define WASHMACHINE_COUPING_STEADY_YES ((UINT8)0x55) /*联挂端停稳驱动状态*/
#define WASHMACHINE_COUPING_STEADY_NO ((UINT8)0xaa) /*联挂端未停稳驱动状态*/
#define WASHMACHINE_PAUSE_DRVREQ_TRUE ((UINT8)0x55) /*暂停洗车请求有效驱动状态*/ #define WASHMACHINE_PAUSE_DRVREQ_TRUE ((UINT8)0x55) /*暂停洗车请求有效驱动状态*/
#define WASHMACHINE_PAUSE_DRVREQ_FALSE ((UINT8)0xaa) /*暂停洗车请求无效驱动状态*/ #define WASHMACHINE_PAUSE_DRVREQ_FALSE ((UINT8)0xaa) /*暂停洗车请求无效驱动状态*/
@@ -52,6 +55,9 @@
#define WASHMACHINE_COL_TAILWASH_YES ((UINT8)0x55) /*尾部洗车允许*/ #define WASHMACHINE_COL_TAILWASH_YES ((UINT8)0x55) /*尾部洗车允许*/
#define WASHMACHINE_COL_TAILWASH_NO ((UINT8)0xaa) /*尾部洗车不允许*/ #define WASHMACHINE_COL_TAILWASH_NO ((UINT8)0xaa) /*尾部洗车不允许*/
#define WASHMACHINE_COL_COUPINGWASH_YES ((UINT8)0x55) /*联挂端洗车允许*/
#define WASHMACHINE_COL_COUPINGWASH_NO ((UINT8)0xaa) /*联挂端洗车不允许*/
#define WASHMACHINE_COL_FALUT_YES ((UINT8)0x55) /*洗车机故障*/ #define WASHMACHINE_COL_FALUT_YES ((UINT8)0x55) /*洗车机故障*/
#define WASHMACHINE_COL_FALUT_NO ((UINT8)0xaa) /*洗车机未故障*/ #define WASHMACHINE_COL_FALUT_NO ((UINT8)0xaa) /*洗车机未故障*/
+49 -101
View File
@@ -2940,14 +2940,13 @@ void CFM_LogCiphertextSend(void)
} }
else else
{ {
MSCP_LOG_MSG("Ciphertext read queue fail \n"); /* 无处理*/
} }
} }
else else
{ {
(void)CM_Mutex_Unlock(ciphertextCtrl.mutex); (void)CM_Mutex_Unlock(ciphertextCtrl.mutex);
MSCP_LOG_MSG("dataLen = %d\n",dataLen);
} }
} }
@@ -4553,44 +4552,32 @@ CM_UINT16 CFM_OutnetHeart_Recv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT ENU
{ {
/*- 来自外网红网 */ /*- 来自外网红网 */
*pChn = ENUM_OUTNET_RED; *pChn = ENUM_OUTNET_RED;
rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len);
CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_1);
} }
/*- 是否来自蓝网CC */ /*- 是否来自蓝网CC */
else if ((srcIP == inet_addr(g_PFM_Cfg.CC_B_IP)) && (g_PFM_Cfg.CC_B_Heart_Port == srcPort)) else if ((srcIP == inet_addr(g_PFM_Cfg.CC_B_IP)) && (g_PFM_Cfg.CC_B_Heart_Port == srcPort))
{ {
/*- 来自外网蓝网 */ /*- 来自外网蓝网 */
*pChn = ENUM_OUTNET_BLUE; *pChn = ENUM_OUTNET_BLUE;
rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len);
CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_2);
} }
/*- 是否来自红网SEB */ /*- 是否来自红网SEB */
else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_R_IP)) && (g_PFM_Cfg.CC_R_Heart_Port == srcPort)) else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_R_IP)) && (g_PFM_Cfg.CC_R_Heart_Port == srcPort))
{ {
/*- 来自外网红网SEB */ /*- 来自外网红网SEB */
*pChn = ENUM_OUTNET_EXTEND_RED; *pChn = ENUM_OUTNET_EXTEND_RED;
rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len);
CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_3);
} }
/*- 是否来自蓝网SEB */ /*- 是否来自蓝网SEB */
else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_B_IP)) && (g_PFM_Cfg.CC_B_Heart_Port == srcPort)) else if ((srcIP == inet_addr(g_PFM_Cfg.EXTEND_B_IP)) && (g_PFM_Cfg.CC_B_Heart_Port == srcPort))
{ {
/*- 来自外网蓝网SEB */ /*- 来自外网蓝网SEB */
*pChn = ENUM_OUTNET_EXTEND_BLUE; *pChn = ENUM_OUTNET_EXTEND_BLUE;
rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len);
CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_4);
} }
else if((srcIP == inet_addr(g_PFM_Cfg.ANOTHER_EXTEND_R_IP)) && (g_PFM_Cfg.ANOTHER_R_Heart_Port == srcPort)) else if((srcIP == inet_addr(g_PFM_Cfg.ANOTHER_EXTEND_R_IP)) && (g_PFM_Cfg.ANOTHER_R_Heart_Port == srcPort))
{ {
*pChn = ENUM_ANOTHER_EXTEND_RED; *pChn = ENUM_ANOTHER_EXTEND_RED;
rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len);
CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_5);
} }
else if((srcIP == inet_addr(g_PFM_Cfg.ANOTHER_EXTEND_B_IP)) && (g_PFM_Cfg.ANOTHER_B_Heart_Port == srcPort)) else if((srcIP == inet_addr(g_PFM_Cfg.ANOTHER_EXTEND_B_IP)) && (g_PFM_Cfg.ANOTHER_B_Heart_Port == srcPort))
{ {
*pChn = ENUM_ANOTHER_EXTEND_BLUE; *pChn = ENUM_ANOTHER_EXTEND_BLUE;
rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len);
CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_23, TSCP_DARK_ASSERT_6);
} }
else else
{ {
@@ -4602,6 +4589,8 @@ CM_UINT16 CFM_OutnetHeart_Recv(OUT CM_UINT8* pBuf, IN CM_UINT32 BufSize, OUT ENU
MSCP_LOG_MSG("unkown msg rcv from %08x:%d,len=%d\n", srcIP, srcPort, len); MSCP_LOG_MSG("unkown msg rcv from %08x:%d,len=%d\n", srcIP, srcPort, len);
CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_5); CM_RE_ASSERT(0, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_5);
} }
rt = CM_Memcpy((void*)pBuf, (CM_SIZE_T)BufSize, (void*)(s_CFM_UDP_Cache + 6), (CM_SIZE_T)len);
CM_RE_ASSERT(ENUM_CM_TRUE == rt, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_37, TSCP_DARK_ASSERT_1);
} }
else else
{ {
@@ -4681,8 +4670,46 @@ ENUM_CM_RETURN CFM_OutnetHeart_Send(IN const CM_UINT8* pBuf, IN CM_INT32 Len, IN
static CM_THREAD_FUNC_T t_ClearArpThread(void) static CM_THREAD_FUNC_T t_ClearArpThread(void)
{ {
static STRU_HARDWARE_BOOT_COM_T lastComRecord; static STRU_HARDWARE_BOOT_COM_T lastComRecord;
CM_UINT32 i = 0u; /* 循环变量*/
CM_UINT32 i_max = 6u; /* 循环次数上限*/
CM_UINT32 cycle = DFM_GetBirthCount(); CM_UINT32 cycle = DFM_GetBirthCount();
CM_UINT8 cmdBuf[100] = {0}; CM_UINT8 cmdBuf[100] = {0};
/* 记录所有通控与串口IP配置*/
CM_UINT32* p_com_count[6u] = {&g_Hardware_boot_com_state.CCU_A_Count,
&g_Hardware_boot_com_state.CCU_B_Count,
&g_Hardware_boot_com_state.SEB_A_Count,
&g_Hardware_boot_com_state.SEB_B_Count,
&g_Hardware_boot_com_state.SEB_A_Another_Count,
&g_Hardware_boot_com_state.SEB_B_Another_Count};
CM_UINT32 *p_last_count[6u] = {&lastComRecord.CCU_A_Count,
&lastComRecord.CCU_B_Count,
&lastComRecord.SEB_A_Count,
&lastComRecord.SEB_B_Count,
&lastComRecord.SEB_A_Another_Count,
&lastComRecord.SEB_B_Another_Count};
CM_CHAR* p_com_ip[6u] = {g_PFM_Cfg.CC_R_IP,
g_PFM_Cfg.CC_B_IP,
g_PFM_Cfg.EXTEND_R_IP,
g_PFM_Cfg.EXTEND_B_IP,
g_PFM_Cfg.ANOTHER_EXTEND_R_IP,
g_PFM_Cfg.ANOTHER_EXTEND_B_IP};
/* 等待应用初始化完成启动*/
while(ENUM_INIT_APP >= PFM_LOG_GET_INIT_STAGE())
{
CM_Sleep(1000u);
}
if(NULL == p_Serial_IN_VOBC_Func)
{
i_max = 2u;
}
else if(0x55u != g_PFM_Cfg.M_AREA_SEB_Enable)
{
i_max = 4u;
}
else
{
i_max = 6u;
}
#if QNX #if QNX
void* pmask = NULL; void* pmask = NULL;
/*- 本线程锁定在 A53 core 1 */ /*- 本线程锁定在 A53 core 1 */
@@ -4692,94 +4719,15 @@ static CM_THREAD_FUNC_T t_ClearArpThread(void)
while(1) while(1)
{ {
cycle = DFM_GetBirthCount(); cycle = DFM_GetBirthCount();
if((cycle > (g_Hardware_boot_com_state.CCU_A_Count + 100u))&&(lastComRecord.CCU_A_Count != g_Hardware_boot_com_state.CCU_A_Count)) for(i = 0u; i < i_max; i++)
{ {
lastComRecord.CCU_A_Count = g_Hardware_boot_com_state.CCU_A_Count; if((cycle > (*(p_com_count[i]) + 100u)) && (*(p_last_count[i]) != *(p_com_count[i])))
snprintf(cmdBuf, sizeof(cmdBuf), "arp -d %s", g_PFM_Cfg.CC_R_IP);
(void)system(cmdBuf);
MSCP_LOG_MSG("%s\n", cmdBuf);
MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.CCU_A_Count=%d,lastComRecord.CCU_A_Count=%d\n",cycle,g_Hardware_boot_com_state.CCU_A_Count,lastComRecord.CCU_A_Count);
}
else
{
/* 无处理 */
}
if((cycle > (g_Hardware_boot_com_state.CCU_B_Count + 100u))&&(lastComRecord.CCU_B_Count != g_Hardware_boot_com_state.CCU_B_Count))
{
lastComRecord.CCU_B_Count = g_Hardware_boot_com_state.CCU_B_Count;
snprintf(cmdBuf, sizeof(cmdBuf), "arp -d %s", g_PFM_Cfg.CC_B_IP);
(void)system(cmdBuf);
MSCP_LOG_MSG("%s\n", cmdBuf);
MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.CCU_B_Count=%d,lastComRecord.CCU_B_Count=%d\n",cycle,g_Hardware_boot_com_state.CCU_B_Count,lastComRecord.CCU_B_Count);
}
else
{
/* 无处理 */
}
if(NULL == p_Serial_IN_VOBC_Func)
{
/* 无处理 */
}
else
{
if((cycle > (g_Hardware_boot_com_state.SEB_A_Count + 100u))&&(lastComRecord.SEB_A_Count != g_Hardware_boot_com_state.SEB_A_Count))
{ {
lastComRecord.SEB_A_Count = g_Hardware_boot_com_state.SEB_A_Count; *(p_last_count[i]) = *(p_com_count[i]);
snprintf(cmdBuf, sizeof(cmdBuf), "arp -d %s", g_PFM_Cfg.EXTEND_R_IP); snprintf(cmdBuf, sizeof(cmdBuf), "arp -d %s", p_com_ip[i]);
(void)system(cmdBuf); (void)system(cmdBuf);
MSCP_LOG_MSG("%s\n", cmdBuf); MSCP_LOG_MSG("%s\n", cmdBuf);
MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.SEB_A_Count=%d,lastComRecord.SEB_A_Count=%d\n",cycle,g_Hardware_boot_com_state.SEB_A_Count,lastComRecord.SEB_A_Count); MSCP_LOG_MSG("clear arp cycle = %d, index = %d, g_Hardware_boot_com_state = %d,lastComRecord = %d\n",cycle, i, *(p_com_count[i]), *(p_last_count[i]));
}
else
{
/* 无处理 */
}
if((cycle > (g_Hardware_boot_com_state.SEB_B_Count + 100u))&&(lastComRecord.SEB_B_Count != g_Hardware_boot_com_state.SEB_B_Count))
{
lastComRecord.SEB_B_Count = g_Hardware_boot_com_state.SEB_B_Count;
snprintf(cmdBuf, sizeof(cmdBuf), "arp -d %s", g_PFM_Cfg.EXTEND_B_IP);
(void)system(cmdBuf);
MSCP_LOG_MSG("%s\n", cmdBuf);
MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.SEB_B_Count=%d,lastComRecord.SEB_B_Count=%d\n",cycle,g_Hardware_boot_com_state.SEB_B_Count,lastComRecord.SEB_B_Count);
}
else
{
/* 无处理 */
}
if(0x55u == g_PFM_Cfg.M_AREA_SEB_Enable)
{
if((cycle > (g_Hardware_boot_com_state.SEB_A_Another_Count + 100u))&&(lastComRecord.SEB_A_Another_Count != g_Hardware_boot_com_state.SEB_A_Another_Count))
{
lastComRecord.SEB_A_Another_Count = g_Hardware_boot_com_state.SEB_A_Another_Count;
snprintf(cmdBuf, sizeof(cmdBuf), "arp -d %s", g_PFM_Cfg.ANOTHER_EXTEND_R_IP);
(void)system(cmdBuf);
MSCP_LOG_MSG("%s\n", cmdBuf);
MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.SEB_A_Another_Count=%d,lastComRecord.SEB_A_Another_Count=%d\n",cycle,g_Hardware_boot_com_state.SEB_A_Another_Count,lastComRecord.SEB_A_Another_Count);
}
else
{
/* 无处理 */
}
if((cycle > (g_Hardware_boot_com_state.SEB_B_Another_Count + 100u))&&(lastComRecord.SEB_B_Another_Count != g_Hardware_boot_com_state.SEB_B_Another_Count))
{
lastComRecord.SEB_B_Another_Count = g_Hardware_boot_com_state.SEB_B_Another_Count;
snprintf(cmdBuf, sizeof(cmdBuf), "arp -d %s", g_PFM_Cfg.ANOTHER_EXTEND_B_IP);
(void)system(cmdBuf);
MSCP_LOG_MSG("%s\n", cmdBuf);
MSCP_LOG_MSG("clear arp cycle = %d,g_Hardware_boot_com_state.SEB_B_Another_Count=%d,lastComRecord.SEB_B_Another_Count=%d\n",cycle,g_Hardware_boot_com_state.SEB_B_Another_Count,lastComRecord.SEB_B_Another_Count);
}
else
{
/* 无处理 */
}
}
else
{
/* 无处理 */
} }
} }
@@ -4793,7 +4741,7 @@ static CM_THREAD_FUNC_T t_ClearArpThread(void)
* - ENUM_CM_TRUE * - ENUM_CM_TRUE
* - ENUM_CM_FALSE * - ENUM_CM_FALSE
*/ */
ENUM_CM_RETURN CFM_LogQ_isEmpty() ENUM_CM_RETURN CFM_LogQ_isEmpty(void)
{ {
ENUM_CM_RETURN ret = ENUM_CM_FALSE; ENUM_CM_RETURN ret = ENUM_CM_FALSE;
CM_UINT32 len1 = 0u, len2 = 0u; CM_UINT32 len1 = 0u, len2 = 0u;
@@ -4812,7 +4760,7 @@ ENUM_CM_RETURN CFM_LogQ_isEmpty()
/** /**
* @brief 2 * @brief 2
*/ */
void CFM_AssertRecved() void CFM_AssertRecved(void)
{ {
CM_INT32 assertMsgNum = 0; CM_INT32 assertMsgNum = 0;
/*- 指针防空*/ /*- 指针防空*/
+2 -2
View File
@@ -754,11 +754,11 @@ extern "C"
* - ENUM_CM_TRUE * - ENUM_CM_TRUE
* - ENUM_CM_FALSE * - ENUM_CM_FALSE
*/ */
ENUM_CM_RETURN CFM_LogQ_isEmpty(); ENUM_CM_RETURN CFM_LogQ_isEmpty(void);
/** /**
* @brief 2 * @brief 2
*/ */
void CFM_AssertRecved(); void CFM_AssertRecved(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
+2 -2
View File
@@ -40,7 +40,7 @@ static CM_UINT8 s_CFM_RawInfo[CFM_INNET_RAW_MSG_NUM_MAX * 12u];
static CM_UINT32 s_CFM_RawInfo_peer_len = 0u; static CM_UINT32 s_CFM_RawInfo_peer_len = 0u;
static CM_UINT8 s_CFM_RawInfo_peer[CFM_INNET_RAW_MSG_NUM_MAX * 12u]; static CM_UINT8 s_CFM_RawInfo_peer[CFM_INNET_RAW_MSG_NUM_MAX * 12u];
/*判断CC与SEB状态*/ /*判断CC与SEB状态*/
static void s_CCSEB_STATE_CAL(); static void s_CCSEB_STATE_CAL(void);
/** /**
* @brief -- * @brief --
* @param ch * @param ch
@@ -998,7 +998,7 @@ CM_UINT8 CFM_TxOutnetHeart(ENUM_2x2_STATE_T local2x2state)
return rt; return rt;
} }
/*判断CC与SEB状态*/ /*判断CC与SEB状态*/
static void s_CCSEB_STATE_CAL() static void s_CCSEB_STATE_CAL(void)
{ {
CM_UINT8 ccsebState[6] = {0}; CM_UINT8 ccsebState[6] = {0};
CM_UINT32 i = 0u, j = 0u; CM_UINT32 i = 0u, j = 0u;
+5 -10
View File
@@ -64,8 +64,6 @@ CM_INT32 DFM_output(CM_UINT8 channel, CM_UINT8 level);
/*- 切系按钮 */ /*- 切系按钮 */
CM_INT32 DFM_switchButton(void); CM_INT32 DFM_switchButton(void);
/*- 看门狗指示灯 */
void DFM_ledMonitor(CM_UINT8 light);
/*-通道电流电压读取*/ /*-通道电流电压读取*/
CM_INT32 DFM_Read_ina3321(INOUT CM_INT32* channel_1_shunt, INOUT CM_FLOAT32* channel_1_bus, INOUT CM_INT32* channel_2_shunt, INOUT CM_FLOAT32* channel_2_bus, INOUT CM_INT32* channel_3_shunt, INOUT CM_FLOAT32* channel_3_bus); CM_INT32 DFM_Read_ina3321(INOUT CM_INT32* channel_1_shunt, INOUT CM_FLOAT32* channel_1_bus, INOUT CM_INT32* channel_2_shunt, INOUT CM_FLOAT32* channel_2_bus, INOUT CM_INT32* channel_3_shunt, INOUT CM_FLOAT32* channel_3_bus);
@@ -100,15 +98,15 @@ ENUM_CM_RETURN DFM_GetQNX_Verion(CM_UINT8 *buf);
/* /*
* *
*/ */
void DFM_Pulse_Init(); void DFM_Pulse_Init(void);
/* /*
* *
*/ */
void DFM_Pulse_Start(); void DFM_Pulse_Start(void);
/* /*
* *
*/ */
void DFM_Pulse_Stop(); void DFM_Pulse_Stop(void);
/* /*
* *
*/ */
@@ -125,9 +123,10 @@ ENUM_CM_RETURN DFM_Pulse_FeedBack(ENUM_PULSE_TYPE_T *p_pulse);
/* /*
* *
**/ **/
ENUM_SWITCH_MODE_T DFM_Switch_Mode_Get(); ENUM_SWITCH_MODE_T DFM_Switch_Mode_Get(void);
/* /*
* *
31627
**/ **/
void DFM_ledAREA(CM_UINT8 light); void DFM_ledAREA(CM_UINT8 light);
/** /**
@@ -141,8 +140,4 @@ CM_UINT8 DFM_PulseCnt_Get(CM_UINT8 index, OUT CM_UINT32* pPulseCnt);
* fec0 fec1 up/down状态 * fec0 fec1 up/down状态
*/ */
void DFM_Network_Check(void); void DFM_Network_Check(void);
#if 0
/* 记录fec0,fec1 状态*/
void DFM_PhyLog(void);
#endif
#endif /* SRC_MSCP_DFM_DFM_DRV_H_ */ #endif /* SRC_MSCP_DFM_DFM_DRV_H_ */
+28 -124
View File
@@ -22,8 +22,6 @@ CM_UINT16 g_InIoLog = 0;
/** 脉冲类型转换 */ /** 脉冲类型转换 */
static ENUM_PULSE_TYPE_T s_PulseConvert(ABSynMsgType type); static ENUM_PULSE_TYPE_T s_PulseConvert(ABSynMsgType type);
/* 超过5kb截断PhyLog.txt*/
static void s_ManagePhyLog(void);
/** /**
* @brief * @brief
@@ -651,7 +649,7 @@ void DFM_Network_Check(void)
/* /*
* *
*/ */
void DFM_Pulse_Init() void DFM_Pulse_Init(void)
{ {
int ret = -1; int ret = -1;
ret = imx8_create_gpio_irq_pthread(); ret = imx8_create_gpio_irq_pthread();
@@ -662,14 +660,14 @@ void DFM_Pulse_Init()
/* /*
* *
*/ */
void DFM_Pulse_Start() void DFM_Pulse_Start(void)
{ {
drvStartABSynSwitch(); drvStartABSynSwitch();
} }
/* /*
* *
*/ */
void DFM_Pulse_Stop() void DFM_Pulse_Stop(void)
{ {
drvStopABSynSwitch(); drvStopABSynSwitch();
} }
@@ -778,7 +776,7 @@ ENUM_CM_RETURN DFM_Pulse_FeedBack(ENUM_PULSE_TYPE_T *p_pulse)
/* /*
* *
**/ **/
ENUM_SWITCH_MODE_T DFM_Switch_Mode_Get() ENUM_SWITCH_MODE_T DFM_Switch_Mode_Get(void)
{ {
CM_UINT8 in = 0x00u; CM_UINT8 in = 0x00u;
ENUM_SWITCH_MODE_T ret = ENUM_SWITCH_ERROR; ENUM_SWITCH_MODE_T ret = ENUM_SWITCH_ERROR;
@@ -813,28 +811,35 @@ ENUM_SWITCH_MODE_T DFM_Switch_Mode_Get()
} }
/* /*
* *
* 31627
**/ **/
void DFM_ledAREA(CM_UINT8 light) void DFM_ledAREA(CM_UINT8 light)
{ {
switch(light) static CM_UINT8 s_light = 1u; /* 允许点灯标志位*/
if(s_light == 1u)
{ {
case 0x01u: switch(light)
imx8_output(6, 1); {
imx8_output(7, 0); case 0x01u:
break; imx8_output(6, 1);
case 0x02u: imx8_output(7, 0);
imx8_output(6, 0); break;
imx8_output(7, 1); case 0x02u:
break; imx8_output(6, 0);
case 0x03u: imx8_output(7, 1);
imx8_output(6, 0); break;
imx8_output(7, 0); case 0x03u:
break; s_light = 0u;
default: imx8_output(6, 0);
imx8_output(6, 0); imx8_output(7, 0);
imx8_output(7, 0); break;
break; default:
imx8_output(6, 0);
imx8_output(7, 0);
break;
}
} }
} }
/** /**
* @brief * @brief
@@ -848,104 +853,3 @@ CM_UINT8 DFM_PulseCnt_Get(CM_UINT8 index, OUT CM_UINT32* pPulseCnt)
rt = drvCheckABSynPulCnt(index,pPulseCnt); rt = drvCheckABSynPulCnt(index,pPulseCnt);
return rt; return rt;
} }
#if 0
/* 记录fec0,fec1 状态*/
void DFM_PhyLog(void)
{
CM_UINT16 phyinfo[12] = {0};
CM_UINT8 buf[256]; // 统一的 buffer
CM_UINT8* fecNames[2] = {"fec0", "fec1"};
CM_UINT8 fec[10] = {0};
CM_INT32 ret = -1;
CM_INT32 cnt = 0;
CM_INT32 pos = 0;
FILE *fp = NULL;
CM_INT32 phyError = 0;
CM_UINT32 i = 0u, j = 0u;
CM_UINT64 sTick = CM_GetTick();
MSCP_LOG_MSG("----Phy Log Start At Time %llu----\n", sTick);
for(j = 0u; j < 2; j++)
{
pos = 0;
phyError = 0;
CM_Memset(phyinfo, 0, sizeof(phyinfo), sizeof(phyinfo));
strncpy(fec, fecNames[j], sizeof(fec));
// cnt = drvPhyRegInfoUpdate(fec, phyinfo, 12);
// phyError = phytool(fec);
// 模拟读取phy寄存器信息
CM_Sleep(2);
pos += snprintf(buf + pos, sizeof(buf) - pos,
"CYC:%d, %s-phylog[%d]_%s:",
g_MSCP_BirthCount, fec, cnt, ((phyError == -1) ? "Error" : "Correct"));
for (i = 0; i < 12; i++)
{
pos += snprintf(buf + pos, sizeof(buf) - pos,
((i == 11) ? "%02X-%02X\n" : "%02X-%02X-"),
phyinfo[i] >> 8, phyinfo[i] & 0x00ff);
}
if (phyError == -1)
{
fp = fopen("PhyLog.txt", "a");
if (NULL != fp)
{
fwrite(buf, 1, pos, fp);
fclose(fp);
}
s_ManagePhyLog();
}
MSCP_LOG_MSG("%s", buf);
}
MSCP_LOG_MSG("----Phy Log End At Time %llu Used %llums----\n", CM_GetTick(), (CM_GetTick() - sTick) / CM_UNSIGNED_MILLION);
}
/* 超过5kb截断PhyLog.txt*/
static void s_ManagePhyLog(void)
{
FILE* fp = NULL;
CM_UINT32 fileCurrentSize = 0u;
CM_UINT8 historyBuf[2048] = {0};
CM_UINT8 tempBuf[2048] = {0};
CM_UINT32 i = 0u;
fp = fopen("PhyLog.txt", "r");
if (fp != NULL)
{
fseek(fp, 0, SEEK_END);
/*- 获取当前文件字节数 */
fileCurrentSize = ftell(fp);
/*- 文件超过5kb,则保留1kb */
if(fileCurrentSize >= 5120u)
{
fseek(fp, fileCurrentSize-1024, SEEK_SET);
fileCurrentSize = fread(historyBuf, 1024, 1, fp);
(void)fclose(fp);
/*- 处理字符串 */
for(i = 0u; i < 1024u; i++)
{
if('\n' == historyBuf[i])
{
(void)CM_Memcpy(tempBuf,1024,&historyBuf[i+1],1024-i);
break;
}
}
fp = fopen("PhyLog.txt", "w");
fileCurrentSize = fwrite(tempBuf, 1024-i, 1, fp);
}
else
{
/*- 无处理 */
}
(void)fclose(fp);
}
else
{
/*- 文件不存在空指针为正常情况*/
}
}
#endif
+3 -1
View File
@@ -76,7 +76,9 @@ typedef ENUM_CM_RETURN(*pSetAppfunc)(void); /* 应用周期调用函数 */
ENUM_OUTNET_EXTEND_RED = 5, /**< 扩展红网 */ ENUM_OUTNET_EXTEND_RED = 5, /**< 扩展红网 */
ENUM_OUTNET_EXTEND_BLUE = 6, /**< 扩展蓝网 */ ENUM_OUTNET_EXTEND_BLUE = 6, /**< 扩展蓝网 */
ENUM_ANOTHER_EXTEND_RED = 7, /**< 另一插箱扩展红网 */ ENUM_ANOTHER_EXTEND_RED = 7, /**< 另一插箱扩展红网 */
ENUM_ANOTHER_EXTEND_BLUE = 8 /**< 另一插箱扩展蓝网 */ ENUM_ANOTHER_EXTEND_BLUE = 8, /**< 另一插箱扩展蓝网 */
ENUM_CHN_RED = 9, /**< 红网通道,包含红网和扩展红网 */
ENUM_CHN_BLUE = 10 /**< 蓝网通道,包含蓝网和扩展蓝网 */
}ENUM_OUTNET_CHN_T; }ENUM_OUTNET_CHN_T;
/*- 板卡状态类型 */ /*- 板卡状态类型 */
+1 -1
View File
@@ -40,7 +40,7 @@
CM_CHAR FS_FILE_PATH[100]; CM_CHAR FS_FILE_PATH[100];
/** 平台软件版本号 */ /** 平台软件版本号 */
const CM_UINT8 MSCP_SW_VERION[4] = { 93u, 1u, 1u, 59u }; const CM_UINT8 MSCP_SW_VERION[4] = { 93u, 1u, 1u, 62u };
/** 驱动软件版本号 */ /** 驱动软件版本号 */
CM_UINT8 MSCP_DRV_VERION[4] = {0}; CM_UINT8 MSCP_DRV_VERION[4] = {0};
/** 与维护一体机接口文档版本号(接口文档发生改变时升级版本号) */ /** 与维护一体机接口文档版本号(接口文档发生改变时升级版本号) */
+15 -19
View File
@@ -47,7 +47,7 @@ static STRU_2OO2_NET_NO_PACK_T s_2oo2_AutoReboot = {
static CM_UINT8 PFM_LOG_SHUTDOWN(CM_UINT32 darkBuf, CM_UINT32 MaintenanceFlag, const CM_CHAR *filename, const CM_CHAR *func, CM_INT32 line); static CM_UINT8 PFM_LOG_SHUTDOWN(CM_UINT32 darkBuf, CM_UINT32 MaintenanceFlag, const CM_CHAR *filename, const CM_CHAR *func, CM_INT32 line);
static void PFM_LOG_MaintenanceMode(ENUM_BOARD_STATE_T boardState, CM_UINT32 MaintenanceFlag); static void PFM_LOG_MaintenanceMode(ENUM_BOARD_STATE_T boardState, CM_UINT32 MaintenanceFlag);
/* 宕机前向通控发送状态为宕机的心跳*/ /* 宕机前向通控发送状态为宕机的心跳*/
static void s_OutnetHeart_Send(); static void s_OutnetHeart_Send(void);
/* @brief 通用循环日志管理 /* @brief 通用循环日志管理
* @param file_type * @param file_type
* 0: (crashlog) * 0: (crashlog)
@@ -328,6 +328,7 @@ void MSCP_ASSERT(unsigned int x, unsigned int MaintenanceFlag, unsigned short Mo
{ {
/* 脉冲停止必须放在前面,避免延时导致的脉冲停止不及时*/ /* 脉冲停止必须放在前面,避免延时导致的脉冲停止不及时*/
DFM_Pulse_Stop(); DFM_Pulse_Stop();
DFM_ledAREA(0x03u);
} }
} }
SFM_2x2_LOG_Transition(); SFM_2x2_LOG_Transition();
@@ -372,7 +373,6 @@ void MSCP_ASSERT(unsigned int x, unsigned int MaintenanceFlag, unsigned short Mo
(void)fclose(fp_historical); (void)fclose(fp_historical);
/*- 关闭所有TCP连接 */ /*- 关闭所有TCP连接 */
(void)CM_TCP_Socket_Close_shutdown(); (void)CM_TCP_Socket_Close_shutdown();
// CM_Sleep(500u);
/*- 安全关断*/ /*- 安全关断*/
DFM_saftyOff(); DFM_saftyOff();
@@ -383,10 +383,6 @@ void MSCP_ASSERT(unsigned int x, unsigned int MaintenanceFlag, unsigned short Mo
if(ENUM_INIT_DRV <= PFM_LOG_GET_INIT_STAGE()) if(ENUM_INIT_DRV <= PFM_LOG_GET_INIT_STAGE())
{ {
/*- 设置LED指示灯*/ /*- 设置LED指示灯*/
if(0x00u != g_PFM_Cfg.M_Area_Enable)
{
DFM_ledAREA(0x03u);
}
DFM_ledError(); DFM_ledError();
DFM_ledMS(0u); DFM_ledMS(0u);
DFM_ledMonitor(2); DFM_ledMonitor(2);
@@ -411,8 +407,9 @@ void MSCP_ASSERT(unsigned int x, unsigned int MaintenanceFlag, unsigned short Mo
LogQisEmpty = CFM_LogQ_isEmpty(); LogQisEmpty = CFM_LogQ_isEmpty();
while (ENUM_CM_FALSE == LogQisEmpty) while (ENUM_CM_FALSE == LogQisEmpty)
{ {
CFM_LogCiphertextSend();
CM_Sleep(5u);
LogQisEmpty = CFM_LogQ_isEmpty(); LogQisEmpty = CFM_LogQ_isEmpty();
CM_Sleep(10u);
} }
/*- 退出运营故障码*/ /*- 退出运营故障码*/
@@ -505,6 +502,7 @@ void MSCP_REBOOT_ASSERT(unsigned int x, unsigned int MaintenanceFlag,unsigned sh
{ {
/* 脉冲停止必须放在前面,避免延时操作导致的脉冲停止不及时*/ /* 脉冲停止必须放在前面,避免延时操作导致的脉冲停止不及时*/
DFM_Pulse_Stop(); DFM_Pulse_Stop();
DFM_ledAREA(0x03u); /* 灭灯逻辑提前,避免被2取卡住不灭灯*/
} }
} }
SFM_2x2_LOG_Transition(); SFM_2x2_LOG_Transition();
@@ -516,17 +514,12 @@ void MSCP_REBOOT_ASSERT(unsigned int x, unsigned int MaintenanceFlag,unsigned sh
(void)printf("MSCP_REBOOT_ASSERT: %s:%s:%d,version:%d.%d.%d.%d,Cyc = %d,DefaultNum:0x%x\n", filename, func, line,MSCP_SW_VERION[0], MSCP_SW_VERION[1], MSCP_SW_VERION[2], MSCP_SW_VERION[3],g_MSCP_SysCount,darkBuf); (void)printf("MSCP_REBOOT_ASSERT: %s:%s:%d,version:%d.%d.%d.%d,Cyc = %d,DefaultNum:0x%x\n", filename, func, line,MSCP_SW_VERION[0], MSCP_SW_VERION[1], MSCP_SW_VERION[2], MSCP_SW_VERION[3],g_MSCP_SysCount,darkBuf);
AutoReboot_Flag = PFM_LOG_SHUTDOWN(darkBuf, MaintenanceFlag, filename, func, line); AutoReboot_Flag = PFM_LOG_SHUTDOWN(darkBuf, MaintenanceFlag, filename, func, line);
/*- 关闭所有TCP连接 */ /*- 关闭所有TCP连接 */
(void)CM_TCP_Socket_Close_shutdown(); (void)CM_TCP_Socket_Close_shutdown();
// CM_Sleep(500u);
/*- 安全关断*/ /*- 安全关断*/
DFM_saftyOff(); DFM_saftyOff();
if(ENUM_INIT_DRV <= PFM_LOG_GET_INIT_STAGE()) if(ENUM_INIT_DRV <= PFM_LOG_GET_INIT_STAGE())
{ {
/*- 设置LED指示灯*/ /*- 设置LED指示灯*/
if(0x00u != g_PFM_Cfg.M_Area_Enable)
{
DFM_ledAREA(0x03u);
}
DFM_ledError(); DFM_ledError();
DFM_ledMS(0u); DFM_ledMS(0u);
DFM_ledMonitor(2); DFM_ledMonitor(2);
@@ -550,13 +543,18 @@ void MSCP_REBOOT_ASSERT(unsigned int x, unsigned int MaintenanceFlag,unsigned sh
LogQisEmpty = CFM_LogQ_isEmpty(); LogQisEmpty = CFM_LogQ_isEmpty();
while (ENUM_CM_FALSE == LogQisEmpty) while (ENUM_CM_FALSE == LogQisEmpty)
{ {
CFM_LogCiphertextSend();
CM_Sleep(5u);
LogQisEmpty = CFM_LogQ_isEmpty(); LogQisEmpty = CFM_LogQ_isEmpty();
CM_Sleep(2u);
} }
/* 启动跟踪录制 */
MSCP_ASSERT_TraceLog();
/*- 是否执行重启命令*/ /*- 是否执行重启命令*/
if(AutoReboot_Flag == 0x55u) if(AutoReboot_Flag == 0x55u)
{ {
(void)printf("See You Later!!!\n"); (void)printf("See You Later!!!\n");
CM_Sleep(2000u); /* 等待tracelogger记录完成 */
(void)system("shutdown"); (void)system("shutdown");
/*- 休眠等待重启 */ /*- 休眠等待重启 */
CM_Sleep(CM_UINT32_MAX); CM_Sleep(CM_UINT32_MAX);
@@ -565,8 +563,6 @@ void MSCP_REBOOT_ASSERT(unsigned int x, unsigned int MaintenanceFlag,unsigned sh
{ {
(void)printf("Please check err!!!\n"); (void)printf("Please check err!!!\n");
} }
/* 启动跟踪录制 */
MSCP_ASSERT_TraceLog();
/*- 设置故障模式*/ /*- 设置故障模式*/
PFM_SetBoardState(ENUM_BOARDSTATE_DEFAULT); PFM_SetBoardState(ENUM_BOARDSTATE_DEFAULT);
@@ -967,7 +963,7 @@ static void PFM_LOG_MaintenanceMode(ENUM_BOARD_STATE_T MaintenanceFlag, CM_UINT3
DFM_ledMonitor(1u); DFM_ledMonitor(1u);
if(0x00u != g_PFM_Cfg.M_Area_Enable) if(0x00u != g_PFM_Cfg.M_Area_Enable)
{ {
DFM_ledAREA(0x0u); DFM_ledAREA(0x03u);
} }
(void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_PSLIGHT, 1U, &lightPs); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_PSLIGHT, 1U, &lightPs);
(void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_LOCAL, 1U, &localState); (void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_LOCAL, 1U, &localState);
@@ -1114,9 +1110,9 @@ CM_UINT32 *PFM_DarkLogGenerate(CM_UINT16 mode, CM_UINT16 fault, CM_UINT16 num)
return &lastcode; return &lastcode;
} }
/* 宕机前向通控发送状态为宕机的心跳 连续发送三包*/ /* 宕机前向通控发送状态为宕机的心跳 连续发送三包*/
static void s_OutnetHeart_Send() static void s_OutnetHeart_Send(void)
{ {
CFM_TxOutnetHeart(ENUM_2x2_SHUTDOWN); CFM_TxOutnetHeart(ENUM_2x2_SHUTDOWN);
CFM_TxOutnetHeart(ENUM_2x2_SHUTDOWN); CFM_TxOutnetHeart(ENUM_2x2_SHUTDOWN);
CFM_TxOutnetHeart(ENUM_2x2_SHUTDOWN); CFM_TxOutnetHeart(ENUM_2x2_SHUTDOWN);
} }
+1 -1
View File
@@ -180,7 +180,7 @@ void MSCP_PFM_LOG_MSG(IN const CM_CHAR *filename, IN CM_INT32 line, IN const CM_
#define PFM_BASE_THREADS_NAME "threads_state_" // 文件名前缀 (threads_state_1.txt) #define PFM_BASE_THREADS_NAME "threads_state_" // 文件名前缀 (threads_state_1.txt)
#define PFM_LATEST_THREADS_NAME "threads_state_latest.txt" #define PFM_LATEST_THREADS_NAME "threads_state_latest.txt"
#define PFM_RECORD_TIME_S (5u) #define PFM_RECORD_TIME_S (5u)
#define PFM_RECORD_BUF (1024) /* 1024 * 16KB = 16MB*/ #define PFM_RECORD_BUF (1024) /* 1024 * 11KB = 11MB*/
/* 函数实现 */ /* 函数实现 */
void MSCP_PFM_LOG_BIN(IN const CM_CHAR *filename, IN const CM_CHAR *func, IN CM_INT32 line, IN const CM_UINT8 *Buf, IN CM_UINT32 Len); void MSCP_PFM_LOG_BIN(IN const CM_CHAR *filename, IN const CM_CHAR *func, IN CM_INT32 line, IN const CM_UINT8 *Buf, IN CM_UINT32 Len);
+7 -4
View File
@@ -552,7 +552,6 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E
{ {
/*- 超时发送请求*/ /*- 超时发送请求*/
s_2oo2_ARQ_Send(p_2oo2_Ctrl,ENUM_2oo2_ARQ,p_2oo2_Ctrl->FrameCtrl.FramIndex + 1u); s_2oo2_ARQ_Send(p_2oo2_Ctrl,ENUM_2oo2_ARQ,p_2oo2_Ctrl->FrameCtrl.FramIndex + 1u);
MSCP_LOG_MSG("[%d]s_2oo2_ARQ_Send:%d\n",p_2oo2_Ctrl->SN,p_2oo2_Ctrl->FrameCtrl.FramIndex + 1);
/*- 重置起始时间*/ /*- 重置起始时间*/
sTick = CM_GetTick(); sTick = CM_GetTick();
ARQ_Cut++; ARQ_Cut++;
@@ -561,10 +560,10 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E
sizeof(CM_UINT16),(p_2oo2_Ctrl->FrameCtrl.FramIndex + 1u), sizeof(CM_UINT16),(p_2oo2_Ctrl->FrameCtrl.FramIndex + 1u),
sizeof(CM_UINT16),ARQ_Cut); sizeof(CM_UINT16),ARQ_Cut);
} }
else else
{ {
/*- 无处理 */ /*- 无处理 */
} }
} }
/*本机与邻机接收成功或重传次数超过1分钟(6000次)退出重传 */ /*本机与邻机接收成功或重传次数超过1分钟(6000次)退出重传 */
if(((CM_TRUE == MineRcvSuccessFlag) && (CM_TRUE == PeerRcvSuccessFlag)) || (ARQ_Cut >= 6000)) if(((CM_TRUE == MineRcvSuccessFlag) && (CM_TRUE == PeerRcvSuccessFlag)) || (ARQ_Cut >= 6000))
@@ -583,6 +582,10 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E
break; break;
} }
} }
if(ARQ_Cut > 0u)
{
MSCP_LOG_MSG("[%d]s_2oo2_ARQ_Send:%d, ARQ_Cut = %d\n",p_2oo2_Ctrl->SN,p_2oo2_Ctrl->FrameCtrl.FramIndex + 1, ARQ_Cut);
}
PFM_LOG_SET_STOPTIMER(TSCP_DARK_NULL); PFM_LOG_SET_STOPTIMER(TSCP_DARK_NULL);
/*- 返回报文总长度 */ /*- 返回报文总长度 */
return allLen; return allLen;
+42 -20
View File
@@ -101,15 +101,15 @@ static CM_BOOL s_State_2x2_Analysis(OUT STRU_2X2_STATE_CTRL_T *p_partner_state,C
static ENUM_CM_RETURN s_State_2x2Sync(OUT STRU_2X2_STATE_CTRL_T *p_partner_state); static ENUM_CM_RETURN s_State_2x2Sync(OUT STRU_2X2_STATE_CTRL_T *p_partner_state);
static void s_State_Transition(void); static void s_State_Transition(void);
/* 倒切按钮消抖 在2x微周期执行*/ /* 倒切按钮消抖 在2x微周期执行*/
static void s_Area_Switch_Get(); static void s_Area_Switch_Get(void);
/* 脉冲获取 在2x微周期执行*/ /* 脉冲获取 在2x微周期执行*/
static void s_Area_Pulse_Get(); static void s_Area_Pulse_Get(void);
/** 4个CPU脉冲同步 在2x后的2取执行*/ /** 4个CPU脉冲同步 在2x后的2取执行*/
static void s_Pulse_Sync(); static void s_Pulse_Sync(void);
/* 4个CPU开关状态判断 在2x后的2取执行 */ /* 4个CPU开关状态判断 在2x后的2取执行 */
static void s_AreaSwitch_Sync(); static void s_AreaSwitch_Sync(void);
/* 区域状态转换前从2x线程获取脉冲等信息后,进行状态转换*/ /* 区域状态转换前从2x线程获取脉冲等信息后,进行状态转换*/
static void s_Area_Transition(); static void s_Area_Transition(void);
/** /**
* @brief * @brief
* @param index 0-A系1-B系 * @param index 0-A系1-B系
@@ -119,7 +119,7 @@ static ENUM_CM_RETURN s_isPulseStopped(CM_UINT8 index);
/** /**
* *
*/ */
static void s_2x2_CloseSwitchFlag(); static void s_2x2_CloseSwitchFlag(void);
/* 校时计算offset时的2取双CPU计算*/ /* 校时计算offset时的2取双CPU计算*/
static ENUM_CM_RETURN s_TimeSync_2oo2(INOUT CM_INT64 *myOffset, OUT CM_INT64 *peerOffset); static ENUM_CM_RETURN s_TimeSync_2oo2(INOUT CM_INT64 *myOffset, OUT CM_INT64 *peerOffset);
/* 校时计算时钟调整量*/ /* 校时计算时钟调整量*/
@@ -151,6 +151,8 @@ static void s_Ctrl_2oo2Sync(OUT STRU_2X2_CTRL_T *pPeerCtrl);
static void SFM_2x2_Input2oo2Exchange(STRU_2X2_CTRL_T *peerCtrl); static void SFM_2x2_Input2oo2Exchange(STRU_2X2_CTRL_T *peerCtrl);
/* 判断2x422以及以太网的通信状况并且填写暗文日志 */ /* 判断2x422以及以太网的通信状况并且填写暗文日志 */
static void SFM_2x2_Eth422StateDark(void); static void SFM_2x2_Eth422StateDark(void);
/* 返回4线中通信正常的数量*/
static CM_UINT8 s_2x2_CommNormalNum(void);
/* 输入周期号同步函数 */ /* 输入周期号同步函数 */
static void SFM_2x2_InputSysCycSyn(STRU_2X2_CTRL_T *peerCtrl){ static void SFM_2x2_InputSysCycSyn(STRU_2X2_CTRL_T *peerCtrl){
@@ -273,7 +275,7 @@ static void s_State_Switch(void)
} }
/* 倒切按钮消抖*/ /* 倒切按钮消抖*/
static void s_Area_Switch_Get() static void s_Area_Switch_Get(void)
{ {
/*- 变量初始化 */ /*- 变量初始化 */
static CM_UINT64 s_timeFirst = 0u; static CM_UINT64 s_timeFirst = 0u;
@@ -306,7 +308,7 @@ static void s_Area_Switch_Get()
} }
} }
/* 脉冲获取 在2x微周期执行*/ /* 脉冲获取 在2x微周期执行*/
static void s_Area_Pulse_Get() static void s_Area_Pulse_Get(void)
{ {
static ENUM_CM_RETURN pulseAStopped = ENUM_CM_FALSE; static ENUM_CM_RETURN pulseAStopped = ENUM_CM_FALSE;
static ENUM_CM_RETURN pulseBStopped = ENUM_CM_FALSE; static ENUM_CM_RETURN pulseBStopped = ENUM_CM_FALSE;
@@ -818,6 +820,7 @@ static void s_State_Transition(void)
static CM_UINT32 dropCount = 0u; static CM_UINT32 dropCount = 0u;
ENUM_CM_RETURN Flag_Sick_Down = ENUM_CM_FALSE; /* TODO:如果自己健康度不足以升主 */ ENUM_CM_RETURN Flag_Sick_Down = ENUM_CM_FALSE; /* TODO:如果自己健康度不足以升主 */
ENUM_2x2_STATE_T TempState = ENUM_2x2_SHUTDOWN; /*临时状态*/ ENUM_2x2_STATE_T TempState = ENUM_2x2_SHUTDOWN; /*临时状态*/
CM_UINT8 comstate_num = 0u; /* 四线通信状态,有三线正常即为ok*/
boardID = g_PFM_Cfg.BOARD_ID; boardID = g_PFM_Cfg.BOARD_ID;
SFM_LOG_MSG_2X("Transition:[%d]MineCom:%d-%d:%d-%d:%d-%d\r\n",s_2x2_state_Ctrl.MicroCyc,\ SFM_LOG_MSG_2X("Transition:[%d]MineCom:%d-%d:%d-%d:%d-%d\r\n",s_2x2_state_Ctrl.MicroCyc,\
@@ -1144,13 +1147,9 @@ static void s_State_Transition(void)
(ENUM_CM_FALSE == MSCP_Get_2X_Com_State(&s_2x2_state_Ctrl.MineUartOKCount[0],0u)) && (ENUM_CM_FALSE == MSCP_Get_2X_Com_State(&s_2x2_state_Ctrl.MineUartOKCount[0],0u)) &&
(ENUM_CM_FALSE == MSCP_Get_2X_Com_State(&s_2x2_state_Ctrl.PeerUartOKCount[0],0u))) (ENUM_CM_FALSE == MSCP_Get_2X_Com_State(&s_2x2_state_Ctrl.PeerUartOKCount[0],0u)))
{ {
/*在完全中断前,有三线通信正常则允许切系*/
/*前两个周期是否存在中断-本周期串口是否正常-并且对系不是主系则升主*/ comstate_num = s_2x2_CommNormalNum();
if( /*与当前周期差3-5认为正常,超过阈值认为不同时断线,通信故障*/ if(comstate_num >= 3u) /* 三线及以上同时中断*/
(MSCP_Get_2X_DisCom_Count(&s_2x2_state_Ctrl.MineComOKCount[0],0u) <= MSCP_2X2_SYNC_TIMEOUT_CYC) &&
(MSCP_Get_2X_DisCom_Count(&s_2x2_state_Ctrl.PeerComOKCount[0],0u) <= MSCP_2X2_SYNC_TIMEOUT_CYC) &&
(MSCP_Get_2X_DisCom_Count(&s_2x2_state_Ctrl.MineUartOKCount[0],0u) <= MSCP_2X2_SYNC_TIMEOUT_CYC) &&
(MSCP_Get_2X_DisCom_Count(&s_2x2_state_Ctrl.PeerUartOKCount[0],0u) <= MSCP_2X2_SYNC_TIMEOUT_CYC))
{ {
/*不存在断线,判断为宕机或断电升主*/ /*不存在断线,判断为宕机或断电升主*/
/*- 本系升主 */ /*- 本系升主 */
@@ -1321,7 +1320,7 @@ static CM_THREAD_FUNC_T SFM_2x2_StateChange_Thread(void)
if(0x00u != g_PFM_Cfg.M_Area_Enable) if(0x00u != g_PFM_Cfg.M_Area_Enable)
{ {
/*获取脉冲状态*/ /*获取脉冲状态*/
s_Area_Pulse_Get(); s_Area_Pulse_Get();
/* 检查区域按钮状态*/ /* 检查区域按钮状态*/
s_Area_Switch_Get(); s_Area_Switch_Get();
} }
@@ -3880,7 +3879,7 @@ void SFM_2x2_SemPost(void)
} }
} }
/** 4个CPU脉冲同步*/ /** 4个CPU脉冲同步*/
static void s_Pulse_Sync() static void s_Pulse_Sync(void)
{ {
CM_UINT32 i = 0u, j = 0u, jmax = 0u; /* 循环变量*/ CM_UINT32 i = 0u, j = 0u, jmax = 0u; /* 循环变量*/
CM_INT32 pulseNum[5] = {0}; CM_INT32 pulseNum[5] = {0};
@@ -3940,7 +3939,7 @@ static void s_Pulse_Sync()
} }
} }
/* 4个CPU开关状态判断 在2x后的2取执行*/ /* 4个CPU开关状态判断 在2x后的2取执行*/
static void s_AreaSwitch_Sync() static void s_AreaSwitch_Sync(void)
{ {
if(ENUM_2x2_SHUTDOWN == s_2x2_state_Ctrl.PartnerState) if(ENUM_2x2_SHUTDOWN == s_2x2_state_Ctrl.PartnerState)
{ {
@@ -4033,7 +4032,7 @@ static ENUM_CM_RETURN s_isPulseStopped(CM_UINT8 index)
} }
/* 区域状态转换前从2x线程获取脉冲等信息后,进行状态转换*/ /* 区域状态转换前从2x线程获取脉冲等信息后,进行状态转换*/
static void s_Area_Transition() static void s_Area_Transition(void)
{ {
STRU_AREA_STATE_CTRL_T* AreaStateCtrl = SFM_Area_BackPointer_Ctrl(); /* 区域状态控制*/ STRU_AREA_STATE_CTRL_T* AreaStateCtrl = SFM_Area_BackPointer_Ctrl(); /* 区域状态控制*/
if(1u == s_2x2_state_Ctrl.AreaIsAllowed && if(1u == s_2x2_state_Ctrl.AreaIsAllowed &&
@@ -4096,7 +4095,7 @@ void SFM_2x2_UpdateCYC(void)
/** /**
* *
*/ */
static void s_2x2_CloseSwitchFlag() static void s_2x2_CloseSwitchFlag(void)
{ {
s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE; s_2x2_state_Ctrl.LocalSwitchState = ENUM_2x2_SWITCH_CLOSE;
s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE; s_2x2_state_Ctrl.PeerSwitchState = ENUM_2x2_SWITCH_CLOSE;
@@ -4203,4 +4202,27 @@ static void s_TimeSync_AreaSyncFlag(IN CM_INT64 offset, IN CM_INT64 threshold)
MSCP_LOG_MSG("area:WARING[%d][%lldms]:area offset sync success\n",SFM_2x2_GetSysCount(),offset/CM_MILLION); MSCP_LOG_MSG("area:WARING[%d][%lldms]:area offset sync success\n",SFM_2x2_GetSysCount(),offset/CM_MILLION);
s_2x2_Ctrl.TimeSyncFlag_Area = CM_TRUE; s_2x2_Ctrl.TimeSyncFlag_Area = CM_TRUE;
} }
}
/* 返回4线中通信正常的数量*/
static CM_UINT8 s_2x2_CommNormalNum(void)
{
CM_UINT8 num = 0u;
if(MSCP_Get_2X_DisCom_Count(&s_2x2_state_Ctrl.MineComOKCount[0],0u) <= MSCP_2X2_SYNC_TIMEOUT_CYC)
{
num++;
}
if(MSCP_Get_2X_DisCom_Count(&s_2x2_state_Ctrl.PeerComOKCount[0],0u) <= MSCP_2X2_SYNC_TIMEOUT_CYC)
{
num++;
}
if(MSCP_Get_2X_DisCom_Count(&s_2x2_state_Ctrl.MineUartOKCount[0],0u) <= MSCP_2X2_SYNC_TIMEOUT_CYC)
{
num++;
}
if(MSCP_Get_2X_DisCom_Count(&s_2x2_state_Ctrl.PeerUartOKCount[0],0u) <= MSCP_2X2_SYNC_TIMEOUT_CYC)
{
num++;
}
return num;
} }
+127 -91
View File
@@ -62,19 +62,19 @@ static void s_Area_Recv(void);
/*获取最新的区域数据buf*/ /*获取最新的区域数据buf*/
static CM_INT32 s_Get_LatestAreaBuf(IN CM_UINT8* data1, IN CM_INT32 len1,IN CM_UINT8* data2, IN CM_INT32 len2,OUT CM_UINT8** dataOut); static CM_INT32 s_Get_LatestAreaBuf(IN CM_UINT8* data1, IN CM_INT32 len1,IN CM_UINT8* data2, IN CM_INT32 len2,OUT CM_UINT8** dataOut);
/* CI状态机*/ /* CI状态机*/
static void s_Area_CI_Transition(); static void s_Area_CI_Transition(void);
/* RC状态机*/ /* RC状态机*/
static void s_Area_RC_Transition(); static void s_Area_RC_Transition(void);
/* 区域状态机*/ /* 区域状态机*/
static void s_Area_State_Transition(); static void s_Area_State_Transition(void);
/* 从AB两系的脉冲选择有效的脉冲*/ /* 从AB两系的脉冲选择有效的脉冲*/
static void s_Area_GetValidPulse(); static void s_Area_GetValidPulse(void);
/* 区域协程的2oo2x交互*/ /* 区域协程的2oo2x交互*/
static void s_Area_2oo2x2(); static void s_Area_2oo2x2(void);
/* 根据脉冲状态获取区域状态 状态转换前进行*/ /* 根据脉冲状态获取区域状态 状态转换前进行*/
static void s_Area_GetStateFromPulse(); static void s_Area_GetStateFromPulse(void);
/* 主备系接收情况判断*/ /* 主备系接收情况判断*/
static void s_Area_GetMasterData(); static void s_Area_GetMasterData(void);
/** /**
* @brief * @brief
* */ * */
@@ -85,6 +85,14 @@ static ENUM_AREA_STATE_T s_ConvertPulseToState(ENUM_PULSE_TYPE_T pulse);
* @see :: s_2x2_SendState * @see :: s_2x2_SendState
*/ */
static void s_2x2_Area_Recv(void); static void s_2x2_Area_Recv(void);
/**
* @brief 2x2数据
*/
static void s_Parse2x2Data(ENUM_2x2_MSG_T msgType, CM_UINT32 msgCyc, CM_UINT16 framNum, CM_UINT16 framIndex, CM_UINT8* data, CM_INT32 len);
/**
* @brief
*/
static void s_ParseAreaData(ENUM_AREA_MSG_T msgType, CM_UINT32 msgCyc, CM_UINT16 framNum, CM_UINT16 framIndex, CM_UINT8* data, CM_INT32 len);
/** /**
* 线 * 线
*/ */
@@ -96,7 +104,7 @@ static void s_2oo2Before_AreaSend(CM_UINT8 *buf, CM_INT32 len, CM_UINT32 bufsize
/** /**
* *
*/ */
void SFM_Area_Init() void SFM_Area_Init(void)
{ {
CM_BOOL rt = CM_FALSE; CM_BOOL rt = CM_FALSE;
ENUM_CM_RETURN ret = ENUM_CM_FALSE; ENUM_CM_RETURN ret = ENUM_CM_FALSE;
@@ -165,7 +173,7 @@ void SFM_Area_Init()
/** /**
* *
*/ */
void SFM_AREA_Thread_PostStart() void SFM_AREA_Thread_PostStart(void)
{ {
if(0x00 != g_PFM_Cfg.M_Area_Enable) if(0x00 != g_PFM_Cfg.M_Area_Enable)
{ {
@@ -179,7 +187,7 @@ void SFM_AREA_Thread_PostStart()
/** /**
* *
*/ */
void SFM_AREA_Thread_WaitStop() void SFM_AREA_Thread_WaitStop(void)
{ {
if(0x00 != g_PFM_Cfg.M_Area_Enable) if(0x00 != g_PFM_Cfg.M_Area_Enable)
{ {
@@ -263,6 +271,7 @@ static CM_THREAD_FUNC_T t_AreaThread(void)
s_area_state_Ctrl.AnotherBoardID); s_area_state_Ctrl.AnotherBoardID);
CM_Sem_Post(s_Area_Thread_Ctrl.m_Stop); CM_Sem_Post(s_Area_Thread_Ctrl.m_Stop);
} }
return NULL;
} }
/** /**
* @brief * @brief
@@ -348,7 +357,6 @@ void SFM_AREA_Send(IN const CM_UINT8 *Data, IN CM_UINT32 DataLen, IN ENUM_AREA_M
static void s_Area_Recv(void) static void s_Area_Recv(void)
{ {
/*- 变量初始化 */ /*- 变量初始化 */
static STRU_FrameCtrl_T s_Area_FrameCtrl[2]; /**< 分帧接收控制 */
CM_INT32 rxLen = 0; /* 网络接收长度 */ CM_INT32 rxLen = 0; /* 网络接收长度 */
CM_UINT32 msgLen = 0u; /* 报文长度 */ CM_UINT32 msgLen = 0u; /* 报文长度 */
CM_UINT32 SrcID = 0u; /* 源ID */ CM_UINT32 SrcID = 0u; /* 源ID */
@@ -418,47 +426,7 @@ static void s_Area_Recv(void)
{ {
pData = s_area_Cache + offset; pData = s_area_Cache + offset;
DataLen = (CM_INT32)CM_UNSIGNED_INT_EXP(msgLen - offset + 6); DataLen = (CM_INT32)CM_UNSIGNED_INT_EXP(msgLen - offset + 6);
switch(type) s_ParseAreaData(type, msgCyc, FrameNum, FrameIndex, pData, DataLen);
{
case ENUM_AREA_MSG_MASTER:
Buff_Area = g_Area_App_DATA;
Buff_Len = &g_Area_App_Data_Len;
Buff_FrameCtrl = &s_Area_FrameCtrl[0];
break;
case ENUM_AREA_MSG_SLAVE:
Buff_Area = g_Area_State_Cache;
Buff_Len = &g_Area_State_Cache_Len;
Buff_FrameCtrl = &s_Area_FrameCtrl[1];
break;
default:
break;
}
/*- 分帧接收跟随报文 */
CM_RE_ASSERT(FrameNum <= (SFM_AREA_DATA_BUFF_SIZE / NET_20K_SIZE), SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_2);
CM_RE_ASSERT(FrameIndex <= FrameNum, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_3);
ret = SFM_FrameSave(Buff_FrameCtrl, (CM_UINT8)type, FrameNum, FrameIndex, pData, DataLen, Buff_Area, Buff_Len, sizeof(g_Area_App_DATA));
/*- 是否收齐了跟随报文 */
if (ENUM_CM_TRUE == ret && 8u <= *Buff_Len)
{
*Buff_Len -= 8;
msgCrc1 = CM_LongFromChar(Buff_Area + *Buff_Len);
msgCrc2 = CM_LongFromChar(Buff_Area + *Buff_Len + 4);
calcCrc1 = CM_Crc32_1(Buff_Area, *Buff_Len);
calcCrc2 = CM_Crc32_2(Buff_Area, *Buff_Len);
if(calcCrc1 != msgCrc1 || calcCrc2 != msgCrc2)
{
SFM_LOG_MSG_AREA("Recv %d double crc fail\n", type);
*Buff_Len = 0u;
}
else
{
SFM_LOG_MSG_AREA("Recv Success, cyc:%d\n", msgCyc);
}
}
else
{
}
} }
else else
{ {
@@ -587,7 +555,6 @@ void SFM_2x2_AREA_Send(IN const CM_UINT8 *Data, IN CM_UINT32 DataLen, IN ENUM_2x
static void s_2x2_Area_Recv(void) static void s_2x2_Area_Recv(void)
{ {
/*- 变量初始化 */ /*- 变量初始化 */
static STRU_FrameCtrl_T s_2x2_Area_FrameCtrl; /**< 分帧接收控制 */
CM_INT32 rxLen = 0; /* 网络接收长度 */ CM_INT32 rxLen = 0; /* 网络接收长度 */
CM_UINT32 msgLen = 0u; /* 报文长度 */ CM_UINT32 msgLen = 0u; /* 报文长度 */
CM_UINT32 SrcID = 0u; /* 源ID */ CM_UINT32 SrcID = 0u; /* 源ID */
@@ -645,32 +612,7 @@ static void s_2x2_Area_Recv(void)
{ {
pData = s_area_Cache + offset; pData = s_area_Cache + offset;
DataLen = (CM_INT32)CM_UNSIGNED_INT_EXP(msgLen - offset); DataLen = (CM_INT32)CM_UNSIGNED_INT_EXP(msgLen - offset);
/*- 报文类型 */ s_Parse2x2Data(type, msgCyc, FrameNum, FrameIndex, pData, DataLen);
switch (type)
{
case ENUM_2x2_AREA_MSG_DATA:
if(msgCyc > s_area_state_Ctrl.Rx2x2DataSysCyc)
{
/*- 分帧接收跟随报文 */
CM_RE_ASSERT(FrameNum <= (SFM_AREA_DATA_BUFF_SIZE / NET_20K_SIZE), SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_5);
CM_RE_ASSERT(FrameIndex <= FrameNum, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_7, TSCP_DARK_ASSERT_6);
ret = SFM_FrameSave(&s_2x2_Area_FrameCtrl, (CM_UINT8)ENUM_2x2_MSG_BASE_FOLLOW, FrameNum, FrameIndex, pData, DataLen, g_2x2_Area_App_DATA, &g_2x2_Area_App_Data_Len, (CM_UINT32)sizeof(g_2x2_Area_App_DATA));
/*- 是否收齐了跟随报文 */
if (ENUM_CM_TRUE == ret)
{
s_area_state_Ctrl.Rx2x2DataSysCyc = msgCyc;
}
else
{
}
}
break;
default:
/* 无处理*/
break;
}/* end switch */
} }
else else
{ {
@@ -816,7 +758,7 @@ CM_UINT32 SFM_GetAreaData(OUT CM_UINT8** data)
return len; return len;
} }
/* 区域状态切换*/ /* 区域状态切换*/
void SFM_Area_State_Transition() void SFM_Area_State_Transition(void)
{ {
s_Area_GetStateFromPulse(); s_Area_GetStateFromPulse();
@@ -906,7 +848,7 @@ void SFM_Area_State_Transition()
} }
} }
/* 区域状态机*/ /* 区域状态机*/
static void s_Area_State_Transition() static void s_Area_State_Transition(void)
{ {
ENUM_AREA_STATE_T tempState; ENUM_AREA_STATE_T tempState;
SFM_LOG_MSG_AREA("pulse is %d\n", s_area_state_Ctrl.pulse); SFM_LOG_MSG_AREA("pulse is %d\n", s_area_state_Ctrl.pulse);
@@ -1021,7 +963,7 @@ void SFM_SetAreaLed(ENUM_AREA_STATE_T state)
DFM_ledAREA(0x02u); DFM_ledAREA(0x02u);
break; break;
case ENUM_AREA_UNAVAILABLE: case ENUM_AREA_UNAVAILABLE:
DFM_ledAREA(0x03u); DFM_ledAREA(0x00u);
break; break;
default: default:
DFM_ledAREA(0x03u); DFM_ledAREA(0x03u);
@@ -1035,14 +977,14 @@ CM_UINT32 SFM_Area_GetRxSysCount()
return s_area_state_Ctrl.RxAreaSysCyc; return s_area_state_Ctrl.RxAreaSysCyc;
} }
/* 获取区域周期号*/ /* 获取区域周期号*/
CM_UINT32 SFM_Area_GetSysCount() CM_UINT32 SFM_Area_GetSysCount(void)
{ {
return g_MSCP_AreaCount; return g_MSCP_AreaCount;
} }
/* 从AB两系的脉冲选择有效的脉冲 /* 从AB两系的脉冲选择有效的脉冲
* (SFM_Area_State_Transition) * (SFM_Area_State_Transition)
*/ */
static void s_Area_GetValidPulse() static void s_Area_GetValidPulse(void)
{ {
s_area_state_Ctrl.AllInterrupt = 0u; s_area_state_Ctrl.AllInterrupt = 0u;
/* 更新亚健康标志*/ /* 更新亚健康标志*/
@@ -1104,7 +1046,7 @@ static void s_Area_GetValidPulse()
} }
} }
/* 区域协程的2oo2x交互*/ /* 区域协程的2oo2x交互*/
static void s_Area_2oo2x2() static void s_Area_2oo2x2(void)
{ {
/* 清空缓冲区长度*/ /* 清空缓冲区长度*/
g_Area_App_Master_Len = 0; g_Area_App_Master_Len = 0;
@@ -1153,7 +1095,7 @@ static void s_Area_2oo2x2()
SFM_LOG_MSG_AREA("Master Data Len:%d, Slave Data Len:%d\n",g_Area_App_Master_Len ,g_Area_App_Slave_Len ); SFM_LOG_MSG_AREA("Master Data Len:%d, Slave Data Len:%d\n",g_Area_App_Master_Len ,g_Area_App_Slave_Len );
} }
/* 根据脉冲状态获取区域状态 状态转换前进行*/ /* 根据脉冲状态获取区域状态 状态转换前进行*/
static void s_Area_GetStateFromPulse() static void s_Area_GetStateFromPulse(void)
{ {
/* 获取有效脉冲*/ /* 获取有效脉冲*/
static CM_UINT32 notSameCnt = 0u; static CM_UINT32 notSameCnt = 0u;
@@ -1209,12 +1151,12 @@ void SFM_Area_EndProc(CM_UINT8* CI_Buf, CM_INT32 buf_len, CM_UINT32 buf_size)
if(NULL != RC_API_FollowUp && 4u < areaDataLen) if(NULL != RC_API_FollowUp && 4u < areaDataLen)
{ {
s_area_state_Ctrl.RCFollowFlag = RC_API_FollowUp(p_areaData, areaDataLen); s_area_state_Ctrl.RCFollowFlag = RC_API_FollowUp(p_areaData, areaDataLen);
MSCP_LOG_MSG("RC:Set App Data, alllen=%d, len=%d, time:%llums\n", areaDataLen, CM_LongFromChar(p_areaData), NOW_USED_TIME / 1000u);
} }
else else
{ {
MSCP_LOG_MSG("RC:Set App Func Fail, len = %d\n", areaDataLen); MSCP_LOG_MSG("RC:Set App Func Fail, len = %d, time:%llums\n", areaDataLen, NOW_USED_TIME / 1000u);
} }
MSCP_LOG_MSG("RC:Set App Data, alllen=%d, len=%d, time:%llums\n", areaDataLen, CM_LongFromChar(p_areaData), NOW_USED_TIME / 1000u);
} }
else if(0x55u == g_PFM_Cfg.M_Area_Enable) else if(0x55u == g_PFM_Cfg.M_Area_Enable)
{ {
@@ -1335,7 +1277,7 @@ static void s_2oo2Before_AreaSend(CM_UINT8 *buf, CM_INT32 len, CM_UINT32 bufsize
} }
/* 主备系接收情况判断*/ /* 主备系接收情况判断*/
static void s_Area_GetMasterData() static void s_Area_GetMasterData(void)
{ {
CM_UINT32 appLen = 0u; CM_UINT32 appLen = 0u;
static CM_UINT32 Slave_sysCyc = 0; static CM_UINT32 Slave_sysCyc = 0;
@@ -1403,7 +1345,7 @@ void SFM_Area_UpdateCYC(void)
} }
} }
/* CI状态机*/ /* CI状态机*/
static void s_Area_CI_Transition() static void s_Area_CI_Transition(void)
{ {
switch(s_area_state_Ctrl.LocalAreaState) switch(s_area_state_Ctrl.LocalAreaState)
{ {
@@ -1434,7 +1376,7 @@ static void s_Area_CI_Transition()
} }
} }
/* RC状态机*/ /* RC状态机*/
static void s_Area_RC_Transition() static void s_Area_RC_Transition(void)
{ {
switch(s_area_state_Ctrl.LocalAreaState) switch(s_area_state_Ctrl.LocalAreaState)
{ {
@@ -1494,4 +1436,98 @@ static void s_Area_RC_Transition()
/*无处理*/ /*无处理*/
break; break;
} }
}
static void s_Parse2x2Data(ENUM_2x2_MSG_T msgType, CM_UINT32 msgCyc, CM_UINT16 framNum, CM_UINT16 framIndex, CM_UINT8* data, CM_INT32 len)
{
static STRU_FrameCtrl_T s_2x2_Area_FrameCtrl; /**< 分帧接收控制 */
CM_UINT32 ret = 0u;
switch (msgType)
{
case ENUM_2x2_AREA_MSG_DATA:
if(msgCyc > s_area_state_Ctrl.Rx2x2DataSysCyc)
{
/*- 分帧接收跟随报文 */
CM_RE_ASSERT(framNum <= (SFM_AREA_DATA_BUFF_SIZE / NET_20K_SIZE), SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_1);
CM_RE_ASSERT(framIndex <= framNum, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_2);
ret = SFM_FrameSave(&s_2x2_Area_FrameCtrl, (CM_UINT8)ENUM_2x2_MSG_BASE_FOLLOW, framNum, framIndex, data, len, g_2x2_Area_App_DATA, &g_2x2_Area_App_Data_Len, (CM_UINT32)sizeof(g_2x2_Area_App_DATA));
/*- 是否收齐了跟随报文 */
if (ENUM_CM_TRUE == ret)
{
s_area_state_Ctrl.Rx2x2DataSysCyc = msgCyc;
}
else
{
}
}
break;
default:
/* 无处理*/
break;
}/* end switch */
}
static void s_ParseAreaData(ENUM_AREA_MSG_T msgType, CM_UINT32 msgCyc, CM_UINT16 framNum, CM_UINT16 framIndex, CM_UINT8* data, CM_INT32 len)
{
static STRU_FrameCtrl_T s_Area_FrameCtrl[2]; /**< 分帧接收控制 */
CM_UINT32 msgCrc1 = 0u, msgCrc2 = 0u, calcCrc1 = 0u, calcCrc2 = 0u;
ENUM_CM_RETURN ret = ENUM_CM_FALSE;
switch(msgType)
{
case ENUM_AREA_MSG_MASTER:
/*- 分帧接收跟随报文 */
CM_RE_ASSERT(framNum <= (SFM_AREA_DATA_BUFF_SIZE / NET_20K_SIZE), SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_1);
CM_RE_ASSERT(framIndex <= framNum, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_2);
ret = SFM_FrameSave(&s_Area_FrameCtrl[0], (CM_UINT8)msgType, framNum, framIndex, data, len, g_Area_App_DATA, &g_Area_App_Data_Len, sizeof(g_Area_App_DATA));
/*- 是否收齐了跟随报文 */
if (ENUM_CM_TRUE == ret && 8u <= g_Area_App_Data_Len)
{
g_Area_App_Data_Len -= 8;
msgCrc1 = CM_LongFromChar(g_Area_App_DATA + g_Area_App_Data_Len);
msgCrc2 = CM_LongFromChar(g_Area_App_DATA + g_Area_App_Data_Len + 4);
calcCrc1 = CM_Crc32_1(g_Area_App_DATA, g_Area_App_Data_Len);
calcCrc2 = CM_Crc32_2(g_Area_App_DATA, g_Area_App_Data_Len);
if(calcCrc1 != msgCrc1 || calcCrc2 != msgCrc2)
{
SFM_LOG_MSG_AREA("Recv %d double crc fail\n", msgType);
g_Area_App_Data_Len = 0u;
}
else
{
SFM_LOG_MSG_AREA("Recv Success, cyc:%d\n", msgCyc);
}
}
else
{
}
break;
case ENUM_AREA_MSG_SLAVE:
CM_RE_ASSERT(framNum == 1, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_3);
CM_RE_ASSERT(framIndex <= framNum, SFM_AREA_MODE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_4);
ret = SFM_FrameSave(&s_Area_FrameCtrl[1], (CM_UINT8)msgType, framNum, framIndex, data, len, g_Area_State_Cache, &g_Area_State_Cache_Len, sizeof(g_Area_State_Cache));
if (ENUM_CM_TRUE == ret && 8u <= g_Area_State_Cache_Len)
{
g_Area_State_Cache_Len -= 8;
msgCrc1 = CM_LongFromChar(g_Area_State_Cache + g_Area_State_Cache_Len);
msgCrc2 = CM_LongFromChar(g_Area_State_Cache + g_Area_State_Cache_Len + 4);
calcCrc1 = CM_Crc32_1(g_Area_State_Cache, g_Area_State_Cache_Len);
calcCrc2 = CM_Crc32_2(g_Area_State_Cache, g_Area_State_Cache_Len);
if(calcCrc1 != msgCrc1 || calcCrc2 != msgCrc2)
{
SFM_LOG_MSG_AREA("Recv %d double crc fail\n", msgType);
g_Area_State_Cache_Len = 0u;
}
else
{
SFM_LOG_MSG_AREA("Recv Success, cyc:%d\n", msgCyc);
}
}
else
{
}
break;
default:
break;
}
} }
+5 -5
View File
@@ -104,11 +104,11 @@ typedef struct
/** /**
* *
*/ */
void SFM_AREA_Thread_PostStart(); void SFM_AREA_Thread_PostStart(void);
/** /**
* *
*/ */
void SFM_AREA_Thread_WaitStop(); void SFM_AREA_Thread_WaitStop(void);
/** /**
* @brief * @brief
* @param * @param
@@ -124,7 +124,7 @@ void SFM_2X2_AREA_ClearRcvMsgQ(void);
/** /**
* *
*/ */
void SFM_Area_Init(); void SFM_Area_Init(void);
/** /**
* @brief * @brief
* @param Data * @param Data
@@ -150,7 +150,7 @@ void SFM_2x2_AREA_Send(IN const CM_UINT8 *Data, IN CM_UINT32 DataLen, IN ENUM_2x
*/ */
CM_UINT32 SFM_GetAreaData(OUT CM_UINT8** data); CM_UINT32 SFM_GetAreaData(OUT CM_UINT8** data);
/* 区域状态切换 必须在2x线程结束后进行*/ /* 区域状态切换 必须在2x线程结束后进行*/
void SFM_Area_State_Transition(); void SFM_Area_State_Transition(void);
/*日志转换*/ /*日志转换*/
void SFM_AREA_LOG_Transition(void); void SFM_AREA_LOG_Transition(void);
/*协程状态控制接口*/ /*协程状态控制接口*/
@@ -162,7 +162,7 @@ void SFM_SetAreaLed(ENUM_AREA_STATE_T state);
/* 获取接收到的周期号*/ /* 获取接收到的周期号*/
CM_UINT32 SFM_Area_GetRxSysCount(); CM_UINT32 SFM_Area_GetRxSysCount();
/* 获取区域周期号*/ /* 获取区域周期号*/
CM_UINT32 SFM_Area_GetSysCount(); CM_UINT32 SFM_Area_GetSysCount(void);
/** /**
* @brief * @brief
* @param CI_Buf CI待发送区域数据 * @param CI_Buf CI待发送区域数据
+72 -12
View File
@@ -74,6 +74,21 @@ extern CM_UINT32 g_MSCP_SysCount; /**< 系统周期号 */
extern CM_INT32 g_PFM_Check; extern CM_INT32 g_PFM_Check;
static CM_UINT32 s_txSn = 1u; static CM_UINT32 s_txSn = 1u;
/**
* @breif
* @param chn
* @return
*/
static ENUM_OUTNET_CHN_T s_Outnet_Chn_ROB(ENUM_OUTNET_CHN_T chn);
/**
* @brief
* @param redData
* @param redDataLen
* @param blueData
* @param blueDataLen
*/
static CM_UINT8 s_Outnet_Recv_Dedup(CM_UINT8* redData, CM_UINT32 redDataLen, CM_UINT8* blueData, CM_UINT32 *blueDataLen);
/** /**
* @breif (-1) * @breif (-1)
* @details * @details
@@ -371,7 +386,7 @@ CM_INT32 SFM_RxInnetRemoteUpdate(OUT CM_UINT8 Buf[], IN CM_UINT32 BufSize)
CM_INT32 SFM_RxOutnetSafe(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize) CM_INT32 SFM_RxOutnetSafe(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize)
{ {
/*- 变量初始化 */ /*- 变量初始化 */
ENUM_OUTNET_CHN_T ch = ENUM_OUTNET_ERROR; /* 通道类型 */ ENUM_OUTNET_CHN_T ch = ENUM_OUTNET_ERROR, ch_rob; /* 通道类型 */
CM_INT32 allLen = 0; /* 报文总长 */ CM_INT32 allLen = 0; /* 报文总长 */
CM_INT32 rxLen = 0; /* 接收报文长度 */ CM_INT32 rxLen = 0; /* 接收报文长度 */
CM_UINT8 ccVer = 0u; /* CC版本 */ CM_UINT8 ccVer = 0u; /* CC版本 */
@@ -397,6 +412,8 @@ CM_INT32 SFM_RxOutnetSafe(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize)
{ {
/*- 从通信层接收外网数据 */ /*- 从通信层接收外网数据 */
rxLen = CFM_OutnetSafe_Recv(s_Prtcl_UDP_Cache, sizeof(s_Prtcl_UDP_Cache), &ch); rxLen = CFM_OutnetSafe_Recv(s_Prtcl_UDP_Cache, sizeof(s_Prtcl_UDP_Cache), &ch);
/* 判断为红网还是蓝网通道*/
ch_rob = s_Outnet_Chn_ROB(ch);
(rxLen > 0)?(rxCtrlLen += rxLen):rxCtrlLen; (rxLen > 0)?(rxCtrlLen += rxLen):rxCtrlLen;
if(rxCtrlLen > g_PFM_Cfg.OutnetSafePack_Len) if(rxCtrlLen > g_PFM_Cfg.OutnetSafePack_Len)
{ {
@@ -467,7 +484,7 @@ CM_INT32 SFM_RxOutnetSafe(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize)
n字节 n字节
*/ */
/*- 如果是来自红网数据 */ /*- 如果是来自红网数据 */
if ((ENUM_OUTNET_RED == ch) || (ENUM_OUTNET_EXTEND_RED == ch) || (ENUM_ANOTHER_EXTEND_RED == ch)) if (ch_rob == ENUM_CHN_RED)
{ {
/*- 是否来自ats转车的输入数据 */ /*- 是否来自ats转车的输入数据 */
if(ENUM_CM_TRUE == isTransformInFrame) if(ENUM_CM_TRUE == isTransformInFrame)
@@ -531,16 +548,11 @@ CM_INT32 SFM_RxOutnetSafe(OUT CM_UINT8 buf[], IN CM_UINT32 bufSize)
*/ */
/*- 输出红蓝网的外网接收帧 */ /*- 输出红蓝网的外网接收帧 */
CM_LongToChar(redLen, buf); CM_LongToChar(redLen, buf);
if((redLen > 0u) && (blueLen > 0u)) CM_LongToChar(blueLen, s_TmpCache); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */
{ blueLen += 4u;
CM_LongToChar(blueLen, s_TmpCache); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ ret = s_Outnet_Recv_Dedup(buf, redLen + 4u, s_TmpCache, &blueLen);
blueLen += 4u; CM_ASSERT(ret == 1u, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_7);
MSCP_LOG_MSG("SFM_RxOutnetSafe redLen=%u, blueLen=%u\n", redLen, blueLen); blueLen -= 4u;
ret = SFM_OutProtclTwoRepeat(buf, redLen + 4u, s_TmpCache, &blueLen);
MSCP_LOG_MSG("SFM_RxOutnetSafe Two Repeat redLen=%u, blueLen=%u\n", redLen, blueLen);
CM_ASSERT(ret == 1u, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_7);
blueLen -= 4u;
}
CM_RE_ASSERT((redLen + blueLen + 8u) <= bufSize, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_6); CM_RE_ASSERT((redLen + blueLen + 8u) <= bufSize, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_3, TSCP_DARK_ASSERT_6);
CM_LongToChar(blueLen, &buf[4u + redLen]); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */ CM_LongToChar(blueLen, &buf[4u + redLen]); /* parasoft-suppress MISRA2004-17_1 "指针运算提高代码执行效率" */
allLen = (CM_INT32)CM_UNSIGNED_INT_EXP(redLen + blueLen + 8u); allLen = (CM_INT32)CM_UNSIGNED_INT_EXP(redLen + blueLen + 8u);
@@ -2417,4 +2429,52 @@ CM_UINT32 SFM_GetTxSn(void)
/*- 返回sn号*/ /*- 返回sn号*/
return tmpsn; return tmpsn;
} }
static ENUM_OUTNET_CHN_T s_Outnet_Chn_ROB(ENUM_OUTNET_CHN_T chn)
{
ENUM_OUTNET_CHN_T rt = ENUM_OUTNET_ERROR;
switch(chn)
{
case ENUM_OUTNET_RED:
case ENUM_OUTNET_EXTEND_RED:
case ENUM_ANOTHER_EXTEND_RED:
case ENUM_CHN_RED:
rt = ENUM_CHN_RED;
break;
case ENUM_OUTNET_BLUE:
case ENUM_OUTNET_EXTEND_BLUE:
case ENUM_ANOTHER_EXTEND_BLUE:
case ENUM_CHN_BLUE:
rt = ENUM_CHN_BLUE;
break;
default:
rt = ENUM_OUTNET_ERROR;
break;
}
return rt;
}
/**
* @brief
* @param redData
* @param redDataLen
* @param blueData
* @param blueDataLen
*/
static CM_UINT8 s_Outnet_Recv_Dedup(CM_UINT8 *redData, CM_UINT32 redDataLen, CM_UINT8 *blueData, CM_UINT32 *blueDataLen)
{
CM_UINT8 ret = 0u;
if((redData != NULL) && (blueData != NULL) && (blueDataLen != NULL))
{
if ((redDataLen > 4u) && (*blueDataLen > 4u))
{
MSCP_LOG_MSG("SFM_RxOutnetSafe redLen=%u, blueLen=%u\n", redDataLen, *blueDataLen);
ret = SFM_OutProtclTwoRepeat(redData, redDataLen, blueData, blueDataLen);
MSCP_LOG_MSG("SFM_RxOutnetSafe Two Repeat redLen=%u, blueLen=%u\n", redDataLen, *blueDataLen);
}
else
{
ret = 1u;
}
}
return ret;
}
@@ -18,6 +18,8 @@
#include "dfsDataRead.h" #include "dfsDataRead.h"
#include "CbtcVersion.h" #include "CbtcVersion.h"
#include "dquCbtcType.h" #include "dquCbtcType.h"
#include "../dqu_emap_common/dsuEmapDefine.h"
#include "../../APP/ciapp/System/SystemParameterManage.h"
static CBTC_CFG_DATA_STRU *qds_dsuCbtcConfigDataStru=NULL;/*CBTC配置信息用查询数据源*/ static CBTC_CFG_DATA_STRU *qds_dsuCbtcConfigDataStru=NULL;/*CBTC配置信息用查询数据源*/
static CBTC_CFG_DATA_STRU *g_pCbtcConfigDataStru=NULL; /*指向初始化用数据库的指针*/ static CBTC_CFG_DATA_STRU *g_pCbtcConfigDataStru=NULL; /*指向初始化用数据库的指针*/
@@ -30,20 +32,27 @@ static UINT16 g_RowCount; /*
static UINT16 g_wCurInitStruProg=0U;/*当前结构体初始化进程,分步加载时使用*/ static UINT16 g_wCurInitStruProg=0U;/*当前结构体初始化进程,分步加载时使用*/
static UINT16 g_wCurMainIndex=0U; /*当前主处理索引,分步加载时使用*/ static UINT16 g_wCurMainIndex=0U; /*当前主处理索引,分步加载时使用*/
extern UINT8 CI_SYSTEM_TYPE_RCI;
extern UINT8 gLocalPublicDataType;
/*----------内部函数声明开始--------------*/ /*----------内部函数声明开始--------------*/
/*解析列车车型配置数据1*/ /*解析列车车型配置数据1*/
UINT8 dfsInitTrainModelConfigData(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); UINT8 dfsInitTrainModelConfigData(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount);
/*列车性能参数配置结构体2*/ /*列车性能参数配置结构体2*/
UINT8 dfsInitTrainPerformConfigData(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); UINT8 dfsInitTrainPerformConfigData(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount);
#if 0
/*各子系统公用数据配置结构体3-CPK*/ /*各子系统公用数据配置结构体3-CPK*/
UINT8 dfsInitSubSystemCommonConfigData_CPK(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); UINT8 dfsInitSubSystemCommonConfigData_CPK(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount);
/*各子系统公用数据配置结构体3-FAO*/ /*各子系统公用数据配置结构体3-FAO*/
UINT8 dfsInitSubSystemCommonConfigData_FAO(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); UINT8 dfsInitSubSystemCommonConfigData_FAO(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount);
#endif
/*各子系统公用数据配置结构体3-HLT,依据互联互通数据结构V12.0.0修改,modify by lmy 20180314*/ /*各子系统公用数据配置结构体3-HLT,依据互联互通数据结构V12.0.0修改,modify by lmy 20180314*/
UINT8 dfsInitSubSystemCommonConfigData_HLT(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); UINT8 dfsInitSubSystemCommonConfigData_HLT(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount);
#if 0
/*各子系统公用数据配置结构体3-DG,依据互联互通数据结构V12.0.0修改后,DG和HLT不再使用相同的初始化函数,故增加此函数,add by lmy 20180312*/ /*各子系统公用数据配置结构体3-DG,依据互联互通数据结构V12.0.0修改后,DG和HLT不再使用相同的初始化函数,故增加此函数,add by lmy 20180312*/
UINT8 dfsInitSubSystemCommonConfigData_DG(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); UINT8 dfsInitSubSystemCommonConfigData_DG(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount);
#endif
/*初始化[各子系统公用数据配置]-CC(要求有且仅有1行数据)*/ /*初始化[各子系统公用数据配置]-CC(要求有且仅有1行数据)*/
UINT8 dfsInitSubSystemCommonConfigData_CC(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount); UINT8 dfsInitSubSystemCommonConfigData_CC(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount);
/*车辆段配置数据结构体4-FAO ,互联互通与此版本一至*/ /*车辆段配置数据结构体4-FAO ,互联互通与此版本一至*/
@@ -61,16 +70,16 @@ static UINT8 initConfigCbtcInfoTaskTab(void);
/*初始化任务登记表*/ /*初始化任务登记表*/
static INIT_TASK_TAB_STRU g_struInitTaskTab[]= static INIT_TASK_TAB_STRU g_struInitTaskTab[]=
{ {
{DQU_QFUN_TRUE, CBTC_TRAIN_TYPE_CONFIG_ID, dfsInitTrainModelConfigData, 5,1,0}, {DQU_QFUN_TRUE, CBTC_TRAIN_TYPE_CONFIG_ID, dfsInitTrainModelConfigData, 5,1,0},
{DQU_QFUN_TRUE, CBTC_TRAIN_INFO_ID, dfsInitTrainPerformConfigData, 5,1,0}, {DQU_QFUN_TRUE, CBTC_TRAIN_INFO_ID, dfsInitTrainPerformConfigData, 5,1,0},
{DQU_QFUN_TRUE, CBTC_CONFIG_DATA_ID, dfsInitSubSystemCommonConfigData_CPK,5,1,0}, {DQU_QFUN_TRUE, CBTC_CONFIG_DATA_ID, NULL, 5,1,0},
{DQU_QFUN_TRUE, CBTC_CONFIG_DATA_ID, dfsInitSubSystemCommonConfigData_FAO,5,1,0}, {DQU_QFUN_TRUE, CBTC_CONFIG_DATA_ID, NULL, 5,1,0},
{DQU_QFUN_TRUE, CBTC_CONFIG_DATA_ID, dfsInitSubSystemCommonConfigData_HLT,5,1,0}, {DQU_QFUN_TRUE, CBTC_CONFIG_DATA_ID, dfsInitSubSystemCommonConfigData_HLT, 5,1,0},
{DQU_QFUN_TRUE, CBTC_CONFIG_DATA_ID, dfsInitSubSystemCommonConfigData_DG, 5,1,0}, {DQU_QFUN_TRUE, CBTC_CONFIG_DATA_ID, NULL, 5,1,0},
{DQU_QFUN_TRUE, CBTC_CONFIG_DEPOT_ID, dfsInitTrainDepotConfigData, 5,1,0}, {DQU_QFUN_TRUE, CBTC_CONFIG_DEPOT_ID, dfsInitTrainDepotConfigData, 5,1,0},
{DQU_QFUN_TRUE, CBTC_CONFIG_DATA_ID, dfsInitSubSystemCommonConfigData_CC, 5,1,0}, {DQU_QFUN_TRUE, CBTC_CONFIG_DATA_ID, dfsInitSubSystemCommonConfigData_CC, 5,1,0},
{DQU_QFUN_TRUE, CBTC_CONFIG_BOUNDARY_AXLE_ID,dfsInitBoundaryAxleConfigData, 5,1,0}, {DQU_QFUN_TRUE, CBTC_CONFIG_BOUNDARY_AXLE_ID,dfsInitBoundaryAxleConfigData, 5,1,0},
{DQU_QFUN_TRUE, CBTC_SPECIAL_EA_ID, dfsInitSpecialEaConfigData, 5,1,0}, {DQU_QFUN_TRUE, CBTC_SPECIAL_EA_ID, dfsInitSpecialEaConfigData, 5,1,0},
}; };
/*初始化任务登记表项目数量*/ /*初始化任务登记表项目数量*/
static const UINT16 MAX_INITTASK_COUNT=sizeof(g_struInitTaskTab)/sizeof(INIT_TASK_TAB_STRU); static const UINT16 MAX_INITTASK_COUNT=sizeof(g_struInitTaskTab)/sizeof(INIT_TASK_TAB_STRU);
@@ -114,7 +123,7 @@ static UINT8 initConfigCbtcInfoTaskTab(void)
UINT8 cbtcVersionType=0U; UINT8 cbtcVersionType=0U;
cbtcVersionType = GetCbtcSysType(); cbtcVersionType = GetCbtcSysType();
if (DQU_CBTC_CPK == cbtcVersionType)/*合库功能配置*/ if (DQU_CBTC_CPK == cbtcVersionType)/*合库功能配置 暂不使用*/
{ {
g_struInitTaskTab[3].bIsEffective=DQU_QFUN_FASLE;/*合库默认不执行,各子系统公用数据配置结构体3-FAO*/ g_struInitTaskTab[3].bIsEffective=DQU_QFUN_FASLE;/*合库默认不执行,各子系统公用数据配置结构体3-FAO*/
g_struInitTaskTab[4].bIsEffective=DQU_QFUN_FASLE;/*合库默认不执行,各子系统公用数据配置结构体3-HLT*/ g_struInitTaskTab[4].bIsEffective=DQU_QFUN_FASLE;/*合库默认不执行,各子系统公用数据配置结构体3-HLT*/
@@ -125,7 +134,7 @@ static UINT8 initConfigCbtcInfoTaskTab(void)
g_struInitTaskTab[9].bIsEffective = DQU_QFUN_FASLE;/*合库默认不执行,出入段线脱轨防护区域表*/ g_struInitTaskTab[9].bIsEffective = DQU_QFUN_FASLE;/*合库默认不执行,出入段线脱轨防护区域表*/
rtnValue = 1U; rtnValue = 1U;
} }
else if (DQU_CBTC_FAO == cbtcVersionType) /*FAO功能配置*/ else if (DQU_CBTC_FAO == cbtcVersionType) /*FAO功能配置 暂不使用*/
{ {
g_struInitTaskTab[2].bIsEffective=DQU_QFUN_FASLE;/*FAO默认不执行,各子系统公用数据配置结构体3-CPK*/ g_struInitTaskTab[2].bIsEffective=DQU_QFUN_FASLE;/*FAO默认不执行,各子系统公用数据配置结构体3-CPK*/
g_struInitTaskTab[4].bIsEffective=DQU_QFUN_FASLE;/*FAO默认不执行,各子系统公用数据配置结构体3-HLT*/ g_struInitTaskTab[4].bIsEffective=DQU_QFUN_FASLE;/*FAO默认不执行,各子系统公用数据配置结构体3-HLT*/
@@ -135,7 +144,7 @@ static UINT8 initConfigCbtcInfoTaskTab(void)
g_struInitTaskTab[9].bIsEffective = DQU_QFUN_FASLE;/*FAO默认不执行,出入段线脱轨防护区域表*/ g_struInitTaskTab[9].bIsEffective = DQU_QFUN_FASLE;/*FAO默认不执行,出入段线脱轨防护区域表*/
rtnValue = 1U; rtnValue = 1U;
} }
else if(DQU_CBTC_HLT == cbtcVersionType) /*互联互通功能配置*/ else if(DQU_CBTC_HLT == cbtcVersionType) /*互联互通功能配置 暂不使用*/
{ {
g_struInitTaskTab[2].bIsEffective=DQU_QFUN_FASLE;/*互联互通默认不执行,各子系统公用数据配置结构体3-CPK*/ g_struInitTaskTab[2].bIsEffective=DQU_QFUN_FASLE;/*互联互通默认不执行,各子系统公用数据配置结构体3-CPK*/
g_struInitTaskTab[3].bIsEffective=DQU_QFUN_FASLE;/*互联互通默认不执行,各子系统公用数据配置结构体3-FAO*/ g_struInitTaskTab[3].bIsEffective=DQU_QFUN_FASLE;/*互联互通默认不执行,各子系统公用数据配置结构体3-FAO*/
@@ -143,9 +152,9 @@ static UINT8 initConfigCbtcInfoTaskTab(void)
g_struInitTaskTab[7].bIsEffective = DQU_QFUN_FASLE;/*互联互通默认不执行,车辆段配置*/ g_struInitTaskTab[7].bIsEffective = DQU_QFUN_FASLE;/*互联互通默认不执行,车辆段配置*/
g_struInitTaskTab[8].bIsEffective = DQU_QFUN_FASLE;/*互联互通默认不执行,边界计轴区段配置*/ g_struInitTaskTab[8].bIsEffective = DQU_QFUN_FASLE;/*互联互通默认不执行,边界计轴区段配置*/
g_struInitTaskTab[9].bIsEffective = DQU_QFUN_FASLE;/*互联互通默认不执行,出入段线脱轨防护区域表*/ g_struInitTaskTab[9].bIsEffective = DQU_QFUN_FASLE;/*互联互通默认不执行,出入段线脱轨防护区域表*/
rtnValue = 1; rtnValue = 1u;
} }
else if(DQU_CBTC_DG == cbtcVersionType)/*单轨功能配置*/ else if(DQU_CBTC_DG == cbtcVersionType)/*单轨功能配置 暂不使用*/
{ {
g_struInitTaskTab[2].bIsEffective=DQU_QFUN_FASLE;/*DG默认不执行,各子系统公用数据配置结构体3-CPK*/ g_struInitTaskTab[2].bIsEffective=DQU_QFUN_FASLE;/*DG默认不执行,各子系统公用数据配置结构体3-CPK*/
g_struInitTaskTab[3].bIsEffective=DQU_QFUN_FASLE;/*DG默认不执行,各子系统公用数据配置结构体3-FAO*/ g_struInitTaskTab[3].bIsEffective=DQU_QFUN_FASLE;/*DG默认不执行,各子系统公用数据配置结构体3-FAO*/
@@ -157,11 +166,26 @@ static UINT8 initConfigCbtcInfoTaskTab(void)
} }
else if (DQU_CBTC_CC == cbtcVersionType)/*车车功能配置*/ else if (DQU_CBTC_CC == cbtcVersionType)/*车车功能配置*/
{ {
g_struInitTaskTab[2].bIsEffective = DQU_QFUN_FASLE;/*车车默认不执行,各子系统公用数据配置结构体3-CPK*/ if ((DATA_TYPE_28_BRANCH == gLocalPublicDataType) || (DATA_TYPE_23_BRANCH == gLocalPublicDataType))
g_struInitTaskTab[3].bIsEffective = DQU_QFUN_FASLE;/*车车默认不执行,各子系统公用数据配置结构体3-FAO*/ {
g_struInitTaskTab[4].bIsEffective = DQU_QFUN_FASLE;/*车车默认不执行,各子系统公用数据配置结构体3-HLT*/ g_struInitTaskTab[0].bIsEffective = DQU_QFUN_FASLE;/*28、23分支默认不执行,列车车型配置表*/
g_struInitTaskTab[5].bIsEffective = DQU_QFUN_FASLE;/*车车默认不执行,各子系统公用数据配置结构体3-DG*/ g_struInitTaskTab[1].bIsEffective = DQU_QFUN_FASLE;/*28、23分支默认不执行,列车性能参数配置表*/
rtnValue = 1U; g_struInitTaskTab[2].bIsEffective = DQU_QFUN_FASLE;/*28、23分支默认不执行,各子系统公用数据配置结构体3-CPK*/
g_struInitTaskTab[3].bIsEffective = DQU_QFUN_FASLE;/*28、23分支默认不执行,各子系统公用数据配置结构体3-FAO*/
g_struInitTaskTab[5].bIsEffective = DQU_QFUN_FASLE;/*28、23分支默认不执行,各子系统公用数据配置结构体3-DG*/
g_struInitTaskTab[6].bIsEffective = DQU_QFUN_FASLE;/*28、23分支默认不执行,车辆段配置信息*/
g_struInitTaskTab[7].bIsEffective = DQU_QFUN_FASLE;/*28、23分支默认不执行,各子系统公用数据配置结构体3-CC*/
g_struInitTaskTab[8].bIsEffective = DQU_QFUN_FASLE;/*28、23分支默认不执行,边界计轴区段配置*/
g_struInitTaskTab[9].bIsEffective = DQU_QFUN_FASLE;/*28、23分支默认不执行,出入段线脱轨防护区域表*/
}
else
{
g_struInitTaskTab[2].bIsEffective = DQU_QFUN_FASLE;/*主线默认不执行,各子系统公用数据配置结构体3-CPK*/
g_struInitTaskTab[3].bIsEffective = DQU_QFUN_FASLE;/*主线默认不执行,各子系统公用数据配置结构体3-FAO*/
g_struInitTaskTab[4].bIsEffective = DQU_QFUN_FASLE;/*主线默认不执行,各子系统公用数据配置结构体3-HLT*/
g_struInitTaskTab[5].bIsEffective = DQU_QFUN_FASLE;/*主线默认不执行,各子系统公用数据配置结构体3-DG*/
}
rtnValue = 1u;
} }
else /*未出现的配置版本值,可能未配置标志位*/ else /*未出现的配置版本值,可能未配置标志位*/
{ {
@@ -278,26 +302,46 @@ UINT8 dfsInitTrainModelConfigData(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowC
UINT32 i =0U; UINT32 i =0U;
static UINT32 rowDataLen = 0U; static UINT32 rowDataLen = 0U;
UINT8 *pData = pDataAddr; UINT8 *pData = pDataAddr;
UINT16 tempTrainName = 0u;
g_pCbtcConfigDataStru->TrainTypeConfigLen = rowCount; UINT16 TrainCount = 0u;
if (NULL != pDataAddr) if (NULL != pDataAddr)
{ {
if (rowCount > 0) if (0u < rowCount)
{ {
rowDataLen = dataSize / rowCount; rowDataLen = dataSize / rowCount;
for (i = 0; i<rowCount; i++) for (i = 0u; i<rowCount; i++)
{ {
pData = pDataAddr + rowDataLen*i; pData = pDataAddr + rowDataLen*i;
g_pCbtcConfigDataStru->cbtcTrainTypeConfig[i].TrainName = ShortFromChar(pData); tempTrainName = ShortFromChar(pData);
pData += 2; if (((0x3cu == CI_SYSTEM_TYPE_RCI) && (0x14u == (UINT8)(tempTrainName >> 8u)))
|| ((0x3du == CI_SYSTEM_TYPE_RCI) && (0x10u == (UINT8)(tempTrainName >> 8u))))
{
/*CI只初始化0x14类型的車,RC只初始化0x10类型的車*/
g_pCbtcConfigDataStru->cbtcTrainTypeConfig[i].TrainName = ShortFromChar(pData);
pData += 2u;
g_pCbtcConfigDataStru->cbtcTrainTypeConfig[i].TrainType = *pData; g_pCbtcConfigDataStru->cbtcTrainTypeConfig[i].TrainType = *pData;
pData += 1; pData += 1u;
TrainCount += 1u;
}
else
{
/*不初始化*/
pData += 3u;
}
} }
} }
rtnValue = 1; else
{
/*nothing*/
}
g_pCbtcConfigDataStru->TrainTypeConfigLen = (UINT32)TrainCount;
rtnValue = 1u;
} }
else else
{ {
@@ -318,38 +362,51 @@ UINT8 dfsInitTrainModelConfigData(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowC
UINT8 dfsInitTrainPerformConfigData(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount) UINT8 dfsInitTrainPerformConfigData(UINT8 *pDataAddr, UINT32 dataSize, UINT16 rowCount)
{ {
UINT8 rtnValue = 0U; UINT8 rtnValue = 0U;
UINT32 i =0U; UINT32 i = 0U;
UINT32 rowDataLen=0U; UINT32 rowDataLen = 0U;
UINT8 *pData = pDataAddr; UINT8 *pData = pDataAddr;
if (NULL != pDataAddr) if (NULL != pDataAddr)
{ {
g_pCbtcConfigDataStru->TrainInfoLen = rowCount; g_pCbtcConfigDataStru->TrainInfoLen = rowCount;
if (rowCount > 0) if (0u < rowCount)
{ {
rowDataLen = dataSize / rowCount; rowDataLen = dataSize / rowCount;
for (i = 0; i<rowCount; i++) for (i = 0u; i<rowCount; i++)
{ {
pData = pDataAddr + rowDataLen*i; pData = pDataAddr + rowDataLen*i;
/*列车车型*/ /*列车车型*/
g_pCbtcConfigDataStru->cbtcTrainInfo[i].TrainType = *pData; g_pCbtcConfigDataStru->cbtcTrainInfo[i].TrainType = *pData;
pData += 1; pData += 1u;
/*列车长度*/ /*列车长度*/
g_pCbtcConfigDataStru->cbtcTrainInfo[i].TrainLength = ShortFromChar(pData); g_pCbtcConfigDataStru->cbtcTrainInfo[i].TrainLength = ShortFromChar(pData);
pData += 2; pData += 2u;
/*列车最大牵引加速度*/ /*列车最大牵引加速度*/
g_pCbtcConfigDataStru->cbtcTrainInfo[i].TrainMaxTracAcc = *pData; g_pCbtcConfigDataStru->cbtcTrainInfo[i].TrainMaxTracAcc = *pData;
pData += 1; pData += 1u;
/*线路最大下坡坡度*/ /*线路最大下坡坡度*/
g_pCbtcConfigDataStru->cbtcTrainInfo[i].WorstGrade = ShortFromChar(pData); g_pCbtcConfigDataStru->cbtcTrainInfo[i].WorstGrade = ShortFromChar(pData);
pData += 2; pData += 2u;
/*紧急制动最高触发速度,跳过*/
pData += 2u;
/*站台追踪时,列车间隔距离*/
g_pCbtcConfigDataStru->cbtcTrainInfo[i].StationTrackDistance = ShortFromChar(pData); g_pCbtcConfigDataStru->cbtcTrainInfo[i].StationTrackDistance = ShortFromChar(pData);
pData += 2; pData += 2u;
/*对向行驶双车间隔最小安全距离,跳过*/
pData += 2u;
/*区间同向行驶双车间隔最小安全距离(cm),跳过*/
pData += 2u;
/*工程车信号系统适配,跳过*/
pData += 2u;
} }
} }
else
{
/*nothing*/
}
rtnValue = 1; rtnValue = 1;
@@ -361,7 +418,7 @@ UINT8 dfsInitTrainPerformConfigData(UINT8 *pDataAddr, UINT32 dataSize, UINT16 ro
} }
return rtnValue; return rtnValue;
} }
#if 0
/********************************************** /**********************************************
[]-CPK(1) []-CPK(1)
pDataAddr: pDataAddr:
@@ -565,6 +622,7 @@ UINT8 dfsInitSubSystemCommonConfigData_FAO(UINT8 *pDataAddr, UINT32 dataSize, UI
return rtnValue; return rtnValue;
} }
#endif
/********************************************** /**********************************************
[]-HLT(1) []-HLT(1)
@@ -817,7 +875,7 @@ UINT8 dfsInitSubSystemCommonConfigData_HLT(UINT8 *pDataAddr, UINT32 dataSize, UI
return rtnValue; return rtnValue;
} }
#if 0
/********************************************** /**********************************************
[]-DG(1) []-DG(1)
pDataAddr: pDataAddr:
@@ -932,7 +990,7 @@ UINT8 dfsInitSubSystemCommonConfigData_DG(UINT8 *pDataAddr, UINT32 dataSize, UIN
return rtnValue; return rtnValue;
} }
#endif
/********************************************** /**********************************************
[]-CC(1) []-CC(1)
pDataAddr: pDataAddr:
@@ -948,120 +1006,101 @@ UINT8 dfsInitSubSystemCommonConfigData_CC(UINT8 *pDataAddr, UINT32 dataSize, UIN
if ((NULL != pDataAddr) && (1U == rowCount)) if ((NULL != pDataAddr) && (1U == rowCount))
{ {
/*填充数据结构体*/ /*填充数据结构体*/
/*线路最高限速*/
g_pCbtcConfigDataStru->cbtcConfigData.MaxLineLimitSpeed = *pDataAddr;
g_pCbtcConfigDataStru->cbtcConfigData.MaxLineLimitSpeed = (UINT16)(27.77778*g_pCbtcConfigDataStru->cbtcConfigData.MaxLineLimitSpeed + 0.5);
pDataAddr += 1;
/*临时限速最高限速*/ /*临时限速最高限速*/
g_pCbtcConfigDataStru->cbtcConfigData.MaxTsrSpeed = *pDataAddr; g_pCbtcConfigDataStru->cbtcConfigData.MaxTsrSpeed = *pDataAddr;
pDataAddr += 1; pDataAddr += 1u;
/*NTP校时时区差*/
g_pCbtcConfigDataStru->cbtcConfigData.TimeZoneDifference = *pDataAddr;
pDataAddr += 1;
#if 0
/*30.13 数据结构删除*/
/*区间同向行驶双车间隔最小安全距离(cm))*/
g_pCbtcConfigDataStru->cbtcConfigData.MABackDistance = ShortFromChar(pDataAddr);
pDataAddr += 2;
#endif
/*一次设置临时限速的最大个数*/ /*一次设置临时限速的最大个数*/
g_pCbtcConfigDataStru->cbtcConfigData.MaxTsrNum = ShortFromChar(pDataAddr); g_pCbtcConfigDataStru->cbtcConfigData.MaxTsrNum = ShortFromChar(pDataAddr);
pDataAddr += 2; pDataAddr += 2u;
/*一个临时限速报文中包含的最大逻辑区段数量*/ /*一个临时限速报文中包含的最大逻辑区段数量*/
g_pCbtcConfigDataStru->cbtcConfigData.MaxSectionOfTsr = ShortFromChar(pDataAddr); g_pCbtcConfigDataStru->cbtcConfigData.MaxSectionOfTsr = ShortFromChar(pDataAddr);
pDataAddr += 2; pDataAddr += 2u;
#if 0
/*IVOC-IVOC信故障判断时间(ms*/ /*CI-CI通信中断时间 (单位MS)*/
g_pCbtcConfigDataStru->cbtcConfigData.IvocIvocCommunicationErrorTime = LongFromChar(pDataAddr); g_pCbtcConfigDataStru->cbtcConfigData.CICICommunicationErrorTime = LongFromChar(pDataAddr);
pDataAddr += 4; pDataAddr += 4u;
#endif
/*IVOC-TIOC通信故障判断时间(ms)*/ /*CI-VOBC通信故障判断时间(ms)*/
g_pCbtcConfigDataStru->cbtcConfigData.CiVobcCommunicationErrorTime = LongFromChar(pDataAddr); g_pCbtcConfigDataStru->cbtcConfigData.CiVobcCommunicationErrorTime = LongFromChar(pDataAddr);
pDataAddr += 4; pDataAddr += 4u;
#if 0
/*VOBC-ITS通信故障判断时间(ms)*/
g_pCbtcConfigDataStru->cbtcConfigData.VobcAtsCommunicationErrorTime = LongFromChar(pDataAddr);
pDataAddr += 4;
/*TMC-ITS通信故障判断时间ms*/ /*CI-ZC通信故障判断时间(ms)*/
g_pCbtcConfigDataStru->cbtcConfigData.TmcItsCommunicationErrorTime = LongFromChar(pDataAddr); g_pCbtcConfigDataStru->cbtcConfigData.CiZcCommunicationErrorTime = LongFromChar(pDataAddr);
pDataAddr += 4; pDataAddr += 4u;
#endif
/*TMC-OC通信故障判断时间(ms)*/
g_pCbtcConfigDataStru->cbtcConfigData.TmcOcCommunicationErrorTime = LongFromChar(pDataAddr);
pDataAddr += 4;
/*ITS-OC通信故障判断时间ms*/ /*CI-PSD通信故障判断时间(ms)*/
g_pCbtcConfigDataStru->cbtcConfigData.ItsOcCommunicationErrorTime = LongFromChar(pDataAddr); g_pCbtcConfigDataStru->cbtcConfigData.CiPsdCommunicationErrorTime = LongFromChar(pDataAddr);
pDataAddr += 4; pDataAddr += 4u;
/*OC-PSD通信故障判断时间(ms*/
g_pCbtcConfigDataStru->cbtcConfigData.OcPsdCommunicationErrorTime = LongFromChar(pDataAddr);
pDataAddr += 4;
#if 0
/*IVOC-TSL通信故障判断时间(ms*/
g_pCbtcConfigDataStru->cbtcConfigData.IvocTslCommunicationErrorTime = LongFromChar(pDataAddr);
pDataAddr += 4;
#endif
/*OC-TSL通信故障判断时间(ms*/
g_pCbtcConfigDataStru->cbtcConfigData.OcTslCommunicationErrorTime = LongFromChar(pDataAddr);
pDataAddr += 4;
/*满足精准停车条件的MA延伸长度*/
g_pCbtcConfigDataStru->cbtcConfigData.MALengthForATOParking = ShortFromChar(pDataAddr);
pDataAddr += 2;
/*本线系统定义逻辑方向与上下行方向的关系*/ /*本线系统定义逻辑方向与上下行方向的关系*/
g_pCbtcConfigDataStru->cbtcConfigData.LinkLogicDirUpAndDown = *pDataAddr; g_pCbtcConfigDataStru->cbtcConfigData.LinkLogicDirUpAndDown = *pDataAddr;
pDataAddr += 1; pDataAddr += 1u;
#if 0 /*车地通信接口类型,暂不使用,跳过该接口*/
/*数据结构30.13 删除*/ pDataAddr += 1u;
/*对向行驶双车间隔最小安全距离*/
g_pCbtcConfigDataStru->cbtcConfigData.OppositeTrackDistance = ShortFromChar(pDataAddr);
pDataAddr += 2;
/*站台追踪时,列车间隔距离*/ /*正线是否动态测试*/
g_pCbtcConfigDataStru->cbtcConfigData.StationTrackDistance = ShortFromChar(pDataAddr); g_pCbtcConfigDataStru->cbtcConfigData.chZXDynamicTestSwitch = *pDataAddr;
pDataAddr += 2; pDataAddr += 1u;
#endif /*ZC-CI接口协议版本号*/
g_pCbtcConfigDataStru->cbtcConfigData.VersionOfZCToCI = *pDataAddr;
pDataAddr += 1u;
/*VOBC-CI接口协议版本号*/
g_pCbtcConfigDataStru->cbtcConfigData.VersionOfVOBCToCI = *pDataAddr;
pDataAddr += 1u;
/*PSC-CI通信故障判断时间(ms)*/
g_pCbtcConfigDataStru->cbtcConfigData.CommFaultTimeOfPSC_CI = LongFromChar(pDataAddr);
pDataAddr += 4u;
/*VOBC-CI后备通信故障判断时间(ms)*/
g_pCbtcConfigDataStru->cbtcConfigData.dwVobcCiackUpCommErrorTime = LongFromChar(pDataAddr);
pDataAddr += 4u;
/*CI/DSU与计轴系统校验的协议版本号*/
g_pCbtcConfigDataStru->cbtcConfigData.ProtocolVersionOfAxisToCI = ShortFromChar(pDataAddr);
pDataAddr += 2u;
/*保护区段锁闭方式*/
g_pCbtcConfigDataStru->cbtcConfigData.chOverlapLockType = *pDataAddr;
pDataAddr += 1u;
/*场段进路占用检查*/
g_pCbtcConfigDataStru->cbtcConfigData.chOccuCheckinCD = *pDataAddr;
pDataAddr += 1u;
/*线路最小可能车长*/
g_pCbtcConfigDataStru->cbtcConfigData.dwLineMinTrainLength = (UINT32)ShortFromChar(pDataAddr);
pDataAddr += 2u;
/*全线免筛功能开关*/
g_pCbtcConfigDataStru->cbtcConfigData.chWLSFunSwitch = *pDataAddr;
pDataAddr += 1u;
/*TMC-RC通信故障判断时间(ms)*/
g_pCbtcConfigDataStru->cbtcConfigData.TmcOcCommunicationErrorTime = LongFromChar(pDataAddr);
pDataAddr += 4u;
/*IVOC-RC通信故障判断时间(ms*/
g_pCbtcConfigDataStru->cbtcConfigData.IvocOcCommunicationErrorTime = LongFromChar(pDataAddr);
pDataAddr += 4u;
/*RC-TSL通信故障判断时间(ms*/
g_pCbtcConfigDataStru->cbtcConfigData.OcTslCommunicationErrorTime = LongFromChar(pDataAddr);
pDataAddr += 4u;
/*线路最差情况下紧急制动距离(单位m)*/ /*线路最差情况下紧急制动距离(单位m)*/
g_pCbtcConfigDataStru->cbtcConfigData.MaxMALength = LongFromChar(pDataAddr); g_pCbtcConfigDataStru->cbtcConfigData.MaxMALength = LongFromChar(pDataAddr);
pDataAddr += 4; pDataAddr += 4u;
/*TIOC 与 TIOC通信中断时间 (单位MS)*/ /*动态测试功能开关*/
g_pCbtcConfigDataStru->cbtcConfigData.CICICommunicationErrorTime = LongFromChar(pDataAddr);
pDataAddr += 4;
/*线路最小车长*/
g_pCbtcConfigDataStru->cbtcConfigData.dwLineMinTrainLength = LongFromChar(pDataAddr);
pDataAddr += 4;
/*正线是否支持动态测试开关*/
g_pCbtcConfigDataStru->cbtcConfigData.chZXDynamicTestSwitch = *pDataAddr;
pDataAddr += 1;
/*动态测试开关*/
g_pCbtcConfigDataStru->cbtcConfigData.chDynamicTestSwitch = *pDataAddr; g_pCbtcConfigDataStru->cbtcConfigData.chDynamicTestSwitch = *pDataAddr;
pDataAddr += 1; pDataAddr += 1u;
/*全线免筛开关*/
g_pCbtcConfigDataStru->cbtcConfigData.chWLSFunSwitch = *pDataAddr;
pDataAddr += 1;
/*区间疏散前查距离*/
g_pCbtcConfigDataStru->cbtcConfigData.dwEaFrontDis = LongFromChar(pDataAddr);
pDataAddr += 4;
/*区间疏散后查距离*/
g_pCbtcConfigDataStru->cbtcConfigData.dwEaBehindDis = LongFromChar(pDataAddr);
pDataAddr += 4;
pDataAddr += 1U; /*跳过远程RM功能开关*/ pDataAddr += 1U; /*跳过远程RM功能开关*/
@@ -1072,23 +1111,22 @@ UINT8 dfsInitSubSystemCommonConfigData_CC(UINT8 *pDataAddr, UINT32 dataSize, UIN
g_pCbtcConfigDataStru->cbtcConfigData.dwVobcCiackUpCommErrorTime = LongFromChar(pDataAddr); /*RC与IVOC后备通道通信故障判断时间*/ g_pCbtcConfigDataStru->cbtcConfigData.dwVobcCiackUpCommErrorTime = LongFromChar(pDataAddr); /*RC与IVOC后备通道通信故障判断时间*/
pDataAddr += 4U; pDataAddr += 4U;
g_pCbtcConfigDataStru->cbtcConfigData.ProtocolVersionOfAxisToCI = ShortFromChar(pDataAddr); /*CI与计轴系统校验的协议版本号,add by lq 2023.11.16*/
pDataAddr += 2U;
g_pCbtcConfigDataStru->cbtcConfigData.cHitSoftWallSwitch = *pDataAddr; /*撞软墙功能开关*/ g_pCbtcConfigDataStru->cbtcConfigData.cHitSoftWallSwitch = *pDataAddr; /*撞软墙功能开关*/
pDataAddr += 1U; pDataAddr += 1U;
g_pCbtcConfigDataStru->cbtcConfigData.chOverlapLockType= *pDataAddr; /*保护区段锁闭方式*/
pDataAddr += 1U;
g_pCbtcConfigDataStru->cbtcConfigData.chOccuCheckinCD = *pDataAddr; /*场段进路占用检查*/
pDataAddr += 1U;
g_pCbtcConfigDataStru->cbtcConfigData.chNoCGFollowUtSwitch = *pDataAddr; /*无C轨站型B轨有UT车是可追踪功能开关*/ g_pCbtcConfigDataStru->cbtcConfigData.chNoCGFollowUtSwitch = *pDataAddr; /*无C轨站型B轨有UT车是可追踪功能开关*/
pDataAddr += 1U; pDataAddr += 1U;
rtnValue = 1; /*区间疏散前查距离*/
g_pCbtcConfigDataStru->cbtcConfigData.dwEaFrontDis = LongFromChar(pDataAddr);
pDataAddr += 4u;
/*区间疏散后查距离*/
g_pCbtcConfigDataStru->cbtcConfigData.dwEaBehindDis = LongFromChar(pDataAddr);
pDataAddr += 4u;
rtnValue = 1u;
} }
return rtnValue; return rtnValue;
@@ -48,48 +48,41 @@ extern "C" {
/*各子系统公用数据配置结构体*/ /*各子系统公用数据配置结构体*/
typedef struct { typedef struct {
UINT16 MaxLineLimitSpeed;/*线路最高限速,此处数据库中存放的是UINT8的km/h数据,需要在这里转换成cmps单位的数据*/ UINT8 MaxTsrSpeed; /*临时限速最高限速*/
UINT8 MaxTsrSpeed;/*临时限速最高限速*/ UINT16 MaxTsrNum; /*一次设置临时限速的最大个数*/
UINT8 TimeZoneDifference;/*NTP校时时区差.格林威治时间与本地时间的时区差,单位:时区,应用使用时应乘以3600转换为秒。*/ UINT16 MaxSectionOfTsr; /*一个临时限速报文中包含的最大逻辑区段数量*/
UINT16 MABackDistance;/*安全防护距离.考虑到最不利情况情况下(最大潜在退行距离和线路最大坡度等)移动授权考虑的安全防护距离*/ UINT32 CICICommunicationErrorTime; /*CI-CI通信故障判断时间(ms)*/
UINT16 MaxTsrNum;/*一次设置临时限速的最大个数*/ UINT32 CiVobcCommunicationErrorTime; /*CI-VOBC通信故障判断时间*/
UINT16 MaxSectionOfTsr;/*一个临时限速报文中包含的最大逻辑区段数量*/ UINT32 CiZcCommunicationErrorTime; /*CI-ZC通信故障判断时间*/
UINT32 VobcZcCommunicationErrorTime;/*VOBCZC通信故障判断时间*/ UINT32 CiPsdCommunicationErrorTime; /*CI-PSD通信故障判断时间*/
UINT32 DsuZcCommunicationErrorTime;/*DSUZC通信故障判断时间*/ UINT8 LinkLogicDirUpAndDown; /*系统定义逻辑方向与上下行方向的关系,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 ZcZcCommunicationErrorTime;/*ZCZC通信故障判断时间*/ UINT8 chZXDynamicTestSwitch; /*正线是否支持动态测试 配置中 aa关闭 55打开*/
UINT32 ZcCiCommunicationErrorTime;/*ZCCI通信故障判断时间*/ UINT8 VersionOfZCToCI; /*ZC-CI接口协议版本号,add by sds 2019-1-21*/
UINT32 DsuAtsCommunicationErrorTime;/*DSUATS通信故障判断时间*/ UINT8 VersionOfVOBCToCI; /*VOBC-CI接口协议版本号,add by sds 2019-1-21*/
UINT32 ZcAtsCommunicationErrorTime;/*ZCATS通信故障判断时间*/ UINT32 CommFaultTimeOfPSC_CI; /*PSC-CI通信故障判断时间(ms) 互联互通数据结构V20.0.0*/
UINT32 VobcCiCommunicationErrorTime;/*VOBCCI通信故障判断时间*/ UINT32 dwVobcCiackUpCommErrorTime; /*IVOC-RC或VOBC-CI后备通道通信故障判断时间(ms)----适配车车和510项目*/
UINT32 VobcAtsCommunicationErrorTime;/*VOBCATS通信故障判断时间*/ UINT16 ProtocolVersionOfAxisToCI; /*Axis-CI接口协议版本号,add by lq 2023.11.16*/
UINT16 MaxOverlapLength;/*系统定义最大保护区段长度(cm*/ UINT8 chOverlapLockType; /*保护区段锁闭方式 0x01 ATS锁闭 0x02 CI锁闭*/
UINT32 CICICommunicationErrorTime; /*CI-CI通信故障判断时间(ms)*/ UINT8 chOccuCheckinCD; /*场段进路占用检查 0x55检查 0xaa不检查*/
UINT32 CiVobcCommunicationErrorTime;/*CI-VOBC通信故障判断时间*/ UINT32 dwLineMinTrainLength; /*系统配置数据,线路最小车长*/
UINT32 CiZcCommunicationErrorTime; /*CI-ZC通信故障判断时间*/ UINT8 chWLSFunSwitch; /* 是否支持全线免筛功能,0x55 不支持 0xAA支持 */
UINT32 CiPsdCommunicationErrorTime; /*CI-ZC通信故障判断时间*/ UINT32 TmcOcCommunicationErrorTime; /*TMC-OC通信故障判断时间(ms),add by yt2022年3月1日,适配车车系统配置数据*/
UINT32 IvocIvocCommunicationErrorTime;/*IVOC-IVOC信故障判断时间ms,add by yt,2022年3月1日,适配车车系统配置数据*/ UINT32 IvocOcCommunicationErrorTime; /*IVOC-OC信故障判断时间(ms),add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 IvocOcCommunicationErrorTime;/*IVOC-OC通信故障判断时间(ms),add by yt,2022年3月1日,适配车车系统配置数据*/ UINT32 OcTslCommunicationErrorTime; /*OC-TSL通信故障判断时间ms,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 MaxMALength; /*线路最差情况下紧急制动距离(单位m),add by yt,2022年3月1日,适配车车系统配置数据*/
UINT8 chDynamicTestSwitch; /*是否支持动态测试开关 配置中 aa关闭 55打开*/
UINT8 cAwakeCheckSpksSwitch; /*唤醒过程中检查SPKS状态开关,0xaa检查,0x55不检查*/
UINT32 dwEaFrontDis; /*区间疏散防护区域前查距离*/
UINT32 dwEaBehindDis; /*区间疏散防护区域后查距离*/
UINT8 cHitSoftWallSwitch; /*撞软墙功能开关 0x55开关打开 0xaa开关关闭*/
UINT8 chNoCGFollowUtSwitch; /*无C轨站型B轨有UT车是可追踪功能开关 aa打开 55关闭*/
#if 0
UINT32 TmcItsCommunicationErrorTime;/*TMC-ITS通信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/ UINT32 TmcItsCommunicationErrorTime;/*TMC-ITS通信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 TmcOcCommunicationErrorTime;/*TMC-OC通信故障判断时间(ms),add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 ItsOcCommunicationErrorTime;/*ITS-OC通信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/ UINT32 ItsOcCommunicationErrorTime;/*ITS-OC通信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 OcPsdCommunicationErrorTime;/*OC-PSD通信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/ UINT32 OcPsdCommunicationErrorTime;/*OC-PSD通信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 IvocTslCommunicationErrorTime;/*IVOC-TSL通信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/ UINT32 IvocTslCommunicationErrorTime;/*IVOC-TSL通信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 OcTslCommunicationErrorTime;/*OC-TSL通信故障判断时间(ms,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT8 LinkLogicDirUpAndDown; /*系统定义逻辑方向与上下行方向的关系,add by yt,2022年3月1日,适配车车系统配置数据*/
UINT16 OppositeTrackDistance; /*对向行驶双车间隔最小安全距离(cm),add by yt,2022年3月1日,适配车车系统配置数据*/ UINT16 OppositeTrackDistance; /*对向行驶双车间隔最小安全距离(cm),add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 MaxMALength; /*线路最差情况下紧急制动距离(单位m),add by yt,2022年3月1日,适配车车系统配置数据*/
UINT32 dwLineMinTrainLength; /*系统配置数据,线路最小车长*/
UINT8 chZXDynamicTestSwitch; /*正线是否支持动态测试 配置中 aa关闭 55打开*/
UINT8 chDynamicTestSwitch; /*是否支持动态测试开关 配置中 aa关闭 55打开*/
UINT8 chWLSFunSwitch; /* 是否支持全线免筛功能,0x55 不支持 0xAA支持 */
UINT32 dwEaFrontDis; /*区间疏散防护区域前查距离*/
UINT32 dwEaBehindDis; /*区间疏散防护区域后查距离*/
UINT8 cAwakeCheckSpksSwitch; /*唤醒过程中检查SPKS状态开关,0xaa检查,0x55不检查*/
UINT32 dwVobcCiackUpCommErrorTime; /*IVOC-RC或VOBC-CI后备通道通信故障判断时间(ms)----适配车车和510项目*/
UINT8 cHitSoftWallSwitch; /*撞软墙功能开关 0x55开关打开 0xaa开关关闭*/
UINT8 chOverlapLockType; /*保护区段锁闭方式 0x01 ATS锁闭 0x02 CI锁闭*/
UINT8 chOccuCheckinCD; /*场段进路占用检查 0x55检查 0xaa不检查*/
UINT8 chNoCGFollowUtSwitch; /*无C轨站型B轨有UT车是可追踪功能开关 aa打开 55关闭*/
/*为解决ats显示上下行问题新增一个字段---严广学2012-12-17*/ /*为解决ats显示上下行问题新增一个字段---严广学2012-12-17*/
/*UINT8 LinkLogicDirUpAndDown;*/ /*link逻辑方向上下行*/ /*UINT8 LinkLogicDirUpAndDown;*/ /*link逻辑方向上下行*/
@@ -111,12 +104,10 @@ extern "C" {
UINT8 VersionOfZCToCI; /*ZC-CI接口协议版本号,add by sds 2019-1-21*/ UINT8 VersionOfZCToCI; /*ZC-CI接口协议版本号,add by sds 2019-1-21*/
UINT8 VersionOfZCToATS; /*ZC-ATS接口协议版本号,add by sds 2019-1-21*/ UINT8 VersionOfZCToATS; /*ZC-ATS接口协议版本号,add by sds 2019-1-21*/
UINT8 VersionOfVOBCToATS; /*VOBC-ATS接口协议版本号,add by sds 2019-1-21*/ UINT8 VersionOfVOBCToATS; /*VOBC-ATS接口协议版本号,add by sds 2019-1-21*/
UINT8 VersionOfVOBCToCI; /*VOBC-CI接口协议版本号,add by sds 2019-1-21*/
UINT16 FactoryCodeOfCRSC; /*互联互通厂家代码中"通号"所属编号,add by sds 2020-02-12*/ UINT16 FactoryCodeOfCRSC; /*互联互通厂家代码中"通号"所属编号,add by sds 2020-02-12*/
UINT16 FactoryCodeOfTCT; /*互联互通厂家代码中"交控科技"所属编号”类型,add by sds 2020-02-12*/ UINT16 FactoryCodeOfTCT; /*互联互通厂家代码中"交控科技"所属编号”类型,add by sds 2020-02-12*/
UINT16 FactoryCodeOfTK; /*互联互通厂家代码中"铁科"所属编号”类型,add by sds 2020-02-12*/ UINT16 FactoryCodeOfTK; /*互联互通厂家代码中"铁科"所属编号”类型,add by sds 2020-02-12*/
UINT16 FactoryCodeOfZH; /*互联互通厂家代码中"众合"所属编号,add by sds 2020-02-12*/ UINT16 FactoryCodeOfZH; /*互联互通厂家代码中"众合"所属编号,add by sds 2020-02-12*/
UINT32 CommFaultTimeOfPSC_CI; /*PSC-CI通信故障判断时间(ms) 互联互通数据结构V20.0.0*/
UINT32 CommFaultTimeOfPSC_VOBC; /*PSC-VOBC通信故障判断时间(ms) 互联互通数据结构V20.0.0*/ UINT32 CommFaultTimeOfPSC_VOBC; /*PSC-VOBC通信故障判断时间(ms) 互联互通数据结构V20.0.0*/
UINT32 CommFaultTimeOfPSC_IM; /*PSC-IM通信故障判断时间(ms) 互联互通数据结构V20.0.0*/ UINT32 CommFaultTimeOfPSC_IM; /*PSC-IM通信故障判断时间(ms) 互联互通数据结构V20.0.0*/
UINT8 CommProtocolTypeOfVOBC_PSC; /*VOBC-PSC接口协议类型 互联互通数据结构V20.0.0*/ UINT8 CommProtocolTypeOfVOBC_PSC; /*VOBC-PSC接口协议类型 互联互通数据结构V20.0.0*/
@@ -125,7 +116,7 @@ extern "C" {
UINT8 CommProtocolTypeOfVOBC_CI; /*VOBC与CI通信时使用接口协议类型 互联互通数据结构V20.0.0*/ UINT8 CommProtocolTypeOfVOBC_CI; /*VOBC与CI通信时使用接口协议类型 互联互通数据结构V20.0.0*/
UINT8 CommProtocolTypeOfVOBC_ZC; /*VOBC与ZC通信时使用接口协议类型 互联互通数据结构V20.0.0*/ UINT8 CommProtocolTypeOfVOBC_ZC; /*VOBC与ZC通信时使用接口协议类型 互联互通数据结构V20.0.0*/
UINT8 CommProtocolTypeOfVOBC_ATS; /*VOBC与ATS通信时使用接口协议类型 互联互通数据结构V20.0.0*/ UINT8 CommProtocolTypeOfVOBC_ATS; /*VOBC与ATS通信时使用接口协议类型 互联互通数据结构V20.0.0*/
UINT16 ProtocolVersionOfAxisToCI; /*Axis-CI接口协议版本号,add by lq 2023.11.16*/ #endif
} CBTC_CONFIG_DATA_STRU; } CBTC_CONFIG_DATA_STRU;
@@ -27,7 +27,15 @@ void SetCbtcSysType(UINT8 sysType)
{ {
if(0xff == g_CbtcVersionType) if(0xff == g_CbtcVersionType)
{ {
g_CbtcVersionType=sysType; if (DQU_CBTC_HLT == sysType)
{
/*HLT使用CC初始化。wyd 20260331*/
g_CbtcVersionType = DQU_CBTC_CC;
}
else
{
g_CbtcVersionType = sysType;
}
} }
else else
{ {
@@ -250,9 +250,9 @@ static UINT8 initConfigEmapTaskTab()
g_struInitTaskTab[loopIndex].bIsEffective = DQU_QFUN_FASLE;/*为补全数据表占位的空表60~80*/ g_struInitTaskTab[loopIndex].bIsEffective = DQU_QFUN_FASLE;/*为补全数据表占位的空表60~80*/
} }
g_struInitTaskTab[EMAP_NOP_60].bIsEffective = DQU_QFUN_FASLE;/*为补全数据表占位的空表54*/ g_struInitTaskTab[EMAP_NOP_60].bIsEffective = DQU_QFUN_FASLE;/*为补全数据表占位的空表54*/
if (0x55 != gLocalPublicDataType)/*28.0.0.14*/ if (0x01 != gLocalPublicDataType)/*28.0.0.x或23.2..1.X*/
{ {
g_struInitTaskTab[EMAP_RC_ID].bIsEffective = DQU_QFUN_FASLE;/*28.0.0.14不具备电子地图RC表*/ g_struInitTaskTab[EMAP_RC_ID].bIsEffective = DQU_QFUN_FASLE;/*28.0.0.x或23.2.1.X不具备电子地图RC表*/
} }
else else
{ {

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