3 Commits

Author SHA1 Message Date
lh fa00c19d00 调试日志修改 2026-05-25 18:21:54 +08:00
lh 9acbe6ea13 应用增加日志调试,数据匹配 2026-05-25 17:41:40 +08:00
lh 1099e62e73 调试第一次提交,数据不匹配,初始化没过 2026-05-25 16:26:55 +08:00
48 changed files with 4357 additions and 1879 deletions
-814
View File
@@ -1,814 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="com.qnx.qcc.toolChain.1898895178">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.toolChain.1898895178" moduleId="org.eclipse.cdt.core.settings" name="aarch64le-debug">
<externalSettings/>
<extensions>
<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.qnx.qcc.toolChain.1898895178" name="aarch64le-debug" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.qnx.qcc.toolChain.1898895178.439655998" name="/" resourcePath="">
<toolChain id="com.qnx.qcc.toolChain.203259723" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
<option id="com.qnx.qcc.option.os.1556422156" name="Target OS:" superClass="com.qnx.qcc.option.os"/>
<option id="com.qnx.qcc.option.cpu.1968879177" name="Target CPU:" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.aarch64le" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.1876022724" name="Compiler:" superClass="com.qnx.qcc.option.compiler"/>
<option id="com.qnx.qcc.option.runtime.1127686504" name="C++ Runtime:" superClass="com.qnx.qcc.option.runtime"/>
<option id="com.qnx.qcc.option.buildtype.693527478" name="Build Type:" superClass="com.qnx.qcc.option.buildtype"/>
<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.1352316322" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
<builder arguments="-s" command="make" id="cdt.managedbuild.target.gnu.builder.base.188590944" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="com.qnx.qcc.tool.compiler.591289016" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
<option id="com.qnx.qcc.option.compiler.optlevel.441788077" name="Optimization Level" superClass="com.qnx.qcc.option.compiler.optlevel" useByScannerDiscovery="false" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.includePath.385459622" name="Include Directories (-I)" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.compiler.115407820" superClass="com.qnx.qcc.inputType.compiler"/>
</tool>
<tool id="com.qnx.qcc.tool.assembler.1325284031" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
<option id="com.qnx.qcc.option.assembler.includePath.2085985240" name="Include Directories (-I)" superClass="com.qnx.qcc.option.assembler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/AxisSort}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.assembler.340189104" superClass="com.qnx.qcc.inputType.assembler"/>
</tool>
<tool id="com.qnx.qcc.tool.linker.2069067091" name="QCC Linker" superClass="com.qnx.qcc.tool.linker"/>
<tool id="com.qnx.qcc.tool.archiver.518642259" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/src"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/public"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.qnx.qcc.toolChain.691157941">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.toolChain.691157941" moduleId="org.eclipse.cdt.core.settings" name="aarch64le-release">
<externalSettings/>
<extensions>
<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.qnx.qcc.toolChain.691157941" name="aarch64le-release" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.qnx.qcc.toolChain.691157941.1401546998" name="/" resourcePath="">
<toolChain id="com.qnx.qcc.toolChain.1429422764" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
<option id="com.qnx.qcc.option.os.151761149" name="Target OS:" superClass="com.qnx.qcc.option.os"/>
<option id="com.qnx.qcc.option.cpu.338787402" name="Target CPU:" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.aarch64le" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.1463811141" name="Compiler:" superClass="com.qnx.qcc.option.compiler"/>
<option id="com.qnx.qcc.option.runtime.1011457115" name="C++ Runtime:" superClass="com.qnx.qcc.option.runtime"/>
<option id="com.qnx.qcc.option.buildtype.1060491868" name="Build Type:" superClass="com.qnx.qcc.option.buildtype" value="release" valueType="enumerated"/>
<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.1027291205" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
<builder id="cdt.managedbuild.target.gnu.builder.base.172580598" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="com.qnx.qcc.tool.compiler.414331704" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
<option id="com.qnx.qcc.option.compiler.optlevel.930754063" name="Optimization Level" superClass="com.qnx.qcc.option.compiler.optlevel" useByScannerDiscovery="false" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.includePath.268084290" name="Include Directories (-I)" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.compiler.984303874" superClass="com.qnx.qcc.inputType.compiler"/>
</tool>
<tool id="com.qnx.qcc.tool.assembler.1712037338" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
<option id="com.qnx.qcc.option.assembler.includePath.1880381899" name="Include Directories (-I)" superClass="com.qnx.qcc.option.assembler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.assembler.1387983109" superClass="com.qnx.qcc.inputType.assembler"/>
</tool>
<tool id="com.qnx.qcc.tool.linker.443276640" name="QCC Linker" superClass="com.qnx.qcc.tool.linker"/>
<tool id="com.qnx.qcc.tool.archiver.1946208989" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/src"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/public"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.qnx.qcc.toolChain.1923716135">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.toolChain.1923716135" moduleId="org.eclipse.cdt.core.settings" name="aarch64le-coverage">
<externalSettings/>
<extensions>
<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.qnx.qcc.toolChain.1923716135" name="aarch64le-coverage" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.qnx.qcc.toolChain.1923716135.232544716" name="/" resourcePath="">
<toolChain id="com.qnx.qcc.toolChain.860429857" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
<option id="com.qnx.qcc.option.os.2053077575" name="Target OS:" superClass="com.qnx.qcc.option.os"/>
<option id="com.qnx.qcc.option.cpu.297249280" name="Target CPU:" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.aarch64le" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.1799269231" name="Compiler:" superClass="com.qnx.qcc.option.compiler"/>
<option id="com.qnx.qcc.option.runtime.2024866919" name="C++ Runtime:" superClass="com.qnx.qcc.option.runtime"/>
<option id="com.qnx.qcc.option.buildtype.441290721" name="Build Type:" superClass="com.qnx.qcc.option.buildtype" value="coverage" valueType="enumerated"/>
<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.167631540" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
<builder id="cdt.managedbuild.target.gnu.builder.base.448487023" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="com.qnx.qcc.tool.compiler.1573895293" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
<option id="com.qnx.qcc.option.compiler.optlevel.1953871695" name="Optimization Level" superClass="com.qnx.qcc.option.compiler.optlevel" useByScannerDiscovery="false" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.includePath.669934293" name="Include Directories (-I)" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.compiler.1705241935" superClass="com.qnx.qcc.inputType.compiler"/>
</tool>
<tool id="com.qnx.qcc.tool.assembler.1830913594" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
<option id="com.qnx.qcc.option.assembler.includePath.704535072" name="Include Directories (-I)" superClass="com.qnx.qcc.option.assembler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.assembler.2037769893" superClass="com.qnx.qcc.inputType.assembler"/>
</tool>
<tool id="com.qnx.qcc.tool.linker.1197282124" name="QCC Linker" superClass="com.qnx.qcc.tool.linker"/>
<tool id="com.qnx.qcc.tool.archiver.2045259756" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/src"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/public"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.qnx.qcc.toolChain.1088691470">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.toolChain.1088691470" moduleId="org.eclipse.cdt.core.settings" name="aarch64le-profile">
<externalSettings/>
<extensions>
<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.qnx.qcc.toolChain.1088691470" name="aarch64le-profile" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.qnx.qcc.toolChain.1088691470.1633521277" name="/" resourcePath="">
<toolChain id="com.qnx.qcc.toolChain.634956353" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
<option id="com.qnx.qcc.option.os.179660503" name="Target OS:" superClass="com.qnx.qcc.option.os"/>
<option id="com.qnx.qcc.option.cpu.313606566" name="Target CPU:" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.aarch64le" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.1262746660" name="Compiler:" superClass="com.qnx.qcc.option.compiler"/>
<option id="com.qnx.qcc.option.runtime.87427708" name="C++ Runtime:" superClass="com.qnx.qcc.option.runtime"/>
<option id="com.qnx.qcc.option.buildtype.539075209" name="Build Type:" superClass="com.qnx.qcc.option.buildtype" value="profile" valueType="enumerated"/>
<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.600190288" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
<builder id="cdt.managedbuild.target.gnu.builder.base.894535644" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="com.qnx.qcc.tool.compiler.1842681380" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
<option id="com.qnx.qcc.option.compiler.optlevel.1532817766" name="Optimization Level" superClass="com.qnx.qcc.option.compiler.optlevel" useByScannerDiscovery="false" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.includePath.527375705" name="Include Directories (-I)" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.compiler.1591490423" superClass="com.qnx.qcc.inputType.compiler"/>
</tool>
<tool id="com.qnx.qcc.tool.assembler.2018725012" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
<option id="com.qnx.qcc.option.assembler.includePath.1697962313" name="Include Directories (-I)" superClass="com.qnx.qcc.option.assembler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.assembler.717422833" superClass="com.qnx.qcc.inputType.assembler"/>
</tool>
<tool id="com.qnx.qcc.tool.linker.1693276407" name="QCC Linker" superClass="com.qnx.qcc.tool.linker"/>
<tool id="com.qnx.qcc.tool.archiver.1493055817" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/src"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/public"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.qnx.qcc.toolChain.2034181414">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.toolChain.2034181414" moduleId="org.eclipse.cdt.core.settings" name="aarch64le-profile">
<externalSettings/>
<extensions>
<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.qnx.qcc.toolChain.2034181414" name="aarch64le-profile" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.qnx.qcc.toolChain.2034181414.149612478" name="/" resourcePath="">
<toolChain id="com.qnx.qcc.toolChain.1865511620" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
<option id="com.qnx.qcc.option.os.1511839536" name="Target OS:" superClass="com.qnx.qcc.option.os"/>
<option id="com.qnx.qcc.option.cpu.591436227" name="Target CPU:" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.aarch64le" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.918663847" name="Compiler:" superClass="com.qnx.qcc.option.compiler"/>
<option id="com.qnx.qcc.option.runtime.1470959014" name="C++ Runtime:" superClass="com.qnx.qcc.option.runtime"/>
<option id="com.qnx.qcc.option.buildtype.796055386" name="Build Type:" superClass="com.qnx.qcc.option.buildtype" value="profile" valueType="enumerated"/>
<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.1577154900" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
<builder id="cdt.managedbuild.target.gnu.builder.base.1659640273" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="com.qnx.qcc.tool.compiler.1294027329" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
<option id="com.qnx.qcc.option.compiler.optlevel.309638494" name="Optimization Level" superClass="com.qnx.qcc.option.compiler.optlevel" useByScannerDiscovery="false" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.includePath.758367742" name="Include Directories (-I)" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.compiler.1736500952" superClass="com.qnx.qcc.inputType.compiler"/>
</tool>
<tool id="com.qnx.qcc.tool.assembler.1947523253" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
<option id="com.qnx.qcc.option.assembler.includePath.1748323435" name="Include Directories (-I)" superClass="com.qnx.qcc.option.assembler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.assembler.1487064582" superClass="com.qnx.qcc.inputType.assembler"/>
</tool>
<tool id="com.qnx.qcc.tool.linker.1936914041" name="QCC Linker" superClass="com.qnx.qcc.tool.linker"/>
<tool id="com.qnx.qcc.tool.archiver.268298854" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/src"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/public"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.qnx.qcc.toolChain.1322416424">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.toolChain.1322416424" moduleId="org.eclipse.cdt.core.settings" name="aarch64le-debug">
<externalSettings/>
<extensions>
<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.qnx.qcc.toolChain.1322416424" name="aarch64le-debug" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.qnx.qcc.toolChain.1322416424.1503765272" name="/" resourcePath="">
<toolChain id="com.qnx.qcc.toolChain.451494519" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
<option id="com.qnx.qcc.option.os.416140676" name="Target OS:" superClass="com.qnx.qcc.option.os"/>
<option id="com.qnx.qcc.option.cpu.865783000" name="Target CPU:" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.aarch64le" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.1430643620" name="Compiler:" superClass="com.qnx.qcc.option.compiler"/>
<option id="com.qnx.qcc.option.runtime.1342741898" name="C++ Runtime:" superClass="com.qnx.qcc.option.runtime"/>
<option id="com.qnx.qcc.option.buildtype.1812926040" name="Build Type:" superClass="com.qnx.qcc.option.buildtype"/>
<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.385638230" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
<builder id="cdt.managedbuild.target.gnu.builder.base.1755628656" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="com.qnx.qcc.tool.compiler.245390234" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
<option id="com.qnx.qcc.option.compiler.optlevel.1034866566" name="Optimization Level" superClass="com.qnx.qcc.option.compiler.optlevel" useByScannerDiscovery="false" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.includePath.764963368" name="Include Directories (-I)" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.compiler.224461901" superClass="com.qnx.qcc.inputType.compiler"/>
</tool>
<tool id="com.qnx.qcc.tool.assembler.942775645" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
<option id="com.qnx.qcc.option.assembler.includePath.903967461" name="Include Directories (-I)" superClass="com.qnx.qcc.option.assembler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.assembler.1670335381" superClass="com.qnx.qcc.inputType.assembler"/>
</tool>
<tool id="com.qnx.qcc.tool.linker.257258345" name="QCC Linker" superClass="com.qnx.qcc.tool.linker"/>
<tool id="com.qnx.qcc.tool.archiver.721284519" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/src"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/public"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.qnx.qcc.toolChain.1771705254">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.toolChain.1771705254" moduleId="org.eclipse.cdt.core.settings" name="aarch64le-release">
<externalSettings/>
<extensions>
<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.qnx.qcc.toolChain.1771705254" name="aarch64le-release" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.qnx.qcc.toolChain.1771705254.704637607" name="/" resourcePath="">
<toolChain id="com.qnx.qcc.toolChain.928452873" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
<option id="com.qnx.qcc.option.os.805331307" name="Target OS:" superClass="com.qnx.qcc.option.os"/>
<option id="com.qnx.qcc.option.cpu.210787420" name="Target CPU:" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.aarch64le" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.1738710733" name="Compiler:" superClass="com.qnx.qcc.option.compiler"/>
<option id="com.qnx.qcc.option.runtime.1396873370" name="C++ Runtime:" superClass="com.qnx.qcc.option.runtime"/>
<option id="com.qnx.qcc.option.buildtype.551224083" name="Build Type:" superClass="com.qnx.qcc.option.buildtype" value="release" valueType="enumerated"/>
<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.478444913" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
<builder id="cdt.managedbuild.target.gnu.builder.base.2145709880" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="com.qnx.qcc.tool.compiler.1882728420" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
<option id="com.qnx.qcc.option.compiler.optlevel.1958543971" name="Optimization Level" superClass="com.qnx.qcc.option.compiler.optlevel" useByScannerDiscovery="false" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.includePath.333344947" name="Include Directories (-I)" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.compiler.2009341474" superClass="com.qnx.qcc.inputType.compiler"/>
</tool>
<tool id="com.qnx.qcc.tool.assembler.365537856" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
<option id="com.qnx.qcc.option.assembler.includePath.1645365308" name="Include Directories (-I)" superClass="com.qnx.qcc.option.assembler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.assembler.838515999" superClass="com.qnx.qcc.inputType.assembler"/>
</tool>
<tool id="com.qnx.qcc.tool.linker.1752225216" name="QCC Linker" superClass="com.qnx.qcc.tool.linker"/>
<tool id="com.qnx.qcc.tool.archiver.1980607405" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/src"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/public"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.qnx.qcc.toolChain.508473458">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.toolChain.508473458" moduleId="org.eclipse.cdt.core.settings" name="aarch64le-debug">
<externalSettings/>
<extensions>
<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.qnx.qcc.toolChain.508473458" name="aarch64le-debug" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.qnx.qcc.toolChain.508473458.2105641964" name="/" resourcePath="">
<toolChain id="com.qnx.qcc.toolChain.227360216" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
<option id="com.qnx.qcc.option.os.871471082" name="Target OS:" superClass="com.qnx.qcc.option.os"/>
<option id="com.qnx.qcc.option.cpu.15784798" name="Target CPU:" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.aarch64le" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.336109977" name="Compiler:" superClass="com.qnx.qcc.option.compiler"/>
<option id="com.qnx.qcc.option.runtime.588147567" name="C++ Runtime:" superClass="com.qnx.qcc.option.runtime"/>
<option id="com.qnx.qcc.option.buildtype.1574941818" name="Build Type:" superClass="com.qnx.qcc.option.buildtype"/>
<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.1216394719" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
<builder id="cdt.managedbuild.target.gnu.builder.base.1679627742" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="6" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="com.qnx.qcc.tool.compiler.1984157175" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
<option id="com.qnx.qcc.option.compiler.optlevel.112007619" name="Optimization Level" superClass="com.qnx.qcc.option.compiler.optlevel" useByScannerDiscovery="false" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.includePath.163710002" name="Include Directories (-I)" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.compiler.520844188" superClass="com.qnx.qcc.inputType.compiler"/>
</tool>
<tool id="com.qnx.qcc.tool.assembler.20391325" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
<option id="com.qnx.qcc.option.assembler.includePath.680021704" name="Include Directories (-I)" superClass="com.qnx.qcc.option.assembler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.assembler.314103150" superClass="com.qnx.qcc.inputType.assembler"/>
</tool>
<tool id="com.qnx.qcc.tool.linker.1000589579" name="QCC Linker" superClass="com.qnx.qcc.tool.linker"/>
<tool id="com.qnx.qcc.tool.archiver.2090876633" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.qnx.qcc.toolChain.11197553">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.toolChain.11197553" moduleId="org.eclipse.cdt.core.settings" name="x86_64-coverage">
<externalSettings/>
<extensions>
<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.qnx.qcc.toolChain.11197553" name="x86_64-coverage" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.qnx.qcc.toolChain.11197553.768042893" name="/" resourcePath="">
<toolChain id="com.qnx.qcc.toolChain.1677690501" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
<option id="com.qnx.qcc.option.os.1763665618" name="Target OS:" superClass="com.qnx.qcc.option.os"/>
<option id="com.qnx.qcc.option.cpu.2030972224" name="Target CPU:" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.x86_64" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.695756230" name="Compiler:" superClass="com.qnx.qcc.option.compiler"/>
<option id="com.qnx.qcc.option.runtime.2085490978" name="C++ Runtime:" superClass="com.qnx.qcc.option.runtime"/>
<option id="com.qnx.qcc.option.buildtype.1211222878" name="Build Type:" superClass="com.qnx.qcc.option.buildtype" value="coverage" valueType="enumerated"/>
<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.690624196" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
<builder id="cdt.managedbuild.target.gnu.builder.base.1898960536" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="com.qnx.qcc.tool.compiler.1573811045" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
<option id="com.qnx.qcc.option.compiler.optlevel.989567208" name="Optimization Level" superClass="com.qnx.qcc.option.compiler.optlevel" useByScannerDiscovery="false" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.includePath.460439821" name="Include Directories (-I)" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.compiler.82522484" superClass="com.qnx.qcc.inputType.compiler"/>
</tool>
<tool id="com.qnx.qcc.tool.assembler.1631748443" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
<option id="com.qnx.qcc.option.assembler.includePath.740286393" name="Include Directories (-I)" superClass="com.qnx.qcc.option.assembler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.assembler.700007729" superClass="com.qnx.qcc.inputType.assembler"/>
</tool>
<tool id="com.qnx.qcc.tool.linker.736010980" name="QCC Linker" superClass="com.qnx.qcc.tool.linker"/>
<tool id="com.qnx.qcc.tool.archiver.479249048" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.qnx.qcc.toolChain.312133252">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.toolChain.312133252" moduleId="org.eclipse.cdt.core.settings" name="aarch64le-profile">
<externalSettings/>
<extensions>
<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.qnx.qcc.toolChain.312133252" name="aarch64le-profile" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.qnx.qcc.toolChain.312133252.1830811651" name="/" resourcePath="">
<toolChain id="com.qnx.qcc.toolChain.566934566" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
<option id="com.qnx.qcc.option.os.390003139" name="Target OS:" superClass="com.qnx.qcc.option.os"/>
<option id="com.qnx.qcc.option.cpu.1055315239" name="Target CPU:" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.aarch64le" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.1893807591" name="Compiler:" superClass="com.qnx.qcc.option.compiler"/>
<option id="com.qnx.qcc.option.runtime.330319677" name="C++ Runtime:" superClass="com.qnx.qcc.option.runtime"/>
<option id="com.qnx.qcc.option.buildtype.459217554" name="Build Type:" superClass="com.qnx.qcc.option.buildtype" value="profile" valueType="enumerated"/>
<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.706344691" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
<builder id="cdt.managedbuild.target.gnu.builder.base.930033839" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="com.qnx.qcc.tool.compiler.1351783745" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
<option id="com.qnx.qcc.option.compiler.optlevel.948397116" name="Optimization Level" superClass="com.qnx.qcc.option.compiler.optlevel" useByScannerDiscovery="false" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.includePath.1640423838" name="Include Directories (-I)" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.compiler.1521366613" superClass="com.qnx.qcc.inputType.compiler"/>
</tool>
<tool id="com.qnx.qcc.tool.assembler.1374658122" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
<option id="com.qnx.qcc.option.assembler.includePath.1741170874" name="Include Directories (-I)" superClass="com.qnx.qcc.option.assembler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.assembler.811505509" superClass="com.qnx.qcc.inputType.assembler"/>
</tool>
<tool id="com.qnx.qcc.tool.linker.173000416" name="QCC Linker" superClass="com.qnx.qcc.tool.linker"/>
<tool id="com.qnx.qcc.tool.archiver.1674246736" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/src"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/public"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.qnx.qcc.toolChain.851831643">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.toolChain.851831643" moduleId="org.eclipse.cdt.core.settings" name="x86-coverage">
<externalSettings/>
<extensions>
<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.qnx.qcc.toolChain.851831643" name="x86-coverage" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.qnx.qcc.toolChain.851831643.838215177" name="/" resourcePath="">
<toolChain id="com.qnx.qcc.toolChain.666018849" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
<option id="com.qnx.qcc.option.os.652692550" name="Target OS:" superClass="com.qnx.qcc.option.os"/>
<option id="com.qnx.qcc.option.cpu.1461458931" name="Target CPU:" superClass="com.qnx.qcc.option.cpu"/>
<option id="com.qnx.qcc.option.compiler.1997653790" name="Compiler:" superClass="com.qnx.qcc.option.compiler"/>
<option id="com.qnx.qcc.option.runtime.570424276" name="C++ Runtime:" superClass="com.qnx.qcc.option.runtime"/>
<option id="com.qnx.qcc.option.buildtype.11290833" name="Build Type:" superClass="com.qnx.qcc.option.buildtype" value="coverage" valueType="enumerated"/>
<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.470526191" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
<builder id="cdt.managedbuild.target.gnu.builder.base.1110761941" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="com.qnx.qcc.tool.compiler.530989487" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
<option id="com.qnx.qcc.option.compiler.optlevel.1234027203" name="Optimization Level" superClass="com.qnx.qcc.option.compiler.optlevel" useByScannerDiscovery="false" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.includePath.299411087" name="Include Directories (-I)" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.compiler.1359968577" superClass="com.qnx.qcc.inputType.compiler"/>
</tool>
<tool id="com.qnx.qcc.tool.assembler.84630033" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
<option id="com.qnx.qcc.option.assembler.includePath.1948912253" name="Include Directories (-I)" superClass="com.qnx.qcc.option.assembler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.assembler.1440514454" superClass="com.qnx.qcc.inputType.assembler"/>
</tool>
<tool id="com.qnx.qcc.tool.linker.116406286" name="QCC Linker" superClass="com.qnx.qcc.tool.linker"/>
<tool id="com.qnx.qcc.tool.archiver.474461871" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.qnx.qcc.toolChain.1697766463">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.toolChain.1697766463" moduleId="org.eclipse.cdt.core.settings" name="armv7le-coverage">
<externalSettings/>
<extensions>
<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.qnx.qcc.toolChain.1697766463" name="armv7le-coverage" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.qnx.qcc.toolChain.1697766463.1693159231" name="/" resourcePath="">
<toolChain id="com.qnx.qcc.toolChain.917976049" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
<option id="com.qnx.qcc.option.os.106687656" name="Target OS:" superClass="com.qnx.qcc.option.os"/>
<option id="com.qnx.qcc.option.cpu.1885103417" name="Target CPU:" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.armle-v7" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.1313986256" name="Compiler:" superClass="com.qnx.qcc.option.compiler"/>
<option id="com.qnx.qcc.option.runtime.1669172336" name="C++ Runtime:" superClass="com.qnx.qcc.option.runtime"/>
<option id="com.qnx.qcc.option.buildtype.2088343680" name="Build Type:" superClass="com.qnx.qcc.option.buildtype" value="coverage" valueType="enumerated"/>
<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.449222909" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
<builder id="cdt.managedbuild.target.gnu.builder.base.1086123974" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="com.qnx.qcc.tool.compiler.186026688" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
<option id="com.qnx.qcc.option.compiler.optlevel.2090109694" name="Optimization Level" superClass="com.qnx.qcc.option.compiler.optlevel" useByScannerDiscovery="false" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.includePath.85399836" name="Include Directories (-I)" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.compiler.562774782" superClass="com.qnx.qcc.inputType.compiler"/>
</tool>
<tool id="com.qnx.qcc.tool.assembler.1438453230" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
<option id="com.qnx.qcc.option.assembler.includePath.378109278" name="Include Directories (-I)" superClass="com.qnx.qcc.option.assembler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.assembler.1130936801" superClass="com.qnx.qcc.inputType.assembler"/>
</tool>
<tool id="com.qnx.qcc.tool.linker.759414821" name="QCC Linker" superClass="com.qnx.qcc.tool.linker"/>
<tool id="com.qnx.qcc.tool.archiver.1263698493" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.qnx.qcc.toolChain.647166456">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.toolChain.647166456" moduleId="org.eclipse.cdt.core.settings" name="armv7le-profile">
<externalSettings/>
<extensions>
<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.qnx.qcc.toolChain.647166456" name="armv7le-profile" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.qnx.qcc.toolChain.647166456.1508820537" name="/" resourcePath="">
<toolChain id="com.qnx.qcc.toolChain.1979487242" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
<option id="com.qnx.qcc.option.os.970887142" name="Target OS:" superClass="com.qnx.qcc.option.os"/>
<option id="com.qnx.qcc.option.cpu.239664321" name="Target CPU:" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.armle-v7" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.1751274850" name="Compiler:" superClass="com.qnx.qcc.option.compiler"/>
<option id="com.qnx.qcc.option.runtime.1269442265" name="C++ Runtime:" superClass="com.qnx.qcc.option.runtime"/>
<option id="com.qnx.qcc.option.buildtype.1431865529" name="Build Type:" superClass="com.qnx.qcc.option.buildtype" value="profile" valueType="enumerated"/>
<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.799655379" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
<builder id="cdt.managedbuild.target.gnu.builder.base.2029839409" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="com.qnx.qcc.tool.compiler.1975279854" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
<option id="com.qnx.qcc.option.compiler.optlevel.1510714308" name="Optimization Level" superClass="com.qnx.qcc.option.compiler.optlevel" useByScannerDiscovery="false" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.includePath.897962192" name="Include Directories (-I)" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.compiler.576900047" superClass="com.qnx.qcc.inputType.compiler"/>
</tool>
<tool id="com.qnx.qcc.tool.assembler.661845605" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
<option id="com.qnx.qcc.option.assembler.includePath.251749173" name="Include Directories (-I)" superClass="com.qnx.qcc.option.assembler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.assembler.1008332808" superClass="com.qnx.qcc.inputType.assembler"/>
</tool>
<tool id="com.qnx.qcc.tool.linker.17926043" name="QCC Linker" superClass="com.qnx.qcc.tool.linker"/>
<tool id="com.qnx.qcc.tool.archiver.1954231787" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.qnx.qcc.toolChain.844978504">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.toolChain.844978504" moduleId="org.eclipse.cdt.core.settings" name="armv7le-release">
<externalSettings/>
<extensions>
<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.qnx.qcc.toolChain.844978504" name="armv7le-release" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.qnx.qcc.toolChain.844978504.731469155" name="/" resourcePath="">
<toolChain id="com.qnx.qcc.toolChain.669877348" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
<option id="com.qnx.qcc.option.os.1918128345" name="Target OS:" superClass="com.qnx.qcc.option.os"/>
<option id="com.qnx.qcc.option.cpu.194470149" name="Target CPU:" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.armle-v7" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.1545492074" name="Compiler:" superClass="com.qnx.qcc.option.compiler"/>
<option id="com.qnx.qcc.option.runtime.1562920328" name="C++ Runtime:" superClass="com.qnx.qcc.option.runtime"/>
<option id="com.qnx.qcc.option.buildtype.1037042803" name="Build Type:" superClass="com.qnx.qcc.option.buildtype" value="release" valueType="enumerated"/>
<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.1040005206" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
<builder id="cdt.managedbuild.target.gnu.builder.base.1798779527" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="com.qnx.qcc.tool.compiler.583776540" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
<option id="com.qnx.qcc.option.compiler.optlevel.704432493" name="Optimization Level" superClass="com.qnx.qcc.option.compiler.optlevel" useByScannerDiscovery="false" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.includePath.884747388" name="Include Directories (-I)" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.compiler.265358615" superClass="com.qnx.qcc.inputType.compiler"/>
</tool>
<tool id="com.qnx.qcc.tool.assembler.1039080703" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
<option id="com.qnx.qcc.option.assembler.includePath.1634333473" name="Include Directories (-I)" superClass="com.qnx.qcc.option.assembler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.assembler.2124019965" superClass="com.qnx.qcc.inputType.assembler"/>
</tool>
<tool id="com.qnx.qcc.tool.linker.1475234954" name="QCC Linker" superClass="com.qnx.qcc.tool.linker"/>
<tool id="com.qnx.qcc.tool.archiver.1459622746" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.qnx.qcc.toolChain.1751632028">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.qnx.qcc.toolChain.1751632028" moduleId="org.eclipse.cdt.core.settings" name="aarch64le-coverage">
<externalSettings/>
<extensions>
<extension id="com.qnx.tools.ide.qde.core.QDEBynaryParser" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildProperties="" description="" id="com.qnx.qcc.toolChain.1751632028" name="aarch64le-coverage" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="com.qnx.qcc.toolChain.1751632028.139167443" name="/" resourcePath="">
<toolChain id="com.qnx.qcc.toolChain.1922911304" name="QNX QCC" superClass="com.qnx.qcc.toolChain">
<option id="com.qnx.qcc.option.os.1932184065" name="Target OS:" superClass="com.qnx.qcc.option.os"/>
<option id="com.qnx.qcc.option.cpu.145657146" name="Target CPU:" superClass="com.qnx.qcc.option.cpu" value="com.qnx.qcc.option.gen.cpu.aarch64le" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.1234409396" name="Compiler:" superClass="com.qnx.qcc.option.compiler"/>
<option id="com.qnx.qcc.option.runtime.1033770099" name="C++ Runtime:" superClass="com.qnx.qcc.option.runtime"/>
<option id="com.qnx.qcc.option.buildtype.831900883" name="Build Type:" superClass="com.qnx.qcc.option.buildtype" value="coverage" valueType="enumerated"/>
<targetPlatform archList="all" binaryParser="com.qnx.tools.ide.qde.core.QDEBynaryParser" id="com.qnx.qcc.targetPlatform.301470980" osList="all" superClass="com.qnx.qcc.targetPlatform"/>
<builder id="cdt.managedbuild.target.gnu.builder.base.870136306" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="com.qnx.qcc.tool.compiler.1357395530" name="QCC Compiler" superClass="com.qnx.qcc.tool.compiler">
<option id="com.qnx.qcc.option.compiler.optlevel.107758436" name="Optimization Level" superClass="com.qnx.qcc.option.compiler.optlevel" useByScannerDiscovery="false" value="com.qnx.qcc.option.compiler.optlevel.0" valueType="enumerated"/>
<option id="com.qnx.qcc.option.compiler.includePath.1494855812" name="Include Directories (-I)" superClass="com.qnx.qcc.option.compiler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.compiler.2085763103" superClass="com.qnx.qcc.inputType.compiler"/>
</tool>
<tool id="com.qnx.qcc.tool.assembler.1269222028" name="QCC Assembler" superClass="com.qnx.qcc.tool.assembler">
<option id="com.qnx.qcc.option.assembler.includePath.513613045" name="Include Directories (-I)" superClass="com.qnx.qcc.option.assembler.includePath" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/TSCP/src/APP/ciapp/Train}&quot;"/>
</option>
<inputType id="com.qnx.qcc.inputType.assembler.207312122" superClass="com.qnx.qcc.inputType.assembler"/>
</tool>
<tool id="com.qnx.qcc.tool.linker.600660352" name="QCC Linker" superClass="com.qnx.qcc.tool.linker"/>
<tool id="com.qnx.qcc.tool.archiver.503067367" name="QCC Archiver" superClass="com.qnx.qcc.tool.archiver"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/src"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="/public"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="TSCP.null.349235574" name="TSCP"/>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
<storageModule moduleId="refreshScope" versionNumber="2">
<configuration configurationName="aarch64le-debug">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
<configuration configurationName="x86_64-debug">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
<configuration configurationName="armv7le-coverage">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
<configuration configurationName="armv7le-debug">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
<configuration configurationName="x86-coverage">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
<configuration configurationName="x86-profile">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
<configuration configurationName="armv7le-profile">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
<configuration configurationName="x86_64-coverage">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
<configuration configurationName="aarch64le-profile">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
<configuration configurationName="aarch64le-coverage">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
<configuration configurationName="x86_64-release">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
<configuration configurationName="armv7le-release">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
<configuration configurationName="x86-release">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
<configuration configurationName="aarch64le-release">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
<configuration configurationName="x86_64-profile">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
<configuration configurationName="x86-debug">
<resource resourceType="PROJECT" workspacePath="/TSCP"/>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.2111653378">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.444211187">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.1923716135">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.691157941">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.705038085">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.11197553">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.444971310">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.962019019">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.867349151">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.312133252">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.1100278840">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.2034181414">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.1697766463">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.314237686">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.1771705254">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.1273206681">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.1322416424">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.844978504">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.1898895178">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.508473458">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.24582968">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.1194012629">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.647166456">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.1701031470">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.1088691470">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.851831643">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.330376829">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.qnx.qcc.toolChain.1751632028">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="com.qnx.tools.ide.qde.managedbuilder.core.qccScannerInfo"/>
</scannerConfigBuildInfo>
</storageModule>
</cproject>
-26
View File
@@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>TIOC</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
</projectDescription>
@@ -30,6 +30,6 @@
#define VER_INTE_PROJECT 220 /*项目编号*/
#define VER_INTE_PRODUCT 40 /*产品编号*/
#define VER_INTE_EXE 1 /*可执行编号*/
#define VER_INTE_TIME 119 /*集成次数编号*/
#define VER_INTE_TIME 126 /*集成次数编号*/
#endif/*endif of #define _CI_INTEGRATE_CONFIG_H*/
@@ -16,12 +16,12 @@
#include "NonAutoReturnDataManage.h"
#include "DynamicRouteDataManage.h"
#include "../Deployment/DeploymentExtern.h"
/*交换变量*/
extern UINT16 TransmitStateDataCurSum; /*通信关系状态数据当前总数*/
extern UINT8 ComCycNumForCiToAts; /*联锁到ATS通信周期记录*/
extern UINT8 ComCycNumForCiToXianDi; /*联锁到现地通信周期记录*/
extern TransmitStateDataStruct TransmitStateDataStru[TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX]; /*定义通信状态结构体*/
@@ -895,7 +895,11 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer)
/*拷贝OC站(集中站和非集中站)指示器结构体*/
(void)memcpy(pCiAppDataPointer + curIndex, g_OCStationIndicDataStru, (INDICATOR_SUM_MAX) * sizeof(OCStationIndicDataStru));
curIndex = curIndex + (UINT32)((INDICATOR_SUM_MAX) * sizeof(OCStationIndicDataStru));
/*计算一次CRC*/
crcLength = curIndex - crcIndex;
crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength);
debug_infor_printf((const)"2oo2 IndicatorDataStru-g_OCStationIndicDataStru CRC:%x, Length:%d\n", crcResult, crcLength);
crcIndex = curIndex;
/*拷贝错误数据结构体*/
(void)memcpy(pCiAppDataPointer + curIndex, ErrorDataStru, (ERROR_DATA_SUM_MAX)*sizeof(ErrorDataStruct));
curIndex = curIndex + (UINT32)((ERROR_DATA_SUM_MAX)*sizeof(ErrorDataStruct));
@@ -906,11 +910,19 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer)
curIndex = curIndex + (ROUTE_LONG_SUM_MAX)*sizeof(LongRouteDataStruct);
#endif
curIndex += CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void *)LongRouteDataStru, ROUTE_LONG_SUM_MAX, (UINT16)sizeof(LongRouteDataStruct));
/*计算一次CRC*/
crcLength = curIndex - crcIndex;
crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength);
debug_infor_printf((const)"2oo2 g_OCStationIndicDataStru-LongRouteDataStru CRC:%x, Length:%d\n", crcResult, crcLength);
crcIndex = curIndex;
/*拷贝通信状态结构体*/
(void)memcpy(pCiAppDataPointer + curIndex, TransmitStateDataStru, (TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX)*sizeof(TransmitStateDataStruct));
curIndex = curIndex + (UINT32)((TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX)*sizeof(TransmitStateDataStruct));
/*计算一次CRC*/
debug_out_array(0xAA, TransmitStateDataStru, (TRANSMIT_OBJECT_SUM_MAX * TRANSMIT_OBJECT_DEVICE_SUM_MAX) * sizeof(TransmitStateDataStruct));
crcLength = curIndex - crcIndex;
crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength);
debug_infor_printf((const)"2oo2 LongRouteDataStru-TransmitStateDataStru CRC:%x, Length:%d\n", crcResult, crcLength);
/*拷贝CI操作命令反馈结构体数组*/
(void)memcpy(pCiAppDataPointer + curIndex, CiSendCmdDataStru, (CI_TO_ATSORXIANDI_CMD_DATA_STRU_SUM_MAX)*sizeof(CommandDataStruct));
curIndex = curIndex + (UINT32)((CI_TO_ATSORXIANDI_CMD_DATA_STRU_SUM_MAX)*sizeof(CommandDataStruct));
@@ -918,7 +930,11 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer)
/*拷贝CI发送到其他联锁命令结构体数组*/
(void)memcpy(pCiAppDataPointer + curIndex, SendCiCmdDataStru, (SENDCI_CMD_DATA_STRU_SUM_MAX)*sizeof(ToCiCommandDataStruct));
curIndex = curIndex + (UINT32)((SENDCI_CMD_DATA_STRU_SUM_MAX)*sizeof(ToCiCommandDataStruct));
/*计算一次CRC*/
crcLength = curIndex - crcIndex;
crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength);
debug_infor_printf((const)"2oo2 TransmitStateDataStru-SendCiCmdDataStru CRC:%x, Length:%d\n", crcResult, crcLength);
crcIndex = curIndex;
/*拷贝与联锁通信的Vobc信息*/
curResult = CopyValidGetVobcDataStru(pCiAppDataPointer + curIndex, VobcToCiDataStru, VOBC_TO_CI_SUM_MAX);
curIndex = curIndex + curResult;
@@ -926,7 +942,10 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer)
/*拷贝使用后备模式与联锁通信的Vobc信息*/
curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void *)VobcBackUpToCiDataStru, VOBC_BACKUP_TO_CI_SUM_MAX, (UINT16)sizeof(VobcBackUpToCiDataStruct));
curIndex = curIndex + curResult;
/*计算一次CRC*/
crcLength = curIndex - crcIndex;
crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength);
debug_infor_printf((const)"2oo2 SendCiCmdDataStru-VobcBackUpToCiDataStru CRC:%x, Length:%d\n", crcResult, crcLength);
/*拷贝与联锁通信的ITE信息*/
curResult = CopyValidGetIteDataStru(pCiAppDataPointer + curIndex, IteToCiDataStru, ITE_TO_CI_SUM_MAX);
curIndex = curIndex + curResult;
@@ -942,7 +961,7 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer)
/*计算一次CRC*/
crcLength = curIndex - crcIndex;
crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength);
debug_infor_printf((const)"2oo2 IndicatorDataStru-AllAutoReturnDataStru CRC:%x, Length:%d\n", crcResult, crcLength);
debug_infor_printf((const)"2oo2 VobcBackUpToCiDataStru-AllAutoReturnDataStru CRC:%x, Length:%d\n", crcResult, crcLength);
crcIndex = curIndex;
/*拷贝车库门数据结构体*/
@@ -1324,6 +1343,11 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer)
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_LocalSnowModel), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
/*计算一次CRC*/
crcLength = curIndex - crcIndex;
crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength);
debug_infor_printf((const)"2oo2 Deploy_GetTransferData-g_LocalSnowModel CRC:%x, Length:%d\n", crcResult, crcLength);
/*拷贝本地相邻联锁接受命令信息*/
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT16), (const void*)(&RecvCiCmdDataStruCurSum), (UINT32)sizeof(UINT16));
curIndex = curIndex + (UINT32)sizeof(UINT16);
@@ -1359,7 +1383,7 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer)
/*计算一次CRC*/
crcLength = curIndex - crcIndex;
crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength);
debug_infor_printf((const)"2oo2 Deploy_GetTransferData-g_LocalSnowModel CRC:%x, Length:%d\n", crcResult, crcLength);
debug_infor_printf((const)"2oo2 RecvCiCmdDataStruCurSum-gPlatDataGPIOTolercance CRC:%x, Length:%d\n", crcResult, crcLength);
}
return curIndex;
}
@@ -1983,6 +2007,7 @@ UINT8 SetCiAppData(const UINT8 *pCiAppDataPointer,const UINT32 len)
/*拷贝平台IO电源采集容忍数据*/
(void)CommonMemCpy((void*)(&gPlatDataGPIOTolercance), (UINT32)sizeof(PlatGPIOToleranceDataStruct), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(PlatGPIOToleranceDataStruct));
curIndex = curIndex + (UINT32)sizeof(PlatGPIOToleranceDataStruct);
#endif
rtn = 1u;
}
@@ -56,6 +56,7 @@
#include "../Route/LogicalRouteDataManage.h"
#include "../Route/LongRouteDataManage.h"
#include "../ReverseCut/ReverseCutDataManage.h"
#include "../AxisSort/AxisSort.h"
#ifdef __cplusplus
extern "C" {
@@ -87,15 +87,14 @@ UINT8 aam_PrepareACStatus(UINT16 ACID)
* @param[in] UINT16 ACID 基准计轴ID
* @param[in] UINT8 dir 查询方向
* @param[out] UINT16 arACID[AC_MAXCNT_IN_SWITCH] 相邻计轴ID
* @param[out] UINT8* DirectionPointFlag 是否有方向变化点 DIRECTIONPOINT_FLAG_VALID
* @return UINT8_MAX 查询失败
0~AC_MAXCNT_IN_SWITCH 查询成功
* @note 无
*/
UINT8 aam_PrepareAdjacentAC(UINT16 ACID, UINT8 dir, INOUT UINT16 arACID[AC_MAXCNT_IN_SWITCH])
UINT8 aam_PrepareAdjacentAC(UINT16 ACID, UINT8 dir, INOUT UINT16 arACID[AC_MAXCNT_IN_SWITCH], UINT8* DirectionPointFlag)
{
UINT8 cDirectionPointFlag = 0U; /*是否具有方向变化点标志*/
return elm_PrepareAdjacentAC(ACID, dir, arACID, &cDirectionPointFlag);
return elm_PrepareAdjacentAC(ACID, dir, arACID, DirectionPointFlag);
}
/**
@@ -89,11 +89,12 @@ UINT8 aam_PrepareACStatus(UINT16 ACID);
* @param[in] UINT16 ACID 基准计轴ID
* @param[in] UINT8 dir 查询方向
* @param[out] UINT16 arACID[AC_MAXCNT_IN_SWITCH] 相邻计轴ID
* @param[out] UINT8* DirectionPointFlag 是否有方向变化点 DIRECTIONPOINT_FLAG_VALID
* @return UINT8_MAX 查询失败
0~AC_MAXCNT_IN_SWITCH 查询成功
* @note 无
*/
UINT8 aam_PrepareAdjacentAC(UINT16 ACID, UINT8 dir, INOUT UINT16 arACID[AC_MAXCNT_IN_SWITCH]);
UINT8 aam_PrepareAdjacentAC(UINT16 ACID, UINT8 dir, INOUT UINT16 arACID[AC_MAXCNT_IN_SWITCH], UINT8* DirectionPointFlag);
/**
* @brief 通过计轴区段ID查找计轴区段位置
@@ -320,9 +320,14 @@ static UINT8 aam_AxisErrorJudge(UINT16 acID,UINT16 acIndex)
UINT8 chPhyTrainCheck = CI_SUCCESS;
UINT8 cAcCbtcAttr = 0U; /*计轴区段CBTC区域属性*/
UINT8 cAcRelEnvelopeCnt = 0U; /*计轴区段包络数量*/
UINT32 dwOccupyStartCyc = 0U;/*计轴占用起始周期号*/
UINT32 dwCurCyc = 0U;/*当前周期号*/
UINT8 DirectionPointSameSide = DIRECTIONPOINT_FLAG_INVALID;
UINT8 DirectionPointConvertSide = DIRECTIONPOINT_FLAG_INVALID;
EnvelopeStruct strEnvelopeInfo[SECTION_REL_ENVELOPE_SUM_MAX] = { 0U };
chSwitch = aam_PrepareArbSwitch();
dwCurCyc = Get2oo2CurCycleNum();
if (CI_SUCCESS == chSwitch)
{
;
@@ -339,10 +344,10 @@ static UINT8 aam_AxisErrorJudge(UINT16 acID,UINT16 acIndex)
else
{
/** 查询前方计轴*/
acSameCnt = aam_PrepareAdjacentAC(acID, EMAP_SAME_DIR, acSameID);
acSameCnt = aam_PrepareAdjacentAC(acID, EMAP_SAME_DIR, acSameID, &DirectionPointSameSide);
/** 查询后方计轴 */
acConvertCnt = aam_PrepareAdjacentAC(acID, EMAP_CONVER_DIR, acConvertID);
acConvertCnt = aam_PrepareAdjacentAC(acID, EMAP_CONVER_DIR, acConvertID,&DirectionPointConvertSide);
/** 获取区段由占用变空闲持续时间 */
maxRedunTimes = aam_PrepareRedunTimes();
@@ -360,14 +365,23 @@ static UINT8 aam_AxisErrorJudge(UINT16 acID,UINT16 acIndex)
}
else
{
/** 检查附近区段状态*/
chNearbyCheck = aam_CheckNearbyTrainType(acID);
/*仅在待判断计轴当周期由空闲变占用时检查*/
dwOccupyStartCyc = GetAxisSecOccCyc(acID);
if (dwCurCyc == dwOccupyStartCyc)
{
/** 检查附近区段状态*/
chNearbyCheck = aam_CheckNearbyTrainType(acID);
}
else
{
chNearbyCheck = CI_SUCCESS;
}
/** 处理前方计轴车辆接近*/
sameTrainType = aam_SearchNearbyTrainType(acID, EMAP_SAME_DIR, acSameCnt, acSameID);
sameTrainType = aam_CheckNearbyTrainEnvelopeType(acID, EMAP_SAME_DIR, acSameCnt, acSameID, DirectionPointSameSide);
/** 处理后方计轴车辆接近 */
convertTrainType = aam_SearchNearbyTrainType(acID, EMAP_CONVER_DIR, acConvertCnt, acConvertID);
convertTrainType = aam_CheckNearbyTrainEnvelopeType(acID, EMAP_CONVER_DIR, acConvertCnt, acConvertID, DirectionPointConvertSide);
/*检查所属物理区段有无故障车*/
chPhyTrainCheck = aam_CheckPhyTrain(acID);
@@ -395,30 +409,27 @@ static UINT8 aam_AxisErrorJudge(UINT16 acID,UINT16 acIndex)
{
; /*继续处理*/
}
/** 判断相邻范围内计轴坏车最近占用时间检查通过 */
if ((CI_ERROR == chNearbyCheck))
/*有 坏车接近 或左右相邻计轴均无车接近 立即清除冗余计时*/
if ((AAM_BAD_NEAR == sameTrainType) || (AAM_BAD_NEAR == convertTrainType))
{
/*有 坏车接近 或左右相邻计轴均无车接近 立即清除冗余计时*/
if ((AAM_BAD_NEAR == sameTrainType) || (AAM_BAD_NEAR == convertTrainType))
{
/** 清除之前的冗余计时位 */
funRtn = aam_ClearPassTrainFlag(acIndex);
ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x20000000u);
/** 清除之前的冗余计时*/
funRtn = aam_ClearPassTrainFlag(acIndex);
ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x20000000u);
funRtn = aam_ClearRedunTime(acIndex);
ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x10000000u);
funRtn = aam_ClearRedunTime(acIndex);
ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x10000000u);
aam_SetAxisStatus(acIndex, AAM_STATUS_OCC);
AAM_LOG(AAM_LOG_FATAL, "info:AC%d not match ARB condition, NearByTrainCheck:%d.\n", acID, chNearbyCheck);
}
else
{
/** 冗余计时位加1*/
aam_AddRedunTime(acIndex, maxRedunTimes);
aam_SetAxisStatus(acIndex, AAM_STATUS_OCC);
AAM_LOG(AAM_LOG_FATAL, "info:AC%d not match ARB condition, NearByTrainCheck:%d.\n", acID, chNearbyCheck);
}
else if (CI_ERROR == chNearbyCheck)
{
/** 范围内坏车失败 UT冗余*/
aam_AddRedunTime(acIndex, maxRedunTimes);
/*置标志位*/
aam_SetAxisRedunCanArbFlag(acIndex, REDUN_OVER_ARB_NO);
}
/*置标志位*/
aam_SetAxisRedunCanArbFlag(acIndex, REDUN_OVER_ARB_NO);
}
else
{
@@ -437,50 +448,35 @@ static UINT8 aam_AxisErrorJudge(UINT16 acID,UINT16 acIndex)
{
if (AAM_STATUS_ARB == tmpACStatus)
{
/** 计轴已经ARB 检查防护范围 防护失败不应维持ARB*/
if (CI_ERROR == chNearbyCheck)
/** 计轴已经ARB 检查防护范围*/
cAcRelEnvelopeCnt = elm_GetEnvelopeInAC(acID, strEnvelopeInfo);
if ((0U < cAcRelEnvelopeCnt) && (SECTION_REL_ENVELOPE_SUM_MAX > cAcRelEnvelopeCnt))
{
/** 清除之前的冗余计时位 */
funRtn = aam_ClearPassTrainFlag(acIndex);
ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x20000000u);
funRtn = aam_ClearRedunTime(acIndex);
ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x10000000u);
aam_SetAxisStatus(acIndex, AAM_STATUS_OCC);
AAM_LOG(AAM_LOG_FATAL, "info:AC%d keep ARB Fail, NearByTrainCheck:%d.\n", acID, chNearbyCheck);
/*ARB区段存在包络,不进行ARB连续占用判断*/
}
else
{
cAcRelEnvelopeCnt = elm_GetEnvelopeInAC(acID, strEnvelopeInfo);
if ((0U < cAcRelEnvelopeCnt) && (SECTION_REL_ENVELOPE_SUM_MAX > cAcRelEnvelopeCnt))
/*ARB计轴区段同向相邻计轴区段连续占用*/
funRtn = aam_ArbContinuousOccCheck(acID, acSameCnt, acSameID);
/*ARB计轴区段反向相邻计轴区段连续占用*/
funRtn &= aam_ArbContinuousOccCheck(acID, acConvertCnt, acConvertID);
if (CI_SUCCESS != funRtn)
{
/*ARB区段存在包络,不进行ARB连续占用判断*/
/** 清除本计轴区段之前的冗余计时位 */
funRtn = aam_ClearPassTrainFlag(acIndex);
ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00800000U);
funRtn = aam_ClearRedunTime(acIndex);
ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00400000U);
aam_SetAxisStatus(acIndex, AAM_STATUS_OCC);
AAM_LOG(AAM_LOG_FATAL, "info:AC%d Keep ARB Fail Because Of Near Sec Continuous Occ\n", acID);
}
else
{
/*ARB计轴区段同向相邻计轴区段连续占用*/
funRtn = aam_ArbContinuousOccCheck(acID, acSameCnt, acSameID);
/*ARB计轴区段反向相邻计轴区段连续占用*/
funRtn &= aam_ArbContinuousOccCheck(acID, acConvertCnt, acConvertID);
if (CI_SUCCESS != funRtn)
{
/** 清除本计轴区段之前的冗余计时位 */
funRtn = aam_ClearPassTrainFlag(acIndex);
ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00800000U);
funRtn = aam_ClearRedunTime(acIndex);
ASSER_ERROR(CI_ERROR == funRtn, errorCode, 0x00400000U);
aam_SetAxisStatus(acIndex, AAM_STATUS_OCC);
AAM_LOG(AAM_LOG_FATAL, "info:AC%d Keep ARB Fail Because Of Near Sec Continuous Occ\n", acID);
}
else
{
/*相邻区段占用检查通过,维持ARB状态*/
}
/*相邻区段占用检查通过,维持ARB状态*/
}
}
}
@@ -1577,14 +1573,13 @@ UINT8 aam_CheckNearbyTrainType(UINT16 ACID)
UINT32 cyCheckUtCyc = 0U; /*检查周期数*/
UINT32 dwRecentUtCyc = 0U; /*最近坏车占用周期号*/
UINT16 wCheckPhySec = 0U; /*待检查区段*/
UINT16* wAdjacentPhyBuf = NULL; /*直接相连区段数组*/
UINT16* pAdjacentPhyBuf = NULL; /*直接相连区段数组*/
UINT8 chAdjacentPhyNum = 0U; /*直接相连区段数量*/
UINT8 chNearSecNum = 0U; /*间接相邻数量*/
UINT16* dwNearSecBuf = NULL; /*间接相连区段数组*/
UINT16* pNearSecBuf = NULL; /*间接相连区段数组*/
UINT8 chSwitchPosCheck = CI_ERROR;/*当前道岔检查结果*/
UINT16 wPreSecId = 0U;/*间接区段的跳转区段*/
UINT16 wSndPreSecId = 0U;/*间接区段最初跳转区段*/
UINT8 chPreSecNearCheck = 0U;/*间接区段的跳转区段是否直接相邻*/
UINT8 chTransitAcNum = 0U; /*跳转计轴数量*/
UINT16* pTransitAcBuf = NULL; /*跳转计轴数组*/
cyCheckUtCyc = GetArbProtectCheckTime();
wBasePhyid = aam_PrepareACBelongPhyid(ACID);
@@ -1621,12 +1616,12 @@ UINT8 aam_CheckNearbyTrainType(UINT16 ACID)
{
/*Step2 :当前物理区段直接相邻物理区段所有计轴无坏车*/
chAdjacentPhyNum = GetAdjacentPhySecNum(wBasePhyid);
wAdjacentPhyBuf = GetAdjacentPhySecBuf(wBasePhyid);
if ((0U != chAdjacentPhyNum) && (NULL != wAdjacentPhyBuf))
pAdjacentPhyBuf = GetAdjacentPhySecBuf(wBasePhyid);
if ((0U != chAdjacentPhyNum) && (NULL != pAdjacentPhyBuf))
{
for (ii = 0; ii < chAdjacentPhyNum; ii++)
{
wCheckPhySec = wAdjacentPhyBuf[ii];
wCheckPhySec = pAdjacentPhyBuf[ii];
chSwitchPosCheck = GetAdjacentPhySecAcCheck(wBasePhyid, wCheckPhySec);
if (CI_SUCCESS == chSwitchPosCheck)
{
@@ -1672,26 +1667,25 @@ UINT8 aam_CheckNearbyTrainType(UINT16 ACID)
{
/*Step3 :当前物理区段间接相邻物理区段所有计轴无坏车*/
chNearSecNum = GetNearPhySecNum(wBasePhyid);
dwNearSecBuf = GetIndirectNearPhySecBuf(wBasePhyid);
pNearSecBuf = GetIndirectNearPhySecBuf(wBasePhyid);
for (ii = 0; ii < chNearSecNum; ii++)
{
wCheckPhySec = dwNearSecBuf[ii];
wPreSecId = GetNearSecPreSecId(wBasePhyid, wCheckPhySec);
chPreSecNearCheck = CheckPhySecIfAdjacent(wBasePhyid, wPreSecId);
if (CI_SUCCESS == chPreSecNearCheck)
wCheckPhySec = pNearSecBuf[ii];
chTransitAcNum = GetPhySecNearSecTransitAcNum(wBasePhyid, wCheckPhySec);
pTransitAcBuf = GetPhySecNearSecTransitAcBuf(wBasePhyid, wCheckPhySec);
chSwitchPosCheck = CI_ERROR;
if (NULL != pTransitAcBuf)
{
/*直接区段可达、本区段与直接相邻区段可达*/
chSwitchPosCheck = GetAdjacentPhySecAcCheck(wBasePhyid, wPreSecId);
chSwitchPosCheck &= GetAdjacentPhySecAcCheck(wPreSecId, wCheckPhySec);
}
else
{
/*间隔两步相邻区段,要求每步可达*/
wSndPreSecId = GetNearSecPreSecId(wBasePhyid, wPreSecId);
chSwitchPosCheck = GetAdjacentPhySecAcCheck(wBasePhyid, wSndPreSecId);
chSwitchPosCheck &= GetAdjacentPhySecAcCheck(wSndPreSecId, wPreSecId);
chSwitchPosCheck &= GetAdjacentPhySecAcCheck(wPreSecId, wCheckPhySec);
for (jj = 0; jj < chTransitAcNum; jj++)
{
chSwitchPosCheck = GetTransitPhySecAcCheck(wBasePhyid, pTransitAcBuf[jj]);
if (CI_SUCCESS == chSwitchPosCheck)
{
break;
}
}
}
if (CI_SUCCESS == chSwitchPosCheck)
{
/* 邻近可达区段有坏车曾占用再取消,认为坏车接近*/
@@ -2163,7 +2157,7 @@ UINT8 aam_ArbContinuousOccCheck(UINT16 wAcId, UINT8 cNearAcNum, UINT16 pNearAcId
UINT8 cRetVal = CI_ERROR;
UINT16 wBufIndex = 0U;
UINT16 wCurRelPhySecId = 0U; /*本计轴区段所属物理区段ID*/
UINT8 dwCiAndAxleTransBadEnsureCnt = 0U; /*判断与计轴通信中断周期数*/
UINT32 dwCiAndAxleTransBadEnsureCnt = 0U; /*判断与计轴通信中断周期数*/
UINT32 dwCurAxleOccStartCycNum = 0U; /*本计轴区段占用起始周期*/
UINT8 ii = 0U;
UINT16 wNearRelPhySecId = 0U; /*相邻计轴区段所属物理区段ID*/
@@ -2242,4 +2236,210 @@ UINT8 aam_ArbContinuousOccCheck(UINT16 wAcId, UINT8 cNearAcNum, UINT16 pNearAcId
}
return cRetVal;
}
/**
* 功能:查询计轴区段邻近范围内包络类型
* @param[in] UINT16 ACID 基准计轴ID
* @param[in] UINT8 dir 查询方向
* @param[in] UINT16 arACID[AC_MAXCNT_IN_SWITCH] 相邻计轴ID
* @param[in] UINT8 DirectionPointFlag 是否有方向变化点 DIRECTIONPOINT_FLAG_VALID
* 返回值:
AAM_NO_TRAIN_NEAR 无车接近
AAM_BAD_NEAR 坏车
AAM_GOOD_OCC 好车占用
AAM_SLEEP_OCC 休眠车
AAM_GOOD_FAR_AWAY 好车远离
AAM_GOOD_NEAR 好车接近
* Create: fan 2026/04/11
*/
UINT8 aam_CheckNearbyTrainEnvelopeType(UINT16 baseACID, UINT8 Dir, UINT8 acCnt, UINT16 acID[AC_MAXCNT_IN_SWITCH], UINT8 DirectionPointFlag)
{
UINT8 chAdjacentTrainType = AAM_BAD_NEAR;
UINT8 chFirstStepTrainType = AAM_BAD_NEAR;
UINT8 chSndStepTrainType = AAM_BAD_NEAR;
UINT8 ii = 0U;
UINT8 jj = 0U;
UINT8 kk = 0U;
UINT8 chRetTrainType = AAM_BAD_NEAR;
UINT16 wTempAcList[AC_MAXCNT_IN_SWITCH] = { 0U };
UINT8 chFirstStepAcCnt = 0U;
UINT16 wFirstStepID[AC_MAXCNT_IN_SWITCH] = { 0U };
UINT8 chSndStepAcCnt = 0U;
UINT16 wSndStepID[AC_MAXCNT_IN_SWITCH] = { 0U };
UINT32 dwArbProtectLen = 0U;/*ARB防护距离*/
UINT16 wArbProtectDis = GetSystemParaValue(ARB_CHECK_ALXE_SEC_LEN);
UINT32 dwCheckAcLen = 0U; /*找到计轴长度*/
UINT32 dwTempAcLen = 0U; /*计轴长度*/
UINT8 chChangePoitFlag = DIRECTIONPOINT_FLAG_INVALID;
UINT8 chTemp = 0U;
UINT8 chChangePoitCnt = 0U;
UINT8 chFirstDir = Dir;
UINT8 chSndDir = Dir;
UINT8 chLocalId = 0U;/*本联锁ID*/
UINT8 chAcBelongCi = 0U;
UINT8 chRelEnvelopeCnt = 0u;
UINT16 envelopeIds[SECTION_REL_ENVELOPE_SUM_MAX] = { 0u };
EnvelopeStruct* pTempEnvelope = NULL;/*包络信息*/
UINT8 chUseNvram = 0U;
dwArbProtectLen = (UINT32)(wArbProtectDis * 100U);
chLocalId = GetSystemParaLocalCiId();
if (0U == acCnt)
{
/*失败返回MAX 尽头线为0*/
chRetTrainType = AAM_NO_TRAIN_NEAR;
}
else if(AC_MAXCNT_IN_SWITCH >= acCnt)
{
for (ii = 0U; ii < acCnt; ii++)
{
wTempAcList[0] = acID[ii];
dwCheckAcLen = GetAxisSecTotalLen(acID[ii]);
chAdjacentTrainType = aam_SearchNearbyTrainType(baseACID, Dir, 1U, wTempAcList);
chAcBelongCi = GetAxisSectionBelongCiId(acID[ii]);
if (chAcBelongCi == chLocalId)
{
/*额外检查属于本联锁的直接相邻区段 无NVRAM车 */
chRelEnvelopeCnt = elm_GetEnvelopeIDsInAC(acID[ii], envelopeIds);
if (0u != chRelEnvelopeCnt)
{
for (jj = 0u; jj < chRelEnvelopeCnt; jj++)
{
pTempEnvelope = elm_GetEnvelopeInfoByID(envelopeIds[jj]);
for (kk = 0u; kk < pTempEnvelope->trianCnt; kk++)
{
chUseNvram = GetTrainNvramPosFlag(pTempEnvelope->trainID[kk]);
if (TRAIN_NVRAM_POS_FLAG_NO != chUseNvram)
{
chAdjacentTrainType = AAM_BAD_NEAR;
break;
}
}
}
}
}
/** 根据列车包络数量进行处理 */
if ((0U == ii) || (AAM_BAD_NEAR == chAdjacentTrainType))
{
chRetTrainType = chAdjacentTrainType;/*记录第一个结果 或更新为最坏结果*/
}
if ((AAM_NO_TRAIN_NEAR == chAdjacentTrainType) && (dwArbProtectLen > dwCheckAcLen))
{
/*路径无车 继续查找*/
chFirstDir = TransDirectionPointDir(DirectionPointFlag, Dir, &chChangePoitCnt);
chFirstStepAcCnt = aam_PrepareAdjacentAC(acID[ii], chFirstDir, wFirstStepID, &chChangePoitFlag);
if (UINT8_MAX != chFirstStepAcCnt)
{
for (jj = 0U; jj < chFirstStepAcCnt; jj++)
{
wTempAcList[0] = wFirstStepID[jj];
chFirstStepTrainType = aam_SearchNearbyTrainType(acID[ii], chFirstDir, 1U, wTempAcList);
dwTempAcLen = GetAxisSecTotalLen(wFirstStepID[jj]);
if ((AAM_NO_TRAIN_NEAR == chFirstStepTrainType) && (dwArbProtectLen >(dwCheckAcLen + dwTempAcLen)))
{
/*路径无车 继续查找*/
chSndDir = TransDirectionPointDir(chChangePoitFlag, chFirstDir, &chChangePoitCnt);
chSndStepAcCnt = aam_PrepareAdjacentAC(wFirstStepID[jj], chSndDir, wSndStepID, &chTemp);
if (UINT8_MAX != chSndStepAcCnt)
{
for (kk = 0U; kk < chSndStepAcCnt; kk++)
{
wTempAcList[0] = wSndStepID[kk];
chSndStepTrainType = aam_SearchNearbyTrainType(wFirstStepID[jj], chSndDir, 1U, wTempAcList);
/*更新最坏结果*/
chFirstStepTrainType = GetWorseNearbyTrainType(chFirstStepTrainType, chSndStepTrainType);
if (AAM_BAD_NEAR == chFirstStepTrainType)
{
/*可以停止遍历其他计轴*/
break;
}
}
}
else
{
/*异常防护*/
chFirstStepTrainType = AAM_BAD_NEAR;
break;
}
}
else
{
;/*停止当前路线*/
}
/*更新最坏结果*/
chAdjacentTrainType = GetWorseNearbyTrainType(chAdjacentTrainType, chFirstStepTrainType);
if (AAM_BAD_NEAR == chAdjacentTrainType)
{
/*可以停止遍历其他计轴*/
break;
}
}
}
else
{
/*异常防护*/
chAdjacentTrainType = AAM_BAD_NEAR;
break;
}
}
else
{
;/*停止当前路线*/
}
/*更新最坏结果*/
chRetTrainType = GetWorseNearbyTrainType(chRetTrainType, chAdjacentTrainType);
if (AAM_BAD_NEAR == chRetTrainType)
{
/*可以停止遍历其他计轴*/
break;
}
}
}
else
{
;/*返回坏车*/
}
return chRetTrainType;
}
/**
* 功能:更新路线上更有风险的结果
* 输入参数:UINT8 chPreType当前记录类型 UINT8 chAfterType比较的更新列车类型
* 返回值:
AAM_NO_TRAIN_NEAR 无车接近
AAM_BAD_NEAR 坏车
AAM_GOOD_OCC 好车占用
AAM_SLEEP_OCC 休眠车
AAM_GOOD_FAR_AWAY 好车远离
AAM_GOOD_NEAR 好车接近
* Create: fan 2026/04/11
*/
UINT8 GetWorseNearbyTrainType(UINT8 chPreType, UINT8 chAfterType)
{
/*定义结果严重程度: 坏车接近>休眠车>好车占用>其他>无车*/
UINT8 chRetval = AAM_BAD_NEAR;
if ((AAM_BAD_NEAR == chPreType)||(AAM_BAD_NEAR == chAfterType))
{
chRetval = AAM_BAD_NEAR;
}
else if ((AAM_SLEEP_OCC == chPreType) || (AAM_SLEEP_OCC == chAfterType))
{
chRetval = AAM_SLEEP_OCC;
}
else if ((AAM_GOOD_OCC == chPreType) || (AAM_GOOD_OCC == chAfterType))
{
chRetval = AAM_GOOD_OCC;
}
else if(AAM_NO_TRAIN_NEAR == chPreType)
{
chRetval = chAfterType;
}
else
{
chRetval = chPreType;
}
return chRetval;
}
@@ -233,4 +233,36 @@ UINT8 aam_CheckPhyTrain(UINT16 ACID);
*/
UINT8 aam_ArbContinuousOccCheck(UINT16 wAcId, UINT8 cNearAcNum, UINT16 pNearAcId[AC_MAXCNT_IN_SWITCH]);
/**
* 功能:查询计轴区段邻近范围内包络类型
* 输入参数:UINT16 ACID 计轴区段
* @param[in] UINT16 ACID 基准计轴ID
* @param[in] UINT8 dir 查询方向
* @param[in] UINT16 arACID[AC_MAXCNT_IN_SWITCH] 相邻计轴ID
* @param[in] UINT8 DirectionPointFlag 是否有方向变化点 DIRECTIONPOINT_FLAG_VALID
AAM_NO_TRAIN_NEAR 无车接近
AAM_BAD_NEAR 坏车
AAM_GOOD_OCC 好车占用
AAM_SLEEP_OCC 休眠车
AAM_GOOD_FAR_AWAY 好车远离
AAM_GOOD_NEAR 好车接近
* Create: fan 2026/04/11
*/
UINT8 aam_CheckNearbyTrainEnvelopeType(UINT16 baseACID, UINT8 Dir, UINT8 acCnt, UINT16 acID[AC_MAXCNT_IN_SWITCH], UINT8 DirectionPointFlag);
/**
* 功能:更新路线上更有风险的列车类型结果
* 输入参数:UINT8 chPreType当前记录类型 UINT8 chAfterType比较的更新列车类型
* 返回值:
AAM_NO_TRAIN_NEAR 无车接近
AAM_BAD_NEAR 坏车
AAM_GOOD_OCC 好车占用
AAM_SLEEP_OCC 休眠车
AAM_GOOD_FAR_AWAY 好车远离
AAM_GOOD_NEAR 好车接近
* Create: fan 2026/04/11
*/
UINT8 GetWorseNearbyTrainType(UINT8 chPreType, UINT8 chAfterType);
#endif /*AXIS_ASSERT_MANAGE_API_H_*/
+44 -5
View File
@@ -16,7 +16,7 @@
static UINT16 g_pSortLinkNum; /* 本控区的Link数量 */
static UINT16 g_pSortLinkIndex[AS_LINK_MAX + 1U]; /* 本控区的Link索引 */
static AS_SORT_INFO_s g_pSortLinkInfo[AS_LINK_MAX + 1U]; /*link排序*/
AS_SORT_INFO_s g_pSortLinkInfo[AS_LINK_MAX + 1U]; /*link排序*/
/* 通信车序列,在SortCT阶段完成CT车排序 */
static UINT16 s_pCTSortIndex[SIZE_MAX_LINE_TRAIN_NUM]; /*本信息不周期清空*/
@@ -2188,12 +2188,34 @@ UINT32 as_GetTransferData(OUT UINT8 * pDataBuff, IN UINT32 curIndex)
{
UINT32 ret = curIndex;
UINT32 copyIndex = curIndex;
UINT16 wLinkNum = 0U;
UINT16 u16Index = 0U;
UINT16 wTmpLinkId = 0U;
UINT8 chLocalId = GetSystemParaLocalCiId();
UINT8 chLinkCIId = 0U;/*link所属联锁*/
UINT32 dwLinkNumIndex =0U;/*数量位置 */
if (NULL != pDataBuff)
{
(void)CommonMemCpy(&pDataBuff[copyIndex], (UINT32)(sizeof(UINT16) * SIZE_MAX_LINE_TRAIN_NUM), s_pCTSortIndex, (UINT32)(sizeof(UINT16) * SIZE_MAX_LINE_TRAIN_NUM));
copyIndex += (UINT32)(sizeof(UINT16) * SIZE_MAX_LINE_TRAIN_NUM);
(void)CommonMemCpy(&pDataBuff[copyIndex], (UINT32)(sizeof(CT_SORT_INFO_s) * SIZE_MAX_COM_VOBC_NUM + 1u), s_pCTSortInfo, (UINT32)(sizeof(CT_SORT_INFO_s) * SIZE_MAX_COM_VOBC_NUM + 1u));
copyIndex += (UINT32)(sizeof(CT_SORT_INFO_s) * SIZE_MAX_COM_VOBC_NUM + 1u);
(void)CommonMemCpy(&pDataBuff[copyIndex], (UINT32)(sizeof(CT_SORT_INFO_s) * (SIZE_MAX_COM_VOBC_NUM + 1U)), s_pCTSortInfo, (UINT32)(sizeof(CT_SORT_INFO_s) * (SIZE_MAX_COM_VOBC_NUM + 1U)));
copyIndex += (UINT32)(sizeof(CT_SORT_INFO_s) * (SIZE_MAX_COM_VOBC_NUM + 1U));
/*拷贝link列车排序*/
dwLinkNumIndex = copyIndex;
copyIndex += 2U;
for (u16Index = 1U; u16Index <= g_pSortLinkNum; u16Index++)
{
wTmpLinkId = g_pSortLinkInfo[u16Index].u16ID;
chLinkCIId = (UINT8)GetLinkManageTiocById(wTmpLinkId);
if ((0U != chLocalId) && (chLinkCIId == chLocalId))
{
/*仅拷贝本联锁*/
(void)CommonMemCpy(&pDataBuff[copyIndex],(UINT32)(sizeof(AS_SORT_INFO_s)), &g_pSortLinkInfo[u16Index], (UINT32)(sizeof(AS_SORT_INFO_s)));
copyIndex += (UINT32)(sizeof(AS_SORT_INFO_s));
wLinkNum++;
}
}
ShortToChar(wLinkNum, &pDataBuff[dwLinkNumIndex]); /* 写入有车占用的计轴区段数量 */
ret = copyIndex;
}
else
@@ -2215,12 +2237,29 @@ UINT32 as_SetTransferData(IN UINT8 * pDataBuff, IN UINT32 curIndex)
{
UINT32 ret = curIndex;
UINT32 copyIndex = curIndex;
UINT16 wLinkNum = 0U;
UINT16 jj = 0U;
UINT16 wTmpLinkId =0U;
UINT16 wLinkIndex = 0U;
if (NULL != pDataBuff)
{
(void)CommonMemCpy(s_pCTSortIndex, (UINT32)(sizeof(UINT16) * SIZE_MAX_LINE_TRAIN_NUM), &pDataBuff[copyIndex], (UINT32)(sizeof(UINT16) * SIZE_MAX_LINE_TRAIN_NUM));
copyIndex += (UINT32)(sizeof(UINT16) * SIZE_MAX_LINE_TRAIN_NUM);
(void)CommonMemCpy(s_pCTSortInfo, (UINT32)(sizeof(CT_SORT_INFO_s) * SIZE_MAX_COM_VOBC_NUM + 1u), &pDataBuff[copyIndex], (UINT32)(sizeof(CT_SORT_INFO_s) * SIZE_MAX_COM_VOBC_NUM + 1u));
copyIndex += (UINT32)(sizeof(CT_SORT_INFO_s) * SIZE_MAX_COM_VOBC_NUM + 1u);
(void)CommonMemCpy(s_pCTSortInfo, (UINT32)(sizeof(CT_SORT_INFO_s) * (SIZE_MAX_COM_VOBC_NUM + 1U)), &pDataBuff[copyIndex], (UINT32)(sizeof(CT_SORT_INFO_s) * (SIZE_MAX_COM_VOBC_NUM + 1U)));
copyIndex += (UINT32)(sizeof(CT_SORT_INFO_s) * (SIZE_MAX_COM_VOBC_NUM + 1U));
/*拷贝列车排序*/
wLinkNum = ShortFromChar(&pDataBuff[copyIndex]);
copyIndex += 2u;
for (jj = 0U; jj < wLinkNum; jj++)
{
wTmpLinkId = ShortFromCharLE(&pDataBuff[copyIndex]);
wLinkIndex = g_pSortLinkIndex[wTmpLinkId];
if ((DEFAULT_ZERO < wLinkIndex) && (wLinkIndex < AS_LINK_MAX+1U))
{
(void)CommonMemCpy(&g_pSortLinkInfo[wLinkIndex], (UINT32)(sizeof(AS_SORT_INFO_s)), &pDataBuff[copyIndex], (UINT32)(sizeof(AS_SORT_INFO_s)));
copyIndex += (UINT32)(sizeof(AS_SORT_INFO_s));
}
}
ret = copyIndex;
}
else
+1 -1
View File
@@ -48,5 +48,5 @@ typedef struct
UINT16 TrainEnveLopeID[ENVELOPE_SUM_MAX]; /*所有包络ID信息*/
}s_TRAIN_ENVELOPE_ID;
extern AS_SORT_INFO_s g_pSortLinkInfo[AS_LINK_MAX + 1U]; /*link排序*/
#endif /* INC_AXIS_SORT_INC */
@@ -667,65 +667,205 @@ void SetCfpOtherOcEData(const UINT16 wCfpId, const UINT8 chEnvelopeIndex, const
* @param wCfpId 分界点ID
* @return 无
* @note 内部优化 20220419 wqm 编码规范:函数dsuCheckSameLoc返回值需要变量承接
* @note 内部优化 20260413 相邻联锁发送按照分界点计轴向内方计算一个ARB防护距离
*/
void SetCfpLocalOcEData(const UINT16 wCfpId)
{
UINT16 wIndex = 0u;
UINT8 chEnvelopeNum = 0u;
UINT16 wLinkId = 0u;
UINT16 wAcId = 0u;
UINT16 tmpACCnt = 0U;
UINT16 tmpAcIdBuf[AC_MAXCNT_IN_SWITCH] = { 0U };
UINT8 chEnvelopeIndex = 0u;
EnvelopeStruct szTmpEnvelope[SECTION_REL_ENVELOPE_SUM_MAX] = { 0u };
UINT8 chLocalId = 0u;
UINT16 wLinkTioc = 0u;
UINT16 wArbProtectDis = GetSystemParaValue(ARB_CHECK_ALXE_SEC_LEN);
UINT32 dwCheckAcLen = 0U; /*找到计轴长度*/
UINT32 dwFirstStepAcLen = 0U; /*找到计轴长度*/
UINT32 dwArbProtectLen = 0U;/*ARB防护距离*/
UINT8 chLocalCiType = 0U;
UINT8 chDir = 0U; /*分界点计轴方向*/
UINT8 chFirstStepAcCnt = 0U;
UINT16 wFirstStepID[AC_MAXCNT_IN_SWITCH] = { 0U };
UINT8 chSndStepAcCnt = 0U;
UINT16 wSndStepID[AC_MAXCNT_IN_SWITCH] = { 0U };
UINT8 chChangePoint = 0U;
UINT8 ii = 0U;
UINT8 jj = 0U;
UINT8 chCfpAcIndex = 0U;
UINT8 chStepCheck = CI_ERROR;
UINT8 chNextDir = 0U;
UINT8 chPointNum = 0u;
UINT8 chAcBelongTioc = 0U;
UINT8 chFail = CI_SUCCESS;
wIndex = GetCfpBufIndex(wCfpId);
chLocalId = GetSystemParaLocalCiId();
dwArbProtectLen = (UINT32)(wArbProtectDis * 100U);
chLocalCiType = GetLocalCiType();
/* 输入合法 */
if (CUTOFF_POINT_SUM_MAX > wIndex)
{
wLinkId = GetCfpInFirstLink(wCfpId);
wAcId = GetLinkBelongAcId(wLinkId);
chEnvelopeNum = elm_GetEnvelopeInAC(wAcId, szTmpEnvelope);
if (SECTION_REL_ENVELOPE_SUM_MAX == chEnvelopeNum)
/*清除脏数据*/
g_CutoffPointDataBuf[wIndex].chLocalTiocEnvelopeNum = 0U;
(void)CommonMemSet(&g_CutoffPointDataBuf[wIndex].szLocalEnvelope, (UINT32)((OTHER_RC_SEND_ENVELOPE_SUM_MAX)*sizeof(CfpEnvelopeStruct)), 0U, (UINT32)((OTHER_RC_SEND_ENVELOPE_SUM_MAX)*sizeof(CfpEnvelopeStruct)));
chStepCheck = GetAxisSeqFromLinkSeq(&wLinkId, 1u, tmpAcIdBuf, &tmpACCnt, AC_MAXCNT_IN_SWITCH);
chDir = GetCfpLocDir(wCfpId);
if ((CI_SUCCESS == chStepCheck) && (0u != tmpACCnt))
{
;
}
else
{/* 将包络信息添加到分界点动态数据 */
g_CutoffPointDataBuf[wIndex].chLocalTiocEnvelopeNum = chEnvelopeNum;
for (chEnvelopeIndex = 0u; chEnvelopeIndex < chEnvelopeNum; chEnvelopeIndex++)
for (chCfpAcIndex = 0U; chCfpAcIndex < tmpACCnt; chCfpAcIndex++)
{
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].envelopeType = szTmpEnvelope[chEnvelopeIndex].envelopeType;
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].headTrainID = szTmpEnvelope[chEnvelopeIndex].headTrainID;
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].tailTrainID = szTmpEnvelope[chEnvelopeIndex].tailTrainID;
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos = szTmpEnvelope[chEnvelopeIndex].startPos;
wLinkTioc = GetLinkManageTiocById(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos.Lnk);
/* 内部优化 20220419 wqm 编码规范:函数dsuCheckSameLoc返回值需要变量承接*/
if (wLinkTioc != chLocalId)
chEnvelopeNum = elm_GetEnvelopeInAC(tmpAcIdBuf[chCfpAcIndex], szTmpEnvelope);
chFail = CI_SUCCESS;
if (SECTION_REL_ENVELOPE_SUM_MAX == chEnvelopeNum)
{
(void)dsuCheckSameLoc(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos.Lnk, \
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos.Off, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos.Lnk, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos.Off);
/*查找失败 添加坏车包络*/
chEnvelopeNum = 1U;
(void)elm_CreatTempUKTEnvelope(tmpAcIdBuf[chCfpAcIndex], chDir, &szTmpEnvelope[0]);
}
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos = szTmpEnvelope[chEnvelopeIndex].endPos;
wLinkTioc = GetLinkManageTiocById(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos.Lnk);
if (wLinkTioc != chLocalId)
/*将包络信息添加到分界点动态数据 */
g_CutoffPointDataBuf[wIndex].chLocalTiocEnvelopeNum += chEnvelopeNum;
for (chEnvelopeIndex = 0U; chEnvelopeIndex < chEnvelopeNum; chEnvelopeIndex++)
{
(void)dsuCheckSameLoc(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos.Lnk, \
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos.Off, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos.Lnk, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos.Off);
}
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].trianCnt = szTmpEnvelope[chEnvelopeIndex].trianCnt;
(void)CommonMemCpy(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].trainID, (UINT32)sizeof(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].trainID), \
szTmpEnvelope[chEnvelopeIndex].trainID, (UINT32)sizeof(szTmpEnvelope[chEnvelopeIndex].trainID));
chStepCheck = CutCfpOtherOcEData(tmpAcIdBuf[chCfpAcIndex], &szTmpEnvelope[chEnvelopeIndex], chDir);
if (CI_ERROR == chStepCheck)
{
/*截取失败设置坏车*/
(void)elm_CreatTempUKTEnvelope(tmpAcIdBuf[chCfpAcIndex], chDir, &szTmpEnvelope[chEnvelopeIndex]);
}
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].envelopeType = szTmpEnvelope[chEnvelopeIndex].envelopeType;
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].headTrainID = szTmpEnvelope[chEnvelopeIndex].headTrainID;
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].tailTrainID = szTmpEnvelope[chEnvelopeIndex].tailTrainID;
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos = szTmpEnvelope[chEnvelopeIndex].startPos;
wLinkTioc = GetLinkManageTiocById(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos.Lnk);
/* 内部优化 20220419 wqm 编码规范:函数dsuCheckSameLoc返回值需要变量承接*/
if (wLinkTioc != chLocalId)
{
(void)dsuCheckSameLoc(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos.Lnk, \
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos.Off, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos.Lnk, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos.Off);
}
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos = szTmpEnvelope[chEnvelopeIndex].endPos;
wLinkTioc = GetLinkManageTiocById(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos.Lnk);
if (wLinkTioc != chLocalId)
{
(void)dsuCheckSameLoc(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos.Lnk, \
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos.Off, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos.Lnk, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos.Off);
}
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].trianCnt = szTmpEnvelope[chEnvelopeIndex].trianCnt;
(void)CommonMemCpy(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].trainID, (UINT32)sizeof(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].trainID), \
szTmpEnvelope[chEnvelopeIndex].trainID, (UINT32)sizeof(szTmpEnvelope[chEnvelopeIndex].trainID));
(void)CommonMemCpy(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].ACTPort, (UINT32)sizeof(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].ACTPort), \
szTmpEnvelope[chEnvelopeIndex].ACTPort, (UINT32)sizeof(szTmpEnvelope[chEnvelopeIndex].ACTPort));
(void)CommonMemCpy(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].ACTPort, (UINT32)sizeof(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].ACTPort), \
szTmpEnvelope[chEnvelopeIndex].ACTPort, (UINT32)sizeof(szTmpEnvelope[chEnvelopeIndex].ACTPort));
}
if (0U == chEnvelopeNum)
{
/*分界点无包络计轴 向本联锁内方继续查找*/
chStepCheck = GetAcSwitchPosCheck(tmpAcIdBuf[chCfpAcIndex]);/*本计轴道岔位置不满足时停止检查*/
dwCheckAcLen = GetAxisSecTotalLen(tmpAcIdBuf[chCfpAcIndex]);
if ((dwArbProtectLen > dwCheckAcLen) && (CI_TYPE_CLD != chLocalCiType)&&(CI_SUCCESS == chStepCheck))
{
chFirstStepAcCnt = elm_PrepareAdjacentAC(tmpAcIdBuf[chCfpAcIndex], chDir, wFirstStepID, &chChangePoint);
if (AC_MAXCNT_IN_SWITCH < chFirstStepAcCnt)
{
chFail = CI_ERROR;
(void)elm_CreatTempUKTEnvelope(tmpAcIdBuf[chCfpAcIndex], chDir, &szTmpEnvelope[0]);
(void)CutCfpOtherOcEData(tmpAcIdBuf[chCfpAcIndex], &szTmpEnvelope[0], chDir);
}
else
{
for (ii = 0U; ii < chFirstStepAcCnt; ii++)
{
chAcBelongTioc = GetAxisSectionBelongCiId(tmpAcIdBuf[chCfpAcIndex]);
if (chAcBelongTioc == chLocalId)
{
chStepCheck = SetCfpLocalArbDistanceData(wFirstStepID[ii], wCfpId, chDir);
dwFirstStepAcLen = GetAxisSecTotalLen(wFirstStepID[ii]);
if ((dwArbProtectLen > (dwCheckAcLen + dwFirstStepAcLen)) && (CI_SUCCESS == chStepCheck))
{
chNextDir = TransDirectionPointDir(chChangePoint, chDir, &chPointNum);
chSndStepAcCnt = elm_PrepareAdjacentAC(wFirstStepID[ii], chNextDir, wSndStepID, &chChangePoint);
if (AC_MAXCNT_IN_SWITCH < chFirstStepAcCnt)
{
chFail = CI_ERROR;
(void)elm_CreatTempUKTEnvelope(wFirstStepID[ii], chNextDir, &szTmpEnvelope[0]);
(void)CutCfpOtherOcEData(wFirstStepID[ii], &szTmpEnvelope[0], chNextDir);
}
else
{
for (jj = 0U; jj < chSndStepAcCnt; jj++)
{
chAcBelongTioc = GetAxisSectionBelongCiId(tmpAcIdBuf[chCfpAcIndex]);
if (chAcBelongTioc == chLocalId)
{
(void)SetCfpLocalArbDistanceData(wSndStepID[jj], wCfpId, chNextDir);
}
/*不继续添加*/
}
}
}
else
{
;/*不查找下一计轴*/
}
}
}
}
if (CI_ERROR == chFail)
{
/* 异常防护 生成UKT*/
chEnvelopeIndex = g_CutoffPointDataBuf[wIndex].chLocalTiocEnvelopeNum;
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].envelopeType = szTmpEnvelope[0].envelopeType;
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].headTrainID = szTmpEnvelope[0].headTrainID;
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].tailTrainID = szTmpEnvelope[0].tailTrainID;
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos = szTmpEnvelope[0].startPos;
wLinkTioc = GetLinkManageTiocById(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos.Lnk);
/* 内部优化 20220419 wqm 编码规范:函数dsuCheckSameLoc返回值需要变量承接*/
if (wLinkTioc != chLocalId)
{
(void)dsuCheckSameLoc(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos.Lnk, \
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos.Off, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos.Lnk, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].startPos.Off);
}
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos = szTmpEnvelope[0].endPos;
wLinkTioc = GetLinkManageTiocById(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos.Lnk);
if (wLinkTioc != chLocalId)
{
(void)dsuCheckSameLoc(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos.Lnk, \
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos.Off, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos.Lnk, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].endPos.Off);
}
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].trianCnt = szTmpEnvelope[0].trianCnt;
(void)CommonMemCpy(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].trainID, (UINT32)sizeof(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].trainID), \
szTmpEnvelope[0].trainID, (UINT32)sizeof(szTmpEnvelope[0].trainID));
(void)CommonMemCpy(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].ACTPort, (UINT32)sizeof(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[chEnvelopeIndex].ACTPort), \
szTmpEnvelope[0].ACTPort, (UINT32)sizeof(szTmpEnvelope[0].ACTPort));
g_CutoffPointDataBuf[wIndex].chLocalTiocEnvelopeNum++;
}
}
}
else
{
;/*找到列车包络 不再查找该计轴后续方向*/
}
}
}
else
{
}
}
else
{
@@ -739,7 +879,7 @@ void SetCfpLocalOcEData(const UINT16 wCfpId)
* @param CfpEnvelopeStruct szEnvelope 包络数据
* @return 包络数量
*/
UINT8 GetOtherOcEnvelope(const UINT16 wOtherOc, CfpEnvelopeStruct szEnvelope[SECTION_REL_ENVELOPE_SUM_MAX * ONE_OTHER_CFP_SUM_MAX])
UINT8 GetOtherOcEnvelope(const UINT16 wOtherOc, CfpEnvelopeStruct szEnvelope[OTHER_RC_SEND_ENVELOPE_SUM_MAX * ONE_OTHER_CFP_SUM_MAX])
{
UINT16 wCfpIndex = 0u;
UINT16 wCfpId = 0u;
@@ -880,22 +1020,16 @@ UINT8 GetCfpLocalOcCtNum(const UINT16 wCfpId)
/**
* @brief 截取分界点相邻OC发来的包络数据
* @param wCfpId 分界点ID
* @param CfpEnvelopeStruct* strEnvelope 包络数据
* @param wAcId 截取计轴ID UINT8 chDir 方向
* @param EnvelopeStruct* strEnvelope 包络数据
* @return CI_ ERROR 截取失败
* CI_ SUCCESS 截取成功
* by cgh 20240111
* modify fan20260413:按照计轴进行包络截取
*/
UINT8 CutCfpOtherOcEData(const UINT16 wCfpId, CfpEnvelopeStruct* strEnvelope)
UINT8 CutCfpOtherOcEData(const UINT16 wAcId, EnvelopeStruct* strEnvelope, UINT8 chDir)
{
UINT8 chReval = CI_ERROR;
UINT8 chLocalCiId = 0U;/*本地联锁ID*/
UINT16 wLinkTioc = 0U;/*LINK所属联锁ID*/
UINT16 wCfpLinkId = 0U;/*分界点LINK ID*/
UINT32 dwCfpLinkOffset = 0U;/*分界点LINK偏移量*/
UINT16 wCfpSameLocLinkId = 0U;/*分界点同位点LINK ID*/
UINT32 dwCfpSameLocLinkOffset = 0U;/*分界点同位点LINK偏移量*/
UINT16 wLinkBelongAxieId = 0U;/*LINK所属计轴区段ID*/
UINT8 chAxieIncLinkSum = 0U;/*计轴区段包含LINK数目*/
UINT16* szAxieIncLink = NULL;/*计轴区段包含LINK*/
UINT8 ii = 0U;
@@ -904,111 +1038,85 @@ UINT8 CutCfpOtherOcEData(const UINT16 wCfpId, CfpEnvelopeStruct* strEnvelope)
UINT8 chEnvelopeEndFlag = 0U;/*包络终端是否在计轴区段标志*/
ELM_AxisLocStruct tmpAxieSecLoc = { 0U };/*计轴区段位置*/
if (CUTOFF_POINT_SUM_MAX > wCfpId)
if (AXIS_SECTION_SUM_MAX > wAcId)
{
/*只截取UCT包络*/
if ((TYPE_UCT_ENVELOPE == strEnvelope->envelopeType) || (TYPE_CT_ENVELOPE == strEnvelope->envelopeType))
{
chLocalCiId = GetSystemParaLocalCiId();
wCfpLinkId = GetCfpLink(wCfpId);
dwCfpLinkOffset = GetCfpOffset(wCfpId);
wLinkTioc = GetLinkManageTiocById(wCfpLinkId);
if (chLocalCiId == wLinkTioc)
{
/*分界点数据配置的位置为本联锁,需要转换为相邻联锁的同位点*/
chKeepFlag = dsuCheckSameLoc(wCfpLinkId, dwCfpLinkOffset, &wCfpSameLocLinkId, &dwCfpSameLocLinkOffset);
}
else
{
/*分界点LINK属于相邻联锁,此时使用分界点对应的LINK数据*/
chKeepFlag = CI_SUCCESS;
wCfpSameLocLinkId = wCfpLinkId;
dwCfpSameLocLinkOffset = dwCfpLinkOffset;
}
chAxieIncLinkSum = GetAxisLinkSum(wAcId);
szAxieIncLink = GetAxisLinkIdBuf(wAcId);
chKeepFlag = elm_PrepareACLoc(wAcId, chDir, &tmpAxieSecLoc);
if (CI_SUCCESS == chKeepFlag)
{
wLinkBelongAxieId = GetLinkBelongAcId(wCfpSameLocLinkId);
chAxieIncLinkSum = GetAxisLinkSum(wLinkBelongAxieId);
szAxieIncLink = GetAxisLinkIdBuf(wLinkBelongAxieId);
chKeepFlag = elm_PrepareACLoc(wLinkBelongAxieId, ELM_DIR_SAME, &tmpAxieSecLoc);
if (CI_SUCCESS == chKeepFlag)
for (ii = 0U; ii < chAxieIncLinkSum; ii++)
{
for (ii = 0U; ii < chAxieIncLinkSum; ii++)
if (szAxieIncLink[ii] == strEnvelope->startPos.Lnk)
{
if (szAxieIncLink[ii] == strEnvelope->startPos.Lnk)
{
chEnvelopeStartFlag = CI_SUCCESS;
break;
}
else
{
; /*继续找*/
}
}
for (ii = 0U; ii < chAxieIncLinkSum; ii++)
{
if (szAxieIncLink[ii] == strEnvelope->endPos.Lnk)
{
chEnvelopeEndFlag = CI_SUCCESS;
break;
}
else
{
; /*继续找*/
}
}
chReval = CI_SUCCESS;
if ((CI_SUCCESS == chEnvelopeStartFlag) && (CI_SUCCESS == chEnvelopeEndFlag))
{
; /*包络始端端均在计轴区段内,不截取*/
}
else if (CI_SUCCESS == chEnvelopeStartFlag)
{
/*包络始端在计轴区段内*/
strEnvelope->endPos.Dir = strEnvelope->startPos.Dir;
if (EMAP_SAME_DIR == strEnvelope->startPos.Dir)
{
/*包络始端方向为逻辑正方向,截取的包络终端为计轴区段终点*/
strEnvelope->endPos.Lnk = tmpAxieSecLoc.endPos.Lnk;
strEnvelope->endPos.Off = tmpAxieSecLoc.endPos.Off;
}
else
{
/*包络始端方向为逻辑反方向,截取的包络终端为计轴区段起点*/
strEnvelope->endPos.Lnk = tmpAxieSecLoc.startPos.Lnk;
strEnvelope->endPos.Off = tmpAxieSecLoc.startPos.Off;
}
}
else if (CI_SUCCESS == chEnvelopeEndFlag)
{
/*包络终端在计轴区段内*/
strEnvelope->startPos.Dir = strEnvelope->endPos.Dir;
if (EMAP_SAME_DIR == strEnvelope->endPos.Dir)
{
/*包络尾方向为逻辑正方向,截取的包络终端为计轴区段起点*/
strEnvelope->startPos.Lnk = tmpAxieSecLoc.startPos.Lnk;
strEnvelope->startPos.Off = tmpAxieSecLoc.startPos.Off;
}
else
{
/*包络尾方向为逻辑反方向,截取的包络终端为计轴区段终点*/
strEnvelope->startPos.Lnk = tmpAxieSecLoc.endPos.Lnk;
strEnvelope->startPos.Off = tmpAxieSecLoc.endPos.Off;
}
chEnvelopeStartFlag = CI_SUCCESS;
break;
}
else
{
chReval = CI_ERROR;
; /*继续找*/
}
}
for (ii = 0U; ii < chAxieIncLinkSum; ii++)
{
if (szAxieIncLink[ii] == strEnvelope->endPos.Lnk)
{
chEnvelopeEndFlag = CI_SUCCESS;
break;
}
else
{
; /*继续找*/
}
}
chReval = CI_SUCCESS;
if ((CI_SUCCESS == chEnvelopeStartFlag) && (CI_SUCCESS == chEnvelopeEndFlag))
{
; /*包络始端端均在计轴区段内,不截取*/
}
else if (CI_SUCCESS == chEnvelopeStartFlag)
{
/*包络始端在计轴区段内*/
strEnvelope->endPos.Dir = strEnvelope->startPos.Dir;
if (EMAP_SAME_DIR == strEnvelope->startPos.Dir)
{
/*包络始端方向为逻辑正方向,截取的包络终端为计轴区段终点*/
strEnvelope->endPos.Lnk = tmpAxieSecLoc.endPos.Lnk;
strEnvelope->endPos.Off = tmpAxieSecLoc.endPos.Off;
}
else
{
/*包络始端方向为逻辑反方向,截取的包络终端为计轴区段起点*/
strEnvelope->endPos.Lnk = tmpAxieSecLoc.startPos.Lnk;
strEnvelope->endPos.Off = tmpAxieSecLoc.startPos.Off;
}
}
else if (CI_SUCCESS == chEnvelopeEndFlag)
{
/*包络终端在计轴区段内*/
strEnvelope->startPos.Dir = strEnvelope->endPos.Dir;
if (EMAP_SAME_DIR == strEnvelope->endPos.Dir)
{
/*包络尾方向为逻辑正方向,截取的包络终端为计轴区段起点*/
strEnvelope->startPos.Lnk = tmpAxieSecLoc.startPos.Lnk;
strEnvelope->startPos.Off = tmpAxieSecLoc.startPos.Off;
}
else
{
/*包络尾方向为逻辑反方向,截取的包络终端为计轴区段终点*/
strEnvelope->startPos.Lnk = tmpAxieSecLoc.endPos.Lnk;
strEnvelope->startPos.Off = tmpAxieSecLoc.endPos.Off;
}
}
else
{
; /*返回失败*/
chReval = CI_ERROR;
}
}
else
@@ -1728,4 +1836,86 @@ void CfpTrainInfoCal(UINT16 wLinkId, UINT32 dwOffSet, UINT32 dwLocalOffSet, CfpT
trainInfo->dwDis = dwLocalOffSet + dwDis;
}
}
}
/**
* @brief 根据分界点内方计轴向内查找ARB防护距离内可达计轴上包络
* 输入参数: wAcId 本联锁分界点计轴 wCfpId分界点 UINT8 chDir 方向
* 返回值: CI_SUCCESS(计轴无包络 需继续查找) CI_ERROR(计轴存在包络)
* Create fanwen 2026.4.13
**/
UINT8 SetCfpLocalArbDistanceData(const UINT16 wAcId, const UINT16 wCfpId,UINT8 chDir)
{
UINT8 retVal = CI_ERROR;
UINT8 chEnvelopeNum = 0U;
EnvelopeStruct szTmpEnvelope[SECTION_REL_ENVELOPE_SUM_MAX] = { 0u };
UINT16 wIndex = GetCfpBufIndex(wCfpId);
UINT8 ii = 0u;/*索引*/
UINT8 chLocalId = 0u;
UINT16 wLinkTioc = 0u;
UINT8 chCurNum = 0U;
UINT8 chStepCheck = CI_ERROR;
chLocalId = GetSystemParaLocalCiId();
chEnvelopeNum = elm_GetEnvelopeInAC(wAcId, szTmpEnvelope);
chCurNum = g_CutoffPointDataBuf[wIndex].chLocalTiocEnvelopeNum;
if (SECTION_REL_ENVELOPE_SUM_MAX == chEnvelopeNum)
{
/*查找失败 添加坏车包络*/
chEnvelopeNum = 1U;
(void)elm_CreatTempUKTEnvelope(wAcId, chDir, &szTmpEnvelope[0]);
}
if (0U != chEnvelopeNum)
{
if (OTHER_RC_SEND_ENVELOPE_SUM_MAX > chCurNum + chEnvelopeNum)
{
/* 将包络信息添加到分界点动态数据 */
g_CutoffPointDataBuf[wIndex].chLocalTiocEnvelopeNum = chCurNum + chEnvelopeNum;
for (ii = 0U; ii < chEnvelopeNum; ii ++)
{
/*仅截取本计轴*/
chStepCheck = CutCfpOtherOcEData(wAcId, &szTmpEnvelope[ii], chDir);
if (CI_ERROR == chStepCheck)
{
/*截取失败设置坏车*/
(void)elm_CreatTempUKTEnvelope(wAcId, chDir, &szTmpEnvelope[ii]);
}
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].envelopeType = szTmpEnvelope[ii].envelopeType;
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].headTrainID = szTmpEnvelope[ii].headTrainID;
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].tailTrainID = szTmpEnvelope[ii].tailTrainID;
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].startPos = szTmpEnvelope[ii].startPos;
wLinkTioc = GetLinkManageTiocById(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].startPos.Lnk);
/* 内部优化 20220419 wqm 编码规范:函数dsuCheckSameLoc返回值需要变量承接*/
if (wLinkTioc != (UINT16)chLocalId)
{
(void)dsuCheckSameLoc(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].startPos.Lnk, \
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].startPos.Off, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].startPos.Lnk, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].startPos.Off);
}
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].endPos = szTmpEnvelope[ii].endPos;
wLinkTioc = GetLinkManageTiocById(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].endPos.Lnk);
if (wLinkTioc != (UINT16)chLocalId)
{
(void)dsuCheckSameLoc(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].endPos.Lnk, \
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].endPos.Off, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].endPos.Lnk, \
&g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].endPos.Off);
}
g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].trianCnt = szTmpEnvelope[ii].trianCnt;
(void)CommonMemCpy(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].trainID, (UINT32)sizeof(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].trainID), \
szTmpEnvelope[ii].trainID, (UINT32)sizeof(szTmpEnvelope[ii].trainID));
(void)CommonMemCpy(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].ACTPort, (UINT32)sizeof(g_CutoffPointDataBuf[wIndex].szLocalEnvelope[ii + chCurNum].ACTPort), \
szTmpEnvelope[ii].ACTPort, (UINT32)sizeof(szTmpEnvelope[ii].ACTPort));
}
}
else
{
;
}
}
else
{
retVal = CI_SUCCESS;/*对应计轴无包络*/
}
return retVal;
}
@@ -65,9 +65,9 @@ typedef struct
CfpTrainInfoStru otherTiocTrainInfo; /* 接收到的其他联锁的列车信息 */
CfpTrainInfoStru localTiocTrainInfo; /* 待发送到其他联锁的列车信息 */
UINT8 chLocalTiocEnvelopeNum; /* 待发送到其他联锁的包络数量 */
CfpEnvelopeStruct szLocalEnvelope[SECTION_REL_ENVELOPE_SUM_MAX]; /* 待发送到其他联锁的包络数量 */
CfpEnvelopeStruct szLocalEnvelope[OTHER_RC_SEND_ENVELOPE_SUM_MAX]; /* 待发送到其他联锁的包络数量 */
UINT8 chOtherTiocEnvelopeNum; /* 接收到的其他联锁的包络数量 */
CfpEnvelopeStruct szOtherEnvelope[SECTION_REL_ENVELOPE_SUM_MAX]; /* 接收到的其他联锁的包络信息 */
CfpEnvelopeStruct szOtherEnvelope[OTHER_RC_SEND_ENVELOPE_SUM_MAX]; /* 接收到的其他联锁的包络信息 */
UINT8 chCtNum; /* 分界点通信车数量 */
CfpCtTrainStruct szLocalCtTrain[TRAIN_SUM_MAX]; /* 分界点通信车信息 */
CfpRRMDataStruct szCfpRRMData; /* 分界点远程RM数据*/
@@ -179,7 +179,7 @@ void SetCfpLocalOcEData(const UINT16 wCfpId);
* @param CfpEnvelopeStruct szEnvelope 包络数据
* @return 包络数量
*/
UINT8 GetOtherOcEnvelope(const UINT16 wOtherOc, CfpEnvelopeStruct szEnvelope[SECTION_REL_ENVELOPE_SUM_MAX * ONE_OTHER_CFP_SUM_MAX]);
UINT8 GetOtherOcEnvelope(const UINT16 wOtherOc, CfpEnvelopeStruct szEnvelope[OTHER_RC_SEND_ENVELOPE_SUM_MAX * ONE_OTHER_CFP_SUM_MAX]);
/*
* 功能描述: 获取边界点数据存储地址
@@ -212,13 +212,13 @@ UINT8 GetCfpLocalOcCtNum(const UINT16 wCfpId);
/**
* @brief 截取分界点相邻OC发来的包络数据
* @param wCfpId 分界点ID
* @param CfpEnvelopeStruct* strEnvelope 包络数据
* @param wAcId 截取计轴ID
* @param EnvelopeStruct* strEnvelope 包络数据 chDir方向
* @return CI_ ERROR 截取失败
* CI_ SUCCESS 截取成功
* by cgh 20240111
*/
UINT8 CutCfpOtherOcEData(const UINT16 wCfpId,CfpEnvelopeStruct* strEnvelope);
UINT8 CutCfpOtherOcEData(const UINT16 wAcId, EnvelopeStruct* strEnvelope, UINT8 chDir);
/**
* @brief 获取分界点跨控区RRM源RC ID
@@ -367,6 +367,14 @@ void OtherCfpTrainInfoCal(UINT16 wLinkId, UINT32 dwOffSet, UINT32 dwLocalOffSet,
*/
void CfpTrainInfoCal(UINT16 wLinkId, UINT32 dwOffSet, UINT32 dwLocalOffSet, CfpTrainInfoStru* trainInfo, UINT8 cDir);
/**
* @brief 根据分界点内方计轴向内查找ARB防护距离内可达计轴上包络
* 输入参数: wAcId 本联锁分界点计轴 wCfpId分界点 UINT8 chDir 方向
* 返回值: CI_SUCCESS(计轴无包络 需继续查找) CI_ERROR(计轴存在包络)
* Create fanwen 2026.4.13
**/
UINT8 SetCfpLocalArbDistanceData(const UINT16 wAcId, const UINT16 wCfpId, UINT8 chDir);
#ifdef __cplusplus
}
#endif
+227 -35
View File
@@ -21,6 +21,7 @@
#include "dquCIInterFace.h"
#include "LogicalRouteDataManage.h"
#include "../LogicProcess/LogicalRouteLogicCheck.h"
#include "InterlockLogicCheck.h"
UINT8 AllSignalBrightFlag = CI_ALL_SIGNAL_BRIGHT_NO; /*全站亮灯标志*/
@@ -5949,6 +5950,8 @@ UINT8 CheckJumpLockApply(UINT16 axisSectionId)
UINT8 routeTrainNear = 0u;
UINT8 physicalCheck = 0u;
UINT8 phyPLockRouteState = 0u;
UINT16 devId = 0u; /*设备ID*/
UINT8 devState = 0u; /*设备状态*/
physicalSecId = GetAxisSecRelativePhySecId(axisSectionId);
routeRlockId = GetPhySecRLockBelongRouteId(physicalSecId);/*物理区段进路锁闭所属进路ID*/
@@ -6093,9 +6096,41 @@ UINT8 CheckJumpLockApply(UINT16 axisSectionId)
}
}
}
/*计轴区段内所有道岔未引导总锁*/
if (CI_SUCCESS == reVal)
{
devId = 0u;
devState = 0u;
reVal = AxisSecSwitchYZLockCheck(axisSectionId, &devId, &devState);
}
/*计轴区段的防护道岔未引导总锁*/
if (CI_SUCCESS == reVal)
{
devId = 0u;
devState = 0u;
reVal = AxisSecProtSwtYLockCheck(axisSectionId, &devId, &devState);
}
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;
}
/*
* ID前IDUT占用
* UINT16 routeId, ID
@@ -6222,6 +6257,8 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId)
UINT8 logSecLockState = 0U;
UINT8 logSecLockRouteNum = 0U;
UINT8 chFailStep = 0U;
UINT8 cYLockAlarmFlag = FLAG_UNSET; /*引导总锁报警标志*/
UINT8 cYLockState = 0U; /*引导总锁状态*/
bufIndex = GetlogSectionBufIndex(logSectionId); /*获取区段数组下标*/
/**区段下标合法*/
@@ -6238,7 +6275,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId)
logicCheck = LogicIntruSecVainCheck(logSectionId, &devId, &devState); /*逻辑区段侵限检查*/
logSecLockState = GetLogSecLogLockState(logSectionId);
logSecLockRouteNum = GetLogSecLockBelLogRouteSum(logSectionId);
if (NULL == pLgcSecSwitchStru)
{
reVal = CI_ERROR;
@@ -6253,12 +6290,12 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId)
{
/*调车进路锁闭*/
reVal = CI_ERROR;
chFailStep = 1U;
chFailStep = 1U;
}
}
if (CI_SUCCESS == reVal)
{
if ((0u < logSecLockRouteNum) ||(LOG_SECTION_LOGLOCK_NO != logSecLockState))
if ((0u < logSecLockRouteNum) || (LOG_SECTION_LOGLOCK_NO != logSecLockState))
{
/*逻辑区段存在逻辑进路锁闭锁闭*/
reVal = CI_ERROR;
@@ -6282,7 +6319,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId)
|| ((LOGICSECTION_OCCUPY_CT == curLogSecOccState) && (CI_ERROR == checkSulicTrain)))
{
reVal = CI_ERROR;
chFailStep =3U;
chFailStep = 3U;
break;
}
else
@@ -6301,7 +6338,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId)
routeLevel = GetRouteLevel(routePlockId); /*获取防护锁闭所属进路监督级别*/
phyPLockRouteState = GetRouteState(routePlockId); /*获取进路状态*/
/** VBTC进路 */
/** VBTC进路 */
if (ROUTE_LEVEL_CBTC == routeLevel)
{
reVal = CI_SUCCESS; /*返回成功*/
@@ -6348,7 +6385,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId)
if ((CI_SUCCESS == reVal) && (0u < routeRlockId))
{
routeLevel = GetRouteLevel(routeRlockId); /*获取锁闭所属进路监督级别*/
/*点式*/
/*点式*/
if (ROUTE_LEVEL_BLOC == routeLevel)
{
routeTrainNear = RouteHaveTrainNear(routeRlockId);
@@ -6372,7 +6409,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId)
if ((0u != chLgcSecSwitchSum) && (NULL != pLgcSecSwitchStru))
{
for (ii = 0u; ii< chLgcSecSwitchSum; ii++)
for (ii = 0u; ii < chLgcSecSwitchSum; ii++)
{
curSwitchId = pLgcSecSwitchStru[ii].SwitchId;
if ((0u != curSwitchId) && (UINT16_MAX != curSwitchId))
@@ -6380,8 +6417,11 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId)
switchCurPosition = GetSwitchCurPosition(curSwitchId); /*获取道岔当前位置*/
retFlag = checkSwtLastValDrvPosStayorNot(curSwitchId, switchCurPosition); /*检查道岔上一次驱动是否还在有效期*/
switchFLockState = GetSwitchFLockState(curSwitchId); /*获取道岔封锁状态*/
if ((pLgcSecSwitchStru[ii].SwitchPosition != switchCurPosition) || (CI_ERROR == retFlag) || (SWITCH_LOCK_FENGSUO_YES == switchFLockState))
{/*(判断当前计轴包含的道岔位置与道岔当前的位置有一个不同)或(某个道岔上一次驱动仍然有效)或(道岔封锁)*/
cYLockState = GetSwitchYLockState(curSwitchId);
if ((pLgcSecSwitchStru[ii].SwitchPosition != switchCurPosition) || (CI_ERROR == retFlag) || (SWITCH_LOCK_FENGSUO_YES == switchFLockState)
|| (SWITCH_LOCK_YINZONG_NO != cYLockState))
{/*(判断当前计轴包含的道岔位置与道岔当前的位置有一个不同)或(某个道岔上一次驱动仍然有效)或(道岔封锁)或(道岔引导总锁)*/
reVal = CI_ERROR;
chFailStep = 8U;
break;
@@ -6487,8 +6527,31 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId)
reVal = CI_SUCCESS;
}
}
if (CI_SUCCESS == reVal)
{/*防护道岔封锁状态检查*/
devId = 0u; /*设备ID*/
devState = 0u; /*设备状态*/
reVal = LogicSecRltvPrtctSwFLockCheck(logSectionId, &devId, &devState, &cYLockAlarmFlag);/*封锁检查*/
if (CI_SUCCESS != reVal)
{
chFailStep = 13U;
}
}
if (CI_SUCCESS == reVal)
{/*防护道岔位置检查*/
devId = 0u; /*设备ID*/
devState = 0u; /*设备状态*/
reVal = LogicSecRltvPrtctSwPosCheck(logSectionId, &devId, &devState);/*位置检查*/
if (CI_SUCCESS != reVal)
{
chFailStep = 14U;
}
}
}
else
else
{
reVal = CI_ERROR;
}
@@ -6788,10 +6851,17 @@ UINT8 JumpLockDriveSwitch(const UINT16 axisSecId)
AxisSwitchStruct* pRouteSwitchStru = NULL; /*道岔数据结构指针*/
UINT8 innerSwitchRetVal = CI_ERROR; /*检查计轴区段内道岔是否可被驱动的结果*/
AxisSwitchStruct* pProtectSwitchStru = NULL; /*防护道岔数据结构指针*/
UINT8 protectSwitchSum = 0u;
switchSum = GetAxisSwitchSum(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;
}
@@ -6800,13 +6870,13 @@ UINT8 JumpLockDriveSwitch(const UINT16 axisSecId)
innerSwitchRetVal = CI_SUCCESS;
/* 单操相反位置取消驱动检查 */
for(ii = 0u; ii < switchSum; ii++)
for (ii = 0u; ii < switchSum; ii++)
{
switchId = pRouteSwitchStru[ii].SwitchId;
switchExpPosition = pRouteSwitchStru[ii].SwitchPosition;
switchDancaoPosition = GetSwitchDanCaoPostition(switchId);
if( (SWITCH_POSITION_INVALID == switchDancaoPosition)
if ((SWITCH_POSITION_INVALID == switchDancaoPosition)
||
(switchDancaoPosition == switchExpPosition))
{/*单操无效 或者 单操位置与动作位置一样*/
@@ -6819,8 +6889,34 @@ UINT8 JumpLockDriveSwitch(const UINT16 axisSecId)
break;
}
}
if(innerSwitchRetVal == CI_SUCCESS)
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)
{
/*驱动计轴区段道岔*/
AxisSecDrvInnerSwitch(axisSecId, SWITCH_NEED_DRIV_TRUE);
@@ -6829,16 +6925,16 @@ UINT8 JumpLockDriveSwitch(const UINT16 axisSecId)
{
AxisSecDrvInnerSwitch(axisSecId, SWITCH_NEED_DRIV_FALSE);
}
}
return innerSwitchRetVal;
}
/*
:
:
: const UINT16 axisSecId ID
: const UINT8 DrivFlag
:
@@ -6850,22 +6946,36 @@ void AxisSecDrvInnerSwitch(const UINT16 axisSecId, const UINT8 DrivFlag)
UINT8 switchExpPos = 0u; /*道岔期望位置*/
AxisSwitchStruct* pAxisSecSwitchStru = NULL; /*道岔数据*/
UINT8 ii = 0u; /*循环变量*/
UINT8 funRtn = CI_ERROR;
AxisSwitchStruct* pProtectSwitchStru = NULL; /*防护道岔数据结构指针*/
UINT8 protectSwitchSum = 0u;
switchSum = GetAxisSwitchSum(axisSecId); /*获取计轴区段道岔数目*/
pAxisSecSwitchStru = GetAxisSwitchIdStru(axisSecId); /*获取计轴区段内道岔数据*/
if(SWITCH_NEED_DRIV_TRUE == DrivFlag)
{/*需要驱动计轴区段内道岔*/
protectSwitchSum = GetAxisSecRelateProSwSum(axisSecId);
pProtectSwitchStru = GetAxisSecRelateProSwStru(axisSecId);
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;
(void)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); /*设置计轴区段内道岔的驱动状态为驱动中*/
}
}
}
@@ -7319,20 +7429,20 @@ UINT8 GetSwitchLogSecLockState(UINT16 switchId, UINT16* logOccOrLockId, UINT8* p
UINT8 retValue = CI_ERROR;
UINT8 chLogSecLogLockState = 0U; /*逻辑区段逻辑锁闭状态*/
UINT8 cLockBelongLogicRouteNum = 0U; /*逻辑区段逻辑锁闭所属逻辑进路数量*/
UINT8 chLogSecJumpLockState = 0U;
/*获取道岔关联逻辑区段信息*/
logSecSum = GetSwitchLogSecSum(switchId);
logSecBuf = GetSwitchLogSecBuf(switchId);
/*逻辑区段数据正常*/
if(0u != logSecSum)
if (0u != logSecSum)
{
/*检查逻辑区段锁闭状态*/
for(i = 0u; i < logSecSum; i++)
for (i = 0u; i < logSecSum; i++)
{
logLockState = GetLogSecLockState(logSecBuf[i]);
/*找到锁闭区段*/
if(LOG_SECTION_LOCK_NO != logLockState)
if (LOG_SECTION_LOCK_NO != logLockState)
{
*logOccOrLockId = logSecBuf[i];
*pState = logLockState;
@@ -7343,8 +7453,9 @@ UINT8 GetSwitchLogSecLockState(UINT16 switchId, UINT16* logOccOrLockId, UINT8* p
/*检查逻辑区段逻辑锁闭状态*/
chLogSecLogLockState = GetLogSecLogLockState(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;
}
@@ -7359,7 +7470,7 @@ UINT8 GetSwitchLogSecLockState(UINT16 switchId, UINT16* logOccOrLockId, UINT8* p
if (CI_ERROR == retValue)
{
break; /*有条件检查不通过,跳出*/
}
}
}
}
else
@@ -11366,4 +11477,85 @@ UINT16 GetRouteFirstLockedLogSecId(UINT16 wRouteId)
}
return wRetVal;
}
}
/*
:
:
const UINT16 ID
:
.
:
add by mpt 20260403
*/
void ClearLogSeceSwitchDanCaoPos(const UINT16 logicSecId)
{
UINT8 switchSum = 0u; /*道岔数目*/
UINT16 switchId = 0u; /*道岔ID*/
UINT8 ii = 0u; /*循环变量*/
UINT8 checkSum = 0u;
LogsecSwitchStruct* dataIdBuf = NULL;
UINT8 chLogicSecSwitchSum = 0U;/*逻辑区段道岔数目*/
LogsecSwitchStruct* pLogicSecSwitchIdData = NULL;/*逻辑区段道岔ID数据*/
chLogicSecSwitchSum = GetLogicSecSwitchSum(logicSecId);/*逻辑区段道岔数目*/
pLogicSecSwitchIdData = GetLogicSecSwitchIdStru(logicSecId);/*逻辑区段道岔ID数据*/
checkSum = GetLgcRelateProSwSum(logicSecId);/*获取指定ID逻辑区段关联防护道岔数目*/
dataIdBuf = GetLgcRelateProSwStru(logicSecId);
if (NULL != pLogicSecSwitchIdData)
{
for (ii = 0u; ii < chLogicSecSwitchSum; ii++)
{
switchId = pLogicSecSwitchIdData[ii].SwitchId;
/*设置该道岔期望驱动位置为无效*/
(void)SetSwitchDanCaoPosition(switchId, SWITCH_POSITION_INVALID);
}
}
if (NULL != dataIdBuf)
{
for (ii = 0u; ii < checkSum; ii++)
{
switchId = dataIdBuf[ii].SwitchId;
/*设置该道岔期望驱动位置为无效*/
(void)SetSwitchDanCaoPosition(switchId, SWITCH_POSITION_INVALID);
}
}
}
/*
:
:
const UINT16 ID
:
.
:
add by mpt 20260403
*/
void ClearAxisSeceSwitchDanCaoPos(const UINT16 axisSecId)
{
UINT16* pLogSectionIdBuf = NULL;
UINT8 chLogSectionSum = 0U;
UINT8 ii = 0U;
pLogSectionIdBuf = GetAxisSecLogSectionIdBuf(axisSecId);
chLogSectionSum = GetAxisSecLogSectionSum(axisSecId);
if (NULL != pLogSectionIdBuf)
{
for (ii = 0U; ii < chLogSectionSum; ii++)
{
/*清除逻辑区段道岔道岔标志*/
ClearLogSeceSwitchDanCaoPos(pLogSectionIdBuf[ii]);
}
}
}
@@ -1898,4 +1898,30 @@ void SetLocalAreaIteCutInfo(const UINT8 cAreaIteCutNum, const UINT16 pAreaIteCut
*/
UINT16 GetRouteFirstLockedLogSecId(UINT16 wRouteId);
/*
功能描述:
清除逻辑区段关联道岔单操位置
输入参数:
const UINT16 逻辑区段ID
输出参数:
无.
返回值:
add by mpt 20260403
*/
void ClearLogSeceSwitchDanCaoPos(const UINT16 logicSecId);
/*
功能描述:
清除计轴区段关联道岔单操位置
输入参数:
const UINT16 计轴区段ID
输出参数:
无.
返回值:
add by mpt 20260403
*/
void ClearAxisSeceSwitchDanCaoPos(const UINT16 axisSecId);
#endif
@@ -28,6 +28,7 @@
#define TRAIN_IN_ENVELOPE_SUM_MAX (15u) /*列车包络中包含的列车最大数量(开区间)*/
#define SECTION_IN_ENVELOPE_SUM_MAX (10u) /*列车包络中包含的区段最大个数(开区间)*/
#define SECTION_REL_ENVELOPE_SUM_MAX (15u) /*区段关联的包络最大个数(开区间)*/
#define OTHER_RC_SEND_ENVELOPE_SUM_MAX (50u) /*相邻联锁发送最大包络数量*/
#define TRAIN_REL_ENVELOPE_SUM_MAX (15u) /*列车关联的包络最大个数(开区间)*/
#define MAX_ENVELOPE_LOG_NUM (10000U) /*包络日志打印缓存大小*/
@@ -1199,7 +1199,7 @@ void elm_AddNextOCEnvelopetoBuff(UINT8 OCid)
UINT16 buffIndex = ENVELOPE_UNVAILD_INDEX;
UINT32 errorCode = 0u;
EnvelopeStruct tempEnvelope = {0u};
CfpEnvelopeStruct InfEnvelope[SECTION_REL_ENVELOPE_SUM_MAX * ONE_OTHER_CFP_SUM_MAX] = {0u};
CfpEnvelopeStruct InfEnvelope[OTHER_RC_SEND_ENVELOPE_SUM_MAX * ONE_OTHER_CFP_SUM_MAX] = {0u};
/** 获取OC发送的包络信息个数 */
envelopeCnt = elm_PrepareNextOcInfEnvelope(OCid,InfEnvelope);
@@ -11800,8 +11800,8 @@ void ProcessPhyOCcStateToAxisSection(void)
{
chSwitchPos = GetSwitchCurPosition(pSwitchInfo[chIndex].SwitchId);
if ((SWITCH_POSITION_DINGWEI != chSwitchPos) && (SWITCH_POSITION_FANWEI != chSwitchPos))
{/* 物理区段占用,道岔四开,设置物理区段所有计轴区段占用 */
break;
{/* 物理区段占用,道岔四开,继续检查 */
chHitTimes++;
}
else
{
+32 -34
View File
@@ -1432,6 +1432,7 @@ void ProcessZcToCiData(void)
{
SetAxisJumpLockState(pAxisSectionIdBuf[jj], AXIS_SECTION_JUMPLOCK_STATE_IDLE);/*通信中断设置计轴区段跳跃锁闭状态为空闲*/
(void)SetAxisSecJumpLockApplyCylce(pAxisSectionIdBuf[jj], 0U);/*清零计轴区段跳跃锁闭申请周期号*/
SetAxisRelProSwitchLockSta(pAxisSectionIdBuf[jj], SWITCH_LOCK_PROTECT_CANCEL);/*取消防护锁闭*/
}
}
}
@@ -2442,8 +2443,8 @@ UINT8 ProcessAtsOrXianDiToCiData(void)
UINT8 cLogSecSeqDir = CI_SYSTEM_DIRECTION_NONE; /* 逻辑区段序列方向 */
UINT8 cFunRetVal = CI_ERROR; /* 接收函数返回值用于判断报警 */
UINT16 recordErrorNum = 0u;
UINT8 cLogSecSum = 0U; /*逻辑区段数量*/
UINT16* pLogSecIdBuff = NULL; /*逻辑区段ID数组*/
UINT8 cSectionSum = 0U; /*区段数量*/
UINT16* pSectionIdBuff = NULL; /*区段ID数组*/
UINT16 OverlapRouteId = 0U;
localCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/
@@ -2912,8 +2913,8 @@ UINT8 ProcessAtsOrXianDiToCiData(void)
virCiID = AtsOrXianDiToCiCmdStru[ii].VirCIid;
cmdType = AtsOrXianDiToCiCmdStru[ii].CommandType;
trainId = AtsOrXianDiToCiCmdStru[ii].wTrainIdParam; /*命令相关的列车ID*/
cLogSecSum = AtsOrXianDiToCiCmdStru[ii].chLogicSecSum;
pLogSecIdBuff = AtsOrXianDiToCiCmdStru[ii].wLogicSecData;
cSectionSum = AtsOrXianDiToCiCmdStru[ii].chSectionSum;
pSectionIdBuff = AtsOrXianDiToCiCmdStru[ii].wSectionData;
recordErrorNum = GetErrorDataCurSum();
/*反馈命令收到信息,根据输入命令类型判断*/
OrderCheckReVal = CheckIsGeneralOrder(AtsOrXianDiToCiCmdStru[ii].CommandType);
@@ -3476,32 +3477,28 @@ UINT8 ProcessAtsOrXianDiToCiData(void)
break;
case ATS_CMD_PHYSEC_RESET_ONE:
checkRetVal = CheckTheDevIsNotOfDiffLine(CI_DEVICE_TYPE_PHYSEC, CmdDeviceId);
belongVirCIid = GetPhySecBelongVirCiId(CmdDeviceId);
OrderCheckReVal = CheckOrderWhetherDoing(virCiID,belongVirCIid,cmdType,CmdDeviceId);/*检查命令能否被执行*/
if((CI_TRUE == checkRetVal)&&(CI_SUCCESS == OrderCheckReVal))
{
cFunRetVal = CheckAxisResetCmd(virCiID, cmdType, cSectionSum, pSectionIdBuff); /*检查命令是否能执行*/
if(CI_SUCCESS == cFunRetVal)
{/*检查通过*/
checkRetVal = AFFIRM_SUCCESS;
}
else
{
checkRetVal = AFFIRM_FAIL;
}
SetCiSendCmdBackData_OrderBack(commandId,CmdDeviceId,cmdDevType,terminalId,AtsOrXianDiToCiCmdStru[ii].CommandType,RESPONSE_FIRST,checkRetVal,virCiID);
SetAixsResetCiSendCmdBackData(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, RESPONSE_FIRST, checkRetVal, virCiID, cSectionSum, pSectionIdBuff);
break;
case ATS_CMD_PHYSEC_RESET_TWO:
checkRetVal = CheckSecondOrderValid(commandId,CmdDeviceId,cmdDevType,terminalId,AtsOrXianDiToCiCmdStru[ii].CommandType,virCiID);
checkRetVal = CheckAxisResetSndOrderValid(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, virCiID, cSectionSum, pSectionIdBuff);
if(CI_SUCCESS == checkRetVal)
{
checkRetVal = CheckTheDevIsNotOfDiffLine(CI_DEVICE_TYPE_PHYSEC, CmdDeviceId);
belongVirCIid = GetPhySecBelongVirCiId(CmdDeviceId);
OrderCheckReVal = CheckOrderWhetherDoing(virCiID,belongVirCIid,cmdType,CmdDeviceId);/*检查命令能否被执行*/
if((CI_TRUE == checkRetVal)&&(CI_SUCCESS == OrderCheckReVal))
cFunRetVal = CheckAxisResetCmd(virCiID, cmdType, cSectionSum, pSectionIdBuff); /*检查命令是否能执行*/
if(CI_SUCCESS == cFunRetVal)
{
checkRetVal = AFFIRM_SUCCESS;
/*区段计轴复位命令*/
SetSectionResetLogicManage(CmdDeviceId, PHYSICAL_SECTION_PRE_RESET_NO);
/*批量计轴复位命令*/
BatchAixsResetLogicManage(cSectionSum, pSectionIdBuff, PHYSICAL_SECTION_PRE_RESET_NO);
}
else
{
@@ -3512,7 +3509,7 @@ UINT8 ProcessAtsOrXianDiToCiData(void)
{
checkRetVal = AFFIRM_FAIL;
}
SetCiSendCmdBackData_OrderBack(commandId,CmdDeviceId,cmdDevType,terminalId,AtsOrXianDiToCiCmdStru[ii].CommandType,RESPONSE_SECOND,checkRetVal,virCiID);
SetAixsResetCiSendCmdBackData(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, RESPONSE_SECOND, checkRetVal, virCiID, cSectionSum, pSectionIdBuff);
break;
case ATS_CMD_BUTTON_SET_STOPCHECK:/*设置停止检查*/
@@ -4072,7 +4069,7 @@ UINT8 ProcessAtsOrXianDiToCiData(void)
break;
case ATS_CMD_ROUTE_PART_APPLY:
/*申请部分路径*/
RoutePartApplyLogicManage(cLogSecSeqDir, trainId, cLogSecSum, pLogSecIdBuff);
RoutePartApplyLogicManage(cLogSecSeqDir, trainId, cSectionSum, pSectionIdBuff);
break;
case ATS_CMD_OPEN_XIANSU_SIGNAL_FIRST:
checkRetVal = CheckTheDevIsNotOfDiffLine(CI_DEVICE_TYPE_SIGNAL, CmdDeviceId);
@@ -4279,8 +4276,8 @@ UINT8 ProcessAtsOrXianDiToCiDataCld(void)
UINT16 trainId = 0U;
UINT16 OverlapRouteId = 0U;
UINT8 cLogSecSeqDir = CI_SYSTEM_DIRECTION_NONE; /* 逻辑区段序列方向 */
UINT8 cLogSecSum = 0U; /*逻辑区段数量*/
UINT16* pLogSecIdBuff = NULL; /*逻辑区段ID数组*/
UINT8 cSectionSum = 0U; /*区段数量*/
UINT16* pSectionIdBuff = NULL; /*区段ID数组*/
/*解析ATS命令*/
AtsToCiCmdSum = GetCiRevCmdStruCurSum();
@@ -4615,8 +4612,8 @@ UINT8 ProcessAtsOrXianDiToCiDataCld(void)
virCiID = AtsToCiCmdStru[ii].VirCIid;
trainId = AtsToCiCmdStru[ii].wTrainIdParam;
cLogSecSeqDir = (UINT8)(AtsToCiCmdStru[ii].CommandParam & 0xFFu);
cLogSecSum = AtsToCiCmdStru[ii].chLogicSecSum;
pLogSecIdBuff = AtsToCiCmdStru[ii].wLogicSecData;
cSectionSum = AtsToCiCmdStru[ii].chSectionSum;
pSectionIdBuff = AtsToCiCmdStru[ii].wSectionData;
/*反馈命令收到信息*/
checkReVal = CheckIsGeneralOrder(AtsToCiCmdStru[ii].CommandType);
@@ -4911,8 +4908,7 @@ UINT8 ProcessAtsOrXianDiToCiDataCld(void)
break;
case ATS_CMD_PHYSEC_RESET_ONE:
checkRetVal = CheckTheDevIsNotOfDiffLine(CI_DEVICE_TYPE_PHYSEC, CmdDeviceId);
checkRetVal = CheckAxisResetCmd(virCiID, cmdDevType, cSectionSum, pSectionIdBuff); /*检查命令是否能执行*/
if(CI_TRUE == checkRetVal)
{
checkRetVal = AFFIRM_SUCCESS;
@@ -4921,20 +4917,19 @@ UINT8 ProcessAtsOrXianDiToCiDataCld(void)
{
checkRetVal = AFFIRM_FAIL;
}
SetCiSendCmdBackData_OrderBack(commandId,CmdDeviceId,cmdDevType,terminalId,AtsToCiCmdStru[ii].CommandType,RESPONSE_FIRST,checkRetVal,virCiID);
SetAixsResetCiSendCmdBackData(commandId, CmdDeviceId, cmdDevType, terminalId, AtsToCiCmdStru[ii].CommandType, RESPONSE_FIRST, checkRetVal, virCiID, cSectionSum, pSectionIdBuff);
break;
case ATS_CMD_PHYSEC_RESET_TWO:
checkRetVal = CheckSecondOrderValid(commandId,CmdDeviceId,cmdDevType,terminalId,AtsToCiCmdStru[ii].CommandType,virCiID);
checkRetVal = CheckAxisResetSndOrderValid(commandId,CmdDeviceId,cmdDevType,terminalId,AtsToCiCmdStru[ii].CommandType,virCiID, cSectionSum, pSectionIdBuff);
if(CI_SUCCESS == checkRetVal)
{
checkRetVal = CheckTheDevIsNotOfDiffLine(CI_DEVICE_TYPE_PHYSEC, CmdDeviceId);
checkRetVal = CheckAxisResetCmd(virCiID, cmdDevType, cSectionSum, pSectionIdBuff); /*检查命令是否能执行*/
if(CI_TRUE == checkRetVal)
{
checkRetVal = AFFIRM_SUCCESS;
/*区段计轴复位命令*/
SetSectionResetLogicManage(CmdDeviceId, PHYSICAL_SECTION_PRE_RESET_NO);
/*批量计轴复位命令*/
BatchAixsResetLogicManage(cSectionSum, pSectionIdBuff, PHYSICAL_SECTION_PRE_RESET_NO);
}
else
{
@@ -4945,7 +4940,7 @@ UINT8 ProcessAtsOrXianDiToCiDataCld(void)
{
checkRetVal = AFFIRM_FAIL;
}
SetCiSendCmdBackData_OrderBack(commandId,CmdDeviceId,cmdDevType,terminalId,AtsToCiCmdStru[ii].CommandType,RESPONSE_SECOND,checkRetVal,virCiID);
SetAixsResetCiSendCmdBackData(commandId, CmdDeviceId, cmdDevType, terminalId, AtsToCiCmdStru[ii].CommandType, RESPONSE_SECOND, checkRetVal, virCiID, cSectionSum, pSectionIdBuff);
break;
case ATS_CMD_ROUTE_CHANGDIAO_SET:/*办理长调进路*/
@@ -5433,7 +5428,7 @@ UINT8 ProcessAtsOrXianDiToCiDataCld(void)
break;
case ATS_CMD_ROUTE_PART_APPLY:
/*申请部分路径*/
RoutePartApplyLogicManageCLD(cLogSecSeqDir, trainId, cLogSecSum, pLogSecIdBuff);
RoutePartApplyLogicManageCLD(cLogSecSeqDir, trainId, cSectionSum, pSectionIdBuff);
break;
case ATS_CMD_GET_CTRL_POWER:
/*获取联锁控制权*/
@@ -11787,9 +11782,12 @@ void UpdateHumidRailFlag(void)
UINT16 wOutFstPhySecId = 0U; /*信号外方第一物理区段ID*/
UINT8 cOutFstPSInHumidRailFlag = PHYSEC_IN_HUMID_RAIL_NO;
UINT8 cLocalHumidRailState = CI_LOCAL_SNOW_UNVALID; /*本地湿轨状态*/
UINT8 chLocalCiType = 0U; /*本联锁属性*/
chLocalCiType = GetLocalCiType();
cFuncSwitch = GetCiFunctionSwitchConfig(FUNC_ZQX_CHECK_HUMID_RAIL);
if (FUNC_SWITCH_ON == cFuncSwitch)
if ((FUNC_SWITCH_ON == cFuncSwitch) &&((CI_TYPE_SCX == chLocalCiType) || (CI_TYPE_ZX == chLocalCiType)))
{
/****** 更新物理区段的湿轨标志 ******/
wCurPhySecNum = GetPhySecCurSum();
@@ -4528,9 +4528,12 @@ void RouteZongRenJieProc(const UINT16 routeId)
checkResultSecAndQXZC = RouteExceptLastSecOccuClrCheck(routeId);
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))
{/*当总人解引导进路时,有取消照查继电器且未吸起则不能解锁引导进路*/
@@ -8369,6 +8372,87 @@ void SetSectionResetLogicManage(const UINT16 phySecId, const UINT8 resetType)
}
}
/*
*
* const UINT8 cPhySecSum
* const UINT16 pPhySecIdBuff[] ID数组
* void
*/
void BatchAixsResetLogicManage(const UINT8 cPhySecSum, const UINT16 pPhySecIdBuff[], const UINT8 resetType)
{
UINT8 const functionId = EFUNC_SET_SEC_RESET_LOGIC_MANAGE; /*函数故障码*/
UINT8 retValid = CI_ERROR; /*计轴总复位继电器状态有效性值,默认为无效*/
UINT8 occupyState = 0U; /*占用状态*/
UINT8 ii = 0U;
UINT16 phySecId = 0U; /*物理区段ID*/
UINT8 cCheckRetVal = CI_ERROR; /*检查结果*/
UINT8 cBreakFlag = CI_SUCCESS; /*跳出标志*/
UINT32 dwCurCyc = 0U; /*周期号*/
dwCurCyc = Get2oo2CurCycleNum();
if ((pPhySecIdBuff != NULL) && (cPhySecSum != 0U))
{
for (ii = 0U; ii < cPhySecSum; ii++)
{
phySecId = pPhySecIdBuff[ii];
if ((0U < phySecId) && (PHYSICAL_SECTION_SUM_MAX > phySecId))
{
occupyState = GetPhySecCurOccupyState(phySecId);
if (SECTION_OCCUPY_YES == occupyState) /*采集占用*/
{
occupyState = GetPhySecCurTxOccupyState(phySecId);
if (LOGICSECTION_OCCUPY_TX == occupyState) /*CT占用*/
{
SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySecId, ETYPE_PS_NO_UT_CT_OCU_STATE, occupyState, ESEND_LEVEL_ATS);
cCheckRetVal = CI_ERROR;
cBreakFlag = CI_ERROR;
}
else
{
retValid = GetZFWValidByPhySecId(phySecId); /*获取物理区段计轴总复位继电器状态有效性*/
if (CI_SUCCESS == retValid)
{
cCheckRetVal = CI_SUCCESS;
}
else
{
SetCiSendCmdBackInfoData(CI_BACK_PSEC_RESET_ZFW_ERROR, CI_DEVICE_TYPE_PHYSEC, phySecId, 0U, 0U);
cCheckRetVal = CI_ERROR;
cBreakFlag = CI_ERROR;
}
}
}
else /*无占压,反馈计轴复位失败,反馈计轴空闲*/
{
SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, phySecId, ETYPE_PS_MERGY_OCU_STATE, occupyState, ESEND_LEVEL_ATS);
cCheckRetVal = CI_ERROR;
cBreakFlag = CI_ERROR;
}
if (cBreakFlag == CI_ERROR)
{
break; /*条件满足,退出循环*/
}
}
}
if (CI_SUCCESS == cCheckRetVal)
{/*有效,执行计轴复位功能*/
for (ii = 0U; ii < cPhySecSum; ii++)
{
SetPhySecSectionResetType(pPhySecIdBuff[ii], resetType);
SetPhySecResetStartCycNum(pPhySecIdBuff[ii], dwCurCyc);/*设置当前周期号位计轴复位命令起始周期号*/
}
}
else
{
/*无效,不执行计轴复位功能*/
}
}
else
{
/*数据有误,无计轴需复位*/
}
}
/*
*
* const UINT16 signalId, ID
@@ -11105,6 +11189,7 @@ void UnlockSwitchLogicManage(void)
UINT8 unlockFlag = 0U;/*解锁标志*/
UINT8 funcSwitch = 0U;
UINT8 chPhySecLogLockState = 0U;/*物理区段逻辑锁闭状态*/
UINT8 chPhySecJumpLockState = 0U;
localCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/
funcSwitch = GetCiFunctionSwitchConfig(FUNC_ROUTE_DRV_SWITCH_EARLY);
@@ -11135,10 +11220,11 @@ void UnlockSwitchLogicManage(void)
phyLockStatus = GetPhySecLockState(hostPhyId);/*获取物理区段锁闭状态*/
chFuncRet1 = GetSwitchLogSecLockState(hostSwitchId, &wDevId, &chDevState);
chPhySecLogLockState = PhySecLogLockStateCheck(hostPhyId);
chPhySecJumpLockState = GetPhySecJumpLockState(hostPhyId);
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;
}
else
@@ -11401,6 +11487,9 @@ void CheckLogSecJumpLockManage(void)
UINT8 logJumpLockState = LOGIC_SECTION_JUMP_LOCK_NO;
UINT8 localCi = 0u;/*本联锁*/
UINT16 logJumpLockTrainId = 0u;
UINT16 devId = 0u; /*设备ID*/
UINT8 devState = 0u; /*设备状态*/
UINT8 retVal = CI_ERROR;
localCi = GetSystemParaLocalCiId();
@@ -11420,8 +11509,19 @@ void CheckLogSecJumpLockManage(void)
checkResult = CheckLogJumpLockApply(logicSecId);
if (CI_SUCCESS == checkResult)
{
/** 检查条件满足,设置跳跃锁闭允许标志为允许 */
SetLogSecJumpLockPermFlag(logicSecId, LOGIC_JUMPUNLOCK_PERMISSIVE_YES);
devId = 0u;
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
{
@@ -11476,7 +11576,6 @@ void AxisSecJumpLockLogicManage(void)
UINT8 applyFlag = 0u;/*申请标志*/
UINT8 cancelApplyFlag = 0u;/*取消申请标志*/
UINT16 phyId = 0u;/*物理区段ID*/
UINT8 phyUseState = 0u;/*物理区段征用状态*/
UINT8 jumpLockState = 0u;/*跳跃锁闭状态*/
UINT8 secBelongCi = 0u;/*区段所属联锁*/
UINT8 localCi = 0u;/*本联锁*/
@@ -11489,6 +11588,7 @@ void AxisSecJumpLockLogicManage(void)
UINT32 applyCycle = 0u;/*跳跃锁闭申请周期*/
UINT32 curCycle = 0u;/*当前周期号*/
UINT8 chPhySecJmpState = 0U;
UINT8 chJumpPhySectionUseCheck = 0U;
localCi = GetSystemParaLocalCiId();
axisSectionDataSum = GetTotalAxisCurNum();
@@ -11504,7 +11604,6 @@ void AxisSecJumpLockLogicManage(void)
jumpLockState = GetAxisJumpLockState(axisSectionId);/*获取跳跃锁闭状态*/
phyId = GetAxisSecRelativePhySecId(axisSectionId);/*获取相关物理区段ID*/
phyUseState = GetPhySecUseState(phyId);/*获取物理区段征用状态*/
secBelongCi = GetPhySecBelongCiId(phyId);
@@ -11542,10 +11641,12 @@ void AxisSecJumpLockLogicManage(void)
(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);
SetJumpPhySectionPortectSecUse(axisSectionId, PHYSICAL_SECTION_USING_YES);/*设置物理区段关联防护道岔的区段征用*/
/*转为选排*/
SetAxisJumpLockState(axisSectionId, AXIS_SECTION_JUMPLOCK_STATE_XUANPAI);
}
@@ -11562,36 +11663,7 @@ void AxisSecJumpLockLogicManage(void)
case AXIS_SECTION_JUMPLOCK_STATE_LOCK:
{/*计轴区段跳跃锁闭处理*/
/*持续进行锁闭检查,检查通过,设置物理区段跳跃锁闭;检查不通过,设置未跳跃锁闭*/
rtVal = LockAxisSecProc(axisSectionId);/*跳跃锁闭联锁条件检查*/
if (CI_SUCCESS == rtVal)
{
if ((AXIS_SECTION_JUMPLOCK_APPLY_YES == applyFlag) &&
(AXSEC_CANCEL_JUMPLOCK_APPLY_NO == cancelApplyFlag) &&
(curCycle == applyCycle))
{/*本周期有跳跃锁闭申请,才设置物理区段跳跃锁闭*/
SetPhySecJumpLockState(phyId, PHYSICAL_SECTION_JUMP_LOCK_YES);
SetPhySecJumpLockStateToZC(phyId, PHYSICAL_SECTION_JUMP_LOCK_YES);
SetAxisInCludeLogJumpLockState(axisSectionId, LOGIC_SECTION_JUMP_LOCK_YES);
}
else
{
chPhySecJmpState = GetPhySecJumpLockState(phyId);
if ((PHYSICAL_SECTION_JUMP_LOCK_YES == chPhySecJmpState) && (0U < applyCycle))
{
SetPhySecJumpLockStateToZC(phyId, PHYSICAL_SECTION_JUMP_LOCK_YES);
}
}
}
else
{/*之前处于锁闭,当持续检查锁闭条件不满足时,内部维持跳跃锁闭,给ZC发不锁闭*/
SetPhySecJumpLockStateToZC(phyId, PHYSICAL_SECTION_JUMP_LOCK_NO);
}
if ((AXIS_SECTION_JUMPLOCK_APPLY_NO == applyFlag) &&
(AXSEC_CANCEL_JUMPLOCK_APPLY_YES == cancelApplyFlag))
{/*有取消跳跃申请*/
SetAxisJumpLockState(axisSectionId, AXIS_SECTION_JUMPLOCK_STATE_IDLE);
}
AxisJumpLockStateManage(axisSectionId);
}
break;
default:
@@ -11629,16 +11701,22 @@ void AxisJumpLockXuanPaiManage(const UINT16 axisSecId)
{
rtVal = CI_SUCCESS;
}
if (CI_SUCCESS == rtVal)
{
rtVal = JumpPhySecAllUseCheck(axisSecId);/*所有区段已设置上征用(不考虑相邻联锁,若防护道岔在相邻联锁则不跳跃锁闭)*/
}
if (CI_SUCCESS == rtVal)
{
rtVal = LockAxisSecProc(axisSecId);/*跳跃锁闭联锁条件检查*/
}
axisSecSwitDrvOvtmFlag = ChekJumpLockSwitDrivOvtmStat(axisSecId);/*检查计轴区段道岔是否驱动超时*/
axisSecSwitDrvOvtmFlag = ChekJumpLockSwitDrivOvtmStat(axisSecId);/*检查计轴区段关联道岔是否驱动超时*/
if (CI_SUCCESS == rtVal)
{/*检查成功*/
SetAxisJumpLockState(axisSecId, AXIS_SECTION_JUMPLOCK_STATE_LOCK);
/*设置未征用*/
SetPhySecUseState(phyId, PHYSICAL_SECTION_USING_NO, 0);
SetAxisJumpLockState(axisSecId, AXIS_SECTION_JUMPLOCK_STATE_LOCK);/*状态机流程转*/
}
else if ((RETURN_LOCK_ERR_SWITPOS == rtVal) && (CI_SUCCESS == axisSecSwitDrvOvtmFlag))
{/*位置错误可驱动且驱动道岔没有超时*/
@@ -11649,6 +11727,8 @@ void AxisJumpLockXuanPaiManage(const UINT16 axisSecId)
{
/*设置未征用*/
SetPhySecUseState(phyId, PHYSICAL_SECTION_USING_NO, 0);
SetJumpPhySectionPortectSecUse(axisSecId, PHYSICAL_SECTION_USING_NO);/*设置物理区段的防护道岔所在区段取消防护征用*/
/*设置计轴区段跳跃状态空闲*/
SetAxisJumpLockState(axisSecId, AXIS_SECTION_JUMPLOCK_STATE_IDLE);
}
@@ -11657,6 +11737,8 @@ void AxisJumpLockXuanPaiManage(const UINT16 axisSecId)
{/*其它*/
/*设置未征用*/
SetPhySecUseState(phyId, PHYSICAL_SECTION_USING_NO, 0);
SetJumpPhySectionPortectSecUse(axisSecId, PHYSICAL_SECTION_USING_NO);/*设置物理区段的防护道岔所在区段取消防护征用*/
/*设置计轴区段跳跃状态空闲*/
SetAxisJumpLockState(axisSecId, AXIS_SECTION_JUMPLOCK_STATE_IDLE);
}
@@ -13704,6 +13786,8 @@ static void TrainTransitmitStatJumpLockProcess(const UINT16 logSectionId, const
/** 清除区段跳跃锁闭延时解锁起始周期号和延时解锁设置标志*/
SetLogSecJumpDelayUnlocStartCyc(logSectionId, 0u);
SetLogSecJumpDelayUnlockFlag(logSectionId, LOGIC_JUMPUNLOCK_DELAY_SET_NO);
/*取消防护锁闭*/
SetLogSecRelProSwitchLockSta(logSectionId, SWITCH_LOCK_PROTECT_CANCEL);
}
else
{
@@ -14412,6 +14496,8 @@ void PhySecJumpLockLogicManage(void)
UINT32 dwApplyCycle = 0U;/*跳跃锁闭申请周期号*/
UINT8 chPhySecFLockType = 0U;/*物理区段封锁类型*/
UINT8 chPhySecJempState = 0U;/*物理区段跳跃锁闭状态*/
UINT16 devId = 0u; /*设备ID*/
UINT8 devState = 0u; /*设备状态*/
wAxisSectionDataSum = GetTotalAxisCurNum();
@@ -14434,9 +14520,23 @@ void PhySecJumpLockLogicManage(void)
chPhySecFLockType = GetPhySecFLockType(wPhyId); /*获取物理区段封锁类型*/
if ((PHY_SEC_FLOCK_TYPE_NONE == chPhySecFLockType))
{
ClearAxisSeceSwitchDanCaoPos(wAxisSectionId);/*清除单操*/
SetPhySecJumpLockState(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_YES);
SetPhySecJumpLockStateToZC(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_YES);
SetAxisInCludeLogJumpLockState(wAxisSectionId, LOGIC_SECTION_JUMP_LOCK_YES);
SetAxisRelProSwitchLockSta(wAxisSectionId, SWITCH_LOCK_PROTECT_SET);
chTempcheck = AxisRelatedProSwitchLockCheck(wAxisSectionId, &devId, &devState);
if (CI_SUCCESS == chTempcheck)
{/*检查计轴区段锁闭状态*/
SetPhySecJumpLockStateToZC(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_YES);
SetAxisInCludeLogJumpLockState(wAxisSectionId, LOGIC_SECTION_JUMP_LOCK_YES);
}
else
{
/*无执行*/
}
}
else
{
@@ -14458,8 +14558,17 @@ void PhySecJumpLockLogicManage(void)
}
else
{ /*联锁内部锁闭,当持续检查锁闭条件满足时,再次给ZC发锁闭*/
SetPhySecJumpLockStateToZC(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_YES);
devId = 0u;
devState = 0u;
chTempcheck = AxisRelatedProSwitchLockCheck(wAxisSectionId, &devId, &devState);
if (CI_SUCCESS == chTempcheck)
{
SetPhySecJumpLockStateToZC(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_YES);
}
else
{
SetPhySecJumpLockStateToZC(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_NO);
}
}
}
}
@@ -14468,6 +14577,7 @@ void PhySecJumpLockLogicManage(void)
{/*有取消跳跃申请*/
SetPhySecJumpLockState(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_NO);
SetPhySecJumpLockStateToZC(wPhyId, PHYSICAL_SECTION_JUMP_LOCK_NO);
SetAxisRelProSwitchLockSta(wAxisSectionId, SWITCH_LOCK_PROTECT_CANCEL);/*取消防护锁闭*/
}
}
}
@@ -15478,7 +15588,10 @@ void SetLogRouteLogicResUsable(const UINT16 wLogSectionId, const UINT16 wTrnId,
UINT8 chLogRouteLogicLockState = 0U; /*逻辑进路逻辑区段锁闭状态*/
UINT8 chRouteTrainEnterFlag = 0U;/*列车处于进路位置*/
UINT16 wLogSignalId = 0U; /*逻辑进路包含的信号机*/
UINT16 wBelongPhySec = 0U;
UINT8 chQcxFlag = 0U;/*牵出线属性*/
UINT8 chKeepFlag = CI_ERROR;
UINT8 chTrainLevel = TRAIN_LEVEL_UR;
wLogicRLockLogRouteId = GetLogSecBelongLogRouteId(wLogSectionId, wTrnId);
wLogRouteState = GetLogicalRouteState(wLogicRLockLogRouteId);
chLogRouteLogicLockState = GetLogSecLogLockState(wLogSectionId);
@@ -15486,53 +15599,85 @@ void SetLogRouteLogicResUsable(const UINT16 wLogSectionId, const UINT16 wTrnId,
{
if (LOG_SECTION_LOGLOCK_NORMAL == chLogRouteLogicLockState)
{
wLogSignalId = GetLogicalRouteRelateBeginSigId(wLogicRLockLogRouteId);
if (0U != wLogSignalId)
wBelongPhySec = GetLgcSecRelativePhySecId(wLogSectionId);
chQcxFlag = GetPhySecQcxFlag(wBelongPhySec);
if (PHYSICAL_SECTION_QCX_YES == chQcxFlag)
{
chRouteTrainEnterFlag = dsuLogRouteMinHeadTrainCrosSig(wTrnId, wLogicRLockLogRouteId);
}
else
{
chRouteTrainEnterFlag = TRAIN_ENTER_ROUTE_FULL; /*无始端信号机,列车已经完全驶入进路*/
}
if ((TRAIN_ENTER_ROUTE_NO == chRouteTrainEnterFlag)
|| (TRAIN_ENTER_ROUTE_HEAD == chRouteTrainEnterFlag))
{
if ((ROUTE_LOGICAL_STATE_OPEN == wLogRouteState))
/*牵出线区段RM列车检查区段外方进路*/
chTrainLevel = GetTrainLevel(wTrnId);
if (TRAIN_LEVEL_VBTC == chTrainLevel)
{
if (CI_SUCCESS == wLogicSecLogRouteCheckState)
{
SetLogSecTrainUseState(wLogSectionId, wTrnId, LOGIC_SECTION_RES_USABLE);
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrnId, LOGIC_SECTION_RES_UNUSABLE);
}
}
else if ((ROUTE_LOGICAL_STATE_UNLOCKWAIT==wLogRouteState) && (TRAIN_ENTER_ROUTE_NO == chRouteTrainEnterFlag))
{
/*若列车已出清逻辑进路最后一个逻辑区段但未解锁(进路保持等待解锁状态)*/
if (CI_SUCCESS == wLogicSecLogRouteCheckState)
{
SetLogSecTrainUseState(wLogSectionId, wTrnId, LOGIC_SECTION_RES_USABLE);
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrnId, LOGIC_SECTION_RES_UNUSABLE);
}
chKeepFlag = CI_SUCCESS;
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrnId, LOGIC_SECTION_RES_UNUSABLE);
/*检查牵出线外方信号机办理列车进路/折返进路*/
chKeepFlag = CheckQcxLiecheRoute(wBelongPhySec);
}
}
else if ((TRAIN_ENTER_ROUTE_FULL == chRouteTrainEnterFlag)
|| (TRAIN_ENTER_ROUTE_TAIL == chRouteTrainEnterFlag)
|| (TRAIN_ENTER_ROUTE_CROSS == chRouteTrainEnterFlag))
else if (PHYSICAL_SECTION_QCX_NO == chQcxFlag)
{
if (CI_SUCCESS == wLogicSecLogRouteCheckState)
chKeepFlag = CI_SUCCESS;
}
else
{
/*异常防护*/
chKeepFlag = CI_ERROR;
}
if (CI_SUCCESS == chKeepFlag)
{
wLogSignalId = GetLogicalRouteRelateBeginSigId(wLogicRLockLogRouteId);
if (0U != wLogSignalId)
{
SetLogSecTrainUseState(wLogSectionId, wTrnId, LOGIC_SECTION_RES_USABLE);
chRouteTrainEnterFlag = dsuLogRouteMinHeadTrainCrosSig(wTrnId, wLogicRLockLogRouteId);
}
else
{
chRouteTrainEnterFlag = TRAIN_ENTER_ROUTE_FULL; /*无始端信号机,列车已经完全驶入进路*/
}
if ((TRAIN_ENTER_ROUTE_NO == chRouteTrainEnterFlag)
|| (TRAIN_ENTER_ROUTE_HEAD == chRouteTrainEnterFlag))
{
if ((ROUTE_LOGICAL_STATE_OPEN == wLogRouteState))
{
if (CI_SUCCESS == wLogicSecLogRouteCheckState)
{
SetLogSecTrainUseState(wLogSectionId, wTrnId, LOGIC_SECTION_RES_USABLE);
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrnId, LOGIC_SECTION_RES_UNUSABLE);
}
}
else if ((ROUTE_LOGICAL_STATE_UNLOCKWAIT == wLogRouteState) && (TRAIN_ENTER_ROUTE_NO == chRouteTrainEnterFlag))
{
/*若列车已出清逻辑进路最后一个逻辑区段但未解锁(进路保持等待解锁状态)*/
if (CI_SUCCESS == wLogicSecLogRouteCheckState)
{
SetLogSecTrainUseState(wLogSectionId, wTrnId, LOGIC_SECTION_RES_USABLE);
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrnId, LOGIC_SECTION_RES_UNUSABLE);
}
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrnId, LOGIC_SECTION_RES_UNUSABLE);
}
}
else if ((TRAIN_ENTER_ROUTE_FULL == chRouteTrainEnterFlag)
|| (TRAIN_ENTER_ROUTE_TAIL == chRouteTrainEnterFlag)
|| (TRAIN_ENTER_ROUTE_CROSS == chRouteTrainEnterFlag))
{
if (CI_SUCCESS == wLogicSecLogRouteCheckState)
{
SetLogSecTrainUseState(wLogSectionId, wTrnId, LOGIC_SECTION_RES_USABLE);
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrnId, LOGIC_SECTION_RES_UNUSABLE);
}
}
else
{
@@ -15571,7 +15716,10 @@ void SetNormalRouteLogicResUsable(const UINT16 wLogSectionId, const UINT16 wTrai
UINT16 autoRouteSetFlag = AUTO_ROUTE_SET_NO;
UINT16 wLockBelongRouteId = 0U; /*进路锁闭所属进路*/
UINT16 wRouteLastLogSecId = 0U; /*进路内方最后一个逻辑区段*/
UINT16 wBelongPhySec = 0U;
UINT8 chQcxFlag = 0U;/*牵出线属性*/
UINT8 chKeepFlag = CI_ERROR;
UINT8 chTrainLevel = TRAIN_LEVEL_UR;
chLogicLockState = GetLogSecLockState(wLogSectionId); /*正常进路锁闭状态*/
wLogicRLockRouteId = GetLogSecLockBelongRoute(wLogSectionId); /*获取进路ID*/
routeState = GetRouteState(wLogicRLockRouteId); /*获取进路状态*/
@@ -15583,36 +15731,94 @@ void SetNormalRouteLogicResUsable(const UINT16 wLogSectionId, const UINT16 wTrai
if ((LOG_SECTION_LOCK_NORMAL == chLogicLockState)
|| (LOG_SECTION_LOCK_DELAY == chLogicLockState))
{
chRouteTrainEnterFlag = dsuTrainMinHeadCrossSignal(wTrainId, wLogicRLockRouteId);
chTrainMaxHeadCross = dsuTrainCrossSignal(wTrainId, wLogicRLockRouteId);/*判断列车大前是否驶入进路*/
/*列车未在进路中 或者列车小前进入进路但未越过跨压距离*/
if ((TRAIN_ENTER_ROUTE_NO == chRouteTrainEnterFlag) || (TRAIN_ENTER_ROUTE_HEAD == chRouteTrainEnterFlag))
wBelongPhySec = GetLgcSecRelativePhySecId(wLogSectionId);
chQcxFlag = GetPhySecQcxFlag(wBelongPhySec);
if (PHYSICAL_SECTION_QCX_YES == chQcxFlag)
{
if ((ROUTE_STATE_YUXIAN_OPEN == routeState)
|| (ROUTE_STATE_NEAR_OPEN == routeState)
|| (ROUTE_STATE_HALF_UNLOCK == routeState))
/*牵出线区段RM列车检查区段外方进路*/
chTrainLevel = GetTrainLevel(wTrainId);
if (TRAIN_LEVEL_VBTC == chTrainLevel)
{
if (CI_SUCCESS == wLogicSecCheckState)
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_USABLE);
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_UNUSABLE);
}
chKeepFlag = CI_SUCCESS;
}
else if ((ROUTE_STATE_AUTO_UNLOCK == routeState) && (TRAIN_ENTER_ROUTE_NO == chRouteTrainEnterFlag))
else
{
/*若列车已出清进路最后一个逻辑区段但未解锁,保持资源可用(只有一个区段的进路出清后为接近锁闭正常时,资源不可用,采用三点检查解锁)*/
if (CI_SUCCESS == wLogicSecCheckState)
/*检查牵出线外方信号机办理列车进路/折返进路*/
chKeepFlag = CheckQcxLiecheRoute(wBelongPhySec);
}
}
else if (PHYSICAL_SECTION_QCX_NO == chQcxFlag)
{
chKeepFlag = CI_SUCCESS;
}
else
{
/*异常防护*/
chKeepFlag = CI_ERROR;
}
if (CI_SUCCESS == chKeepFlag)
{
chRouteTrainEnterFlag = dsuTrainMinHeadCrossSignal(wTrainId, wLogicRLockRouteId);
chTrainMaxHeadCross = dsuTrainCrossSignal(wTrainId, wLogicRLockRouteId);/*判断列车大前是否驶入进路*/
/*列车未在进路中 或者列车小前进入进路但未越过跨压距离*/
if ((TRAIN_ENTER_ROUTE_NO == chRouteTrainEnterFlag) || (TRAIN_ENTER_ROUTE_HEAD == chRouteTrainEnterFlag))
{
if ((ROUTE_STATE_YUXIAN_OPEN == routeState)
|| (ROUTE_STATE_NEAR_OPEN == routeState)
|| (ROUTE_STATE_HALF_UNLOCK == routeState))
{
wLockBelongRouteId = GetLogSecLockBelongRoute(wLogSectionId); /*获取逻辑区段锁闭所属进路*/
wRouteLastLogSecId = GetRouteInLastLogSecId(wLockBelongRouteId); /*获取进路内方最后一个逻辑区段ID*/
if (wRouteLastLogSecId == wLogSectionId)
if (CI_SUCCESS == wLogicSecCheckState)
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_USABLE); /*进路自动解锁正常且列车不在进路内,仅进路内方最后一个逻辑区段资源状态可用*/
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_USABLE);
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_UNUSABLE);
}
}
else if ((ROUTE_STATE_AUTO_UNLOCK == routeState) && (TRAIN_ENTER_ROUTE_NO == chRouteTrainEnterFlag))
{
/*若列车已出清进路最后一个逻辑区段但未解锁,保持资源可用(只有一个区段的进路出清后为接近锁闭正常时,资源不可用,采用三点检查解锁)*/
if (CI_SUCCESS == wLogicSecCheckState)
{
wLockBelongRouteId = GetLogSecLockBelongRoute(wLogSectionId); /*获取逻辑区段锁闭所属进路*/
wRouteLastLogSecId = GetRouteInLastLogSecId(wLockBelongRouteId); /*获取进路内方最后一个逻辑区段ID*/
if (wRouteLastLogSecId == wLogSectionId)
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_USABLE); /*进路自动解锁正常且列车不在进路内,仅进路内方最后一个逻辑区段资源状态可用*/
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_UNUSABLE);
}
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_UNUSABLE);
}
}
else if ((ROUTE_STATE_NEAR_LOCK == routeState) &&
((TRAIN_ENTER_ROUTE_HEAD == chTrainMaxHeadCross) || (TRAIN_ENTER_ROUTE_CROSS == chTrainMaxHeadCross)))
{
/*点式进路在列车驶入进路但未跨压时已关闭信号(接近锁闭正常),若此时大前已驶入进路,需要保持资源可用*/
/*CBTC进路在列车驶入进路但未跨压时已关闭信号(接近锁闭正常),若此时大前已驶入进路,需要保持资源可用 ——列车驶入点式进路后升级,使进路转变为CBTC进路后,需要保持资源仍然可用 LC 20240626*/
if (CI_SUCCESS == wLogicSecCheckState)
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_USABLE);
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_UNUSABLE);
}
}
else if ((ROUTE_STATE_NEAR_LOCKERR == routeState) && (AUTO_ROUTE_SET_YES == autoRouteSetFlag) && (TRAIN_ENTER_ROUTE_HEAD == chRouteTrainEnterFlag))
{
/*自动通过进路在列车驶入后转为接近锁闭异常,修复列车驶入进路但未跨压时,资源不可用的问题 LC20240625*/
if (CI_SUCCESS == wLogicSecCheckState)
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_USABLE);
}
else
{
@@ -15623,47 +15829,21 @@ void SetNormalRouteLogicResUsable(const UINT16 wLogSectionId, const UINT16 wTrai
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_UNUSABLE);
}
}
else if ((ROUTE_STATE_NEAR_LOCK == routeState) &&
((TRAIN_ENTER_ROUTE_HEAD == chTrainMaxHeadCross) || (TRAIN_ENTER_ROUTE_CROSS == chTrainMaxHeadCross)))
{
/*点式进路在列车驶入进路但未跨压时已关闭信号(接近锁闭正常),若此时大前已驶入进路,需要保持资源可用*/
/*CBTC进路在列车驶入进路但未跨压时已关闭信号(接近锁闭正常),若此时大前已驶入进路,需要保持资源可用 ——列车驶入点式进路后升级,使进路转变为CBTC进路后,需要保持资源仍然可用 LC 20240626*/
if (CI_SUCCESS == wLogicSecCheckState)
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_USABLE);
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_UNUSABLE);
}
}
else if ((ROUTE_STATE_NEAR_LOCKERR == routeState) && (AUTO_ROUTE_SET_YES == autoRouteSetFlag) && (TRAIN_ENTER_ROUTE_HEAD == chRouteTrainEnterFlag))
{
/*自动通过进路在列车驶入后转为接近锁闭异常,修复列车驶入进路但未跨压时,资源不可用的问题 LC20240625*/
if (CI_SUCCESS == wLogicSecCheckState)
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_USABLE);
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_UNUSABLE);
}
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_UNUSABLE);
}
}
/*列车跨压信号机 或者列车完全在进路中 或者列车车尾在进路*/
else if ((TRAIN_ENTER_ROUTE_FULL == chRouteTrainEnterFlag)
|| (TRAIN_ENTER_ROUTE_TAIL == chRouteTrainEnterFlag)
|| (TRAIN_ENTER_ROUTE_CROSS == chRouteTrainEnterFlag))
{
if (CI_SUCCESS == wLogicSecCheckState)
}
/*列车跨压信号机 或者列车完全在进路中 或者列车车尾在进路*/
else if ((TRAIN_ENTER_ROUTE_FULL == chRouteTrainEnterFlag)
|| (TRAIN_ENTER_ROUTE_TAIL == chRouteTrainEnterFlag)
|| (TRAIN_ENTER_ROUTE_CROSS == chRouteTrainEnterFlag))
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_USABLE);
if (CI_SUCCESS == wLogicSecCheckState)
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_USABLE);
}
else
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_UNUSABLE);
}
}
else
{
@@ -15674,7 +15854,7 @@ void SetNormalRouteLogicResUsable(const UINT16 wLogSectionId, const UINT16 wTrai
{
SetLogSecTrainUseState(wLogSectionId, wTrainId, LOGIC_SECTION_RES_UNUSABLE);
}
}
}
else
{
/*无锁闭状态 或锁闭状态异常*/
@@ -16544,4 +16724,158 @@ void TrainJumpBackApplyProc(void)
}
}
}
}
}
/*
* 线
* const UINT16 wPhySecId 线
* CI_SUCCESS列车进路已办理 CI_ERROR未办理列车进路
* by fan 20260415
*/
UINT8 CheckQcxLiecheRoute(UINT16 wPhySecId)
{
UINT16 wStatrSigRtSum = 0U;/*获取以该信号机为始端信号机的进路数目*/
UINT16* szStartSigRouteBuf = NULL;/*获取以该信号机为始端信号机的进路数组*/
UINT16 wSigId = 0U;/*信号机ID*/
UINT16 jj = 0U;
UINT16 ii = 0U;
UINT8 chRouteState = 0U;/*进路状态*/
UINT8 chRouteType = 0U;/*进路类型*/
UINT8 chRtnval = CI_ERROR;
UINT16 wSigSum = 0U;/*信号机总数*/
UINT16 wSigOutSec = 0U;
/*遍历以该信号机为始端信号机的进路,存在列车进路非空闲*/
wSigSum = GetSignalCurSum();
for (ii = 0u; ii < wSigSum; ii++)
{
wSigId = GetSignalId(ii);
wStatrSigRtSum = GetStartSignalRouteSum(wSigId);/*获取以该信号机为始端信号机的进路数目*/
szStartSigRouteBuf = GetStartSignalRouteBuf(wSigId);/*获取以该信号机为始端信号机的进路数组*/
wSigOutSec = GetSignalOutFirstPhySecId(wSigId);
/*信号机外方区段存在且与牵出线区段一致、信号机存在关联进路*/
if ((0U != wSigOutSec) && (wSigOutSec == wPhySecId) && (0U != wStatrSigRtSum))
{
for (jj = 0U; jj < wStatrSigRtSum; jj++)
{/*查找以信号机为始端信号机的开放的进路ID*/
chRouteState = GetRouteState(szStartSigRouteBuf[jj]);/*获取进路状态*/
chRouteType = GetRouteType(szStartSigRouteBuf[jj]);/*进路类型*/
/*列车进路(车辆段折返进路初始化为列车进路) 接近开放或接近锁闭正常*/
if ((ROUTE_TYPE_LIECHE == chRouteType)
&&((ROUTE_STATE_NEAR_OPEN == chRouteState)||(ROUTE_STATE_NEAR_LOCK == chRouteState)))
{
chRtnval = CI_SUCCESS;
break;
}
}
}
if (CI_SUCCESS == chRtnval)
{
break;
}
}
return chRtnval;
}
/*
*
* const UINT16 axisSecId, ID
* void
* add by mpt 20260407
*/
void AxisJumpLockStateManage(const UINT16 axisSectionId)
{
UINT8 rtVal = 0U;
UINT8 applyFlag = 0U;
UINT32 applyCycle = 0U;
UINT8 cancelApplyFlag = 0U;
UINT16 phyId = 0U;
UINT32 curCycle = 0U;
UINT8 chPhySecJmpState = 0U;
applyFlag = GetAxisSecJumpLockApplyFlag(axisSectionId);
applyCycle = GetAxisSecJumpLockApplyCylce(axisSectionId);
cancelApplyFlag = GetAxisSecJLockCancelApplyFlag(axisSectionId);
phyId = GetAxisSecRelativePhySecId(axisSectionId);/*获取相关物理区段ID*/
curCycle = Get2oo2CurCycleNum();
/*持续进行锁闭检查,检查通过,设置物理区段跳跃锁闭;检查不通过,设置未跳跃锁闭*/
rtVal = LockAxisSecProc(axisSectionId);/*跳跃锁闭联锁条件检查*/
if (CI_SUCCESS == rtVal)
{
if ((AXIS_SECTION_JUMPLOCK_APPLY_YES == applyFlag) &&
(AXSEC_CANCEL_JUMPLOCK_APPLY_NO == cancelApplyFlag) &&
(curCycle == applyCycle))
{/*本周期有跳跃锁闭申请,才设置物理区段跳跃锁闭*/
chPhySecJmpState = GetPhySecJumpLockState(phyId);
if (PHYSICAL_SECTION_JUMP_LOCK_NO == chPhySecJmpState)
{/*无跳跃锁闭且当前无征用*/
ClearAxisSeceSwitchDanCaoPos(axisSectionId);/*清除单操*/
SetPhySecJumpLockState(phyId, PHYSICAL_SECTION_JUMP_LOCK_YES);
SetAxisRelProSwitchLockSta(axisSectionId, SWITCH_LOCK_PROTECT_SET);
SetPhySecJumpLockStateToZC(phyId, PHYSICAL_SECTION_JUMP_LOCK_YES);
SetAxisInCludeLogJumpLockState(axisSectionId, LOGIC_SECTION_JUMP_LOCK_YES);
/*设置未征用*/
SetPhySecUseState(phyId, PHYSICAL_SECTION_USING_NO, 0);
SetJumpPhySectionPortectSecUse(axisSectionId, PHYSICAL_SECTION_USING_NO);/*设置物理区段的防护道岔所在区段取消防护征用*/
}
else
{
/*不执行*/
}
}
else
{
chPhySecJmpState = GetPhySecJumpLockState(phyId);
if ((PHYSICAL_SECTION_JUMP_LOCK_YES == chPhySecJmpState) && (0U < applyCycle))
{
SetPhySecJumpLockStateToZC(phyId, PHYSICAL_SECTION_JUMP_LOCK_YES);
}
else if (PHYSICAL_SECTION_JUMP_LOCK_NO == chPhySecJmpState)
{/*当前未跳跃锁闭*/
SetPhySecJumpLockStateToZC(phyId, PHYSICAL_SECTION_JUMP_LOCK_NO);/*给ZC不锁闭*/
if (AXIS_SECTION_JUMPLOCK_APPLY_NO == applyFlag)
{/*当前未申请*/
/*设置未征用*/
SetPhySecUseState(phyId, PHYSICAL_SECTION_USING_NO, 0);
SetJumpPhySectionPortectSecUse(axisSectionId, PHYSICAL_SECTION_USING_NO);/*设置物理区段的防护道岔所在区段取消防护征用*/
SetAxisJumpLockState(axisSectionId, AXIS_SECTION_JUMPLOCK_STATE_IDLE);/*设置计轴区段跳跃锁闭状态为空闲*/
}
else
{
/*有申请则继续锁闭*/
}
}
else
{/*维持之前*/
}
}
}
else
{/*之前处于锁闭,当持续检查锁闭条件不满足时,内部维持跳跃锁闭,给ZC发不锁闭*/
SetPhySecJumpLockStateToZC(phyId, PHYSICAL_SECTION_JUMP_LOCK_NO);
chPhySecJmpState = GetPhySecJumpLockState(phyId);
if (PHYSICAL_SECTION_JUMP_LOCK_NO == chPhySecJmpState)
{/*未锁闭就一定有征用*/
/*设置未征用*/
SetPhySecUseState(phyId, PHYSICAL_SECTION_USING_NO, 0);
SetJumpPhySectionPortectSecUse(axisSectionId, PHYSICAL_SECTION_USING_NO);/*设置物理区段的防护道岔所在区段取消防护征用*/
SetAxisJumpLockState(axisSectionId, AXIS_SECTION_JUMPLOCK_STATE_IDLE);/*设置计轴区段跳跃锁闭状态为空闲*/
}
}
if ((AXIS_SECTION_JUMPLOCK_APPLY_NO == applyFlag) &&
(AXSEC_CANCEL_JUMPLOCK_APPLY_YES == cancelApplyFlag))
{/*有取消跳跃申请*/
SetAxisJumpLockState(axisSectionId, AXIS_SECTION_JUMPLOCK_STATE_IDLE);
SetAxisRelProSwitchLockSta(axisSectionId, SWITCH_LOCK_PROTECT_CANCEL);
}
}
@@ -1155,6 +1155,29 @@ void OverlapZhaoChaRelayUpDateManage(void);
* Create: fan 20250725
*/
void TrainJumpBackApplyProc(void);
/*
* 功能描述: 批量计轴复位命令逻辑管理
* 参数说明: const UINT8 cPhySecSum 物理区段数量
* const UINT16 pPhySecIdBuff[] 物理区段ID数组
* 返回值 void
*/
void BatchAixsResetLogicManage(const UINT8 cPhySecSum, const UINT16 pPhySecIdBuff[], const UINT8 resetType);
/*
* 功能描述:牵出线区段外方进路检查
* 参数说明: const UINT16 wPhySecId 牵出线区段
* 返回值 CI_SUCCESS列车进路已办理 CI_ERROR未办理列车进路
* by fan 20260415
*/
UINT8 CheckQcxLiecheRoute(UINT16 wPhySecId);
/*
* 功能描述: 计轴区段跳跃锁闭状态机管理
* 参数说明: const UINT16 axisSecId, 计轴区段ID
* 返回值 void
* add by mpt 20260407
*/
void AxisJumpLockStateManage(const UINT16 axisSectionId);
#ifdef __cplusplus
}
File diff suppressed because it is too large Load Diff
@@ -1676,17 +1676,6 @@ UINT8 LogRouteNextLogSecLockCheck(UINT16 const wLogicSecId, UINT16 const wLogRou
*/
UINT8 LogicSecRltvPrtctSwLockCheck(UINT16 const wLgcId, UINT16 *pDevId, UINT8 *pDevState);
/*
* 功能描述: 逻辑区段所处道岔防护道岔位置检查
* 参数说明: UINT16 const routeId, 进路ID
* UINT16 *pDevId, 设备Id(返回)
* UINT8 *pDevState, 设备状态(返回)
* 返回值 CI_ERROR
* CI_SUCCESS
* 创建 qw.liu 2022-03-01
*/
UINT8 LogicSecRltvPrtctSwPosCheck(UINT16 const wLgcId, UINT16 *pDevId, UINT8 *pDevState);
/*
* 功能描述: 逻辑区段所处道岔防护道岔未封锁检查
* 参数说明: UINT16 const routeId, 进路ID
@@ -1699,6 +1688,18 @@ UINT8 LogicSecRltvPrtctSwPosCheck(UINT16 const wLgcId, UINT16 *pDevId, UINT8 *pD
*/
UINT8 LogicSecRltvPrtctSwFLockCheck(UINT16 const wLgcId, UINT16* pDevId, UINT8* pDevState, UINT8* pYLockAlarmFlag);
/*
* 功能描述: 逻辑区段所处道岔防护道岔位置检查
* 参数说明: UINT16 const routeId, 进路ID
* UINT16 *pDevId, 设备Id(返回)
* UINT8 *pDevState, 设备状态(返回)
* 返回值 CI_ERROR
* CI_SUCCESS
* 创建 qw.liu 2022-03-01
*/
UINT8 LogicSecRltvPrtctSwPosCheck(UINT16 const wLgcId, UINT16 *pDevId, UINT8 *pDevState);
/*
* 功能描述: 逻辑区段所处道岔未封锁检查
* 参数说明: UINT16 const routeId, 进路ID
@@ -2804,5 +2805,155 @@ UINT8 RouteAirShaftSecOccuCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDe
* by yx 2026.03.04
*/
UINT8 RouteAirShaftSecLockCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState);
/*
* 功能描述: 计轴区段所有防护道岔位置正确检查
* 参数说明: UINT16 const axisSecId, 计轴区段编号
* UINT16 *pDevId, 设备Id(返回)
* UINT8 *pDevState, 设备状态(返回)
* 返回值 CI_ERROR
* CI_SUCCESS
* add mpt 20260331
*/
UINT8 AxisSecAllProtSwitchPosCheck(UINT16 const axisSecId, UINT16* pDevId, UINT8* pDevState);
/*
* 功能描述: 计轴区段道岔封锁状态检查
* 参数说明: 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);
/*
* 功能描述: 检查计轴区段跳跃锁闭是否有防护道岔驱动超时
* 参数说明: 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 AxisSecPorteSwitchPosMoveCheck(UINT16 const axisSecId, UINT16* pDevId, UINT8* pDevState, UINT8 funcId, UINT8 sendLevel);
/*
* 功能描述: 区段征用、区段防护道岔区段征用、区段内道岔道岔征用检查、区段内防护道岔道岔征用
* 参数说明: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 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);
/*
* 功能描述: 设置逻辑区段关联防护道岔防护锁闭状态
* 参数说明: const UINT16 axisSecId, 计轴区段ID
* const UINT8 lockCommand, 锁闭状态
* 返回值 void
* add by mpt 20260331
*/
void SetLogSecRelProSwitchLockSta(const UINT16 wLgcId, const UINT8 lockCommand);
/*
* 功能描述:计轴区段所有道岔是否全部征用
* 参数说明:const UINT16 axisSecId 计轴区段ID
* 返回值 CI_ERROR 未全部征用
* CI_SUCCESS 全部征用
* add by mpt 20260403
*/
UINT8 JumpPhySecAllUseCheck(const UINT16 axisSecId);
/*
* 功能描述: 计轴区段防护道岔引导总锁状态检查
* 参数说明: UINT16 const axisSecId, 计轴区段编号
* UINT16 *pDevId, 设备Id(返回)
* UINT8 *pDevState, 设备状态(返回)
* 返回值 CI_ERROR 0 失败
* CI_SUCCESS 1 成功
* Add by LQ 20260518
*/
UINT8 AxisSecProtSwtYLockCheck(UINT16 const axisSecId, UINT16* pDevId, UINT8* pDevState);
#endif
+225 -9
View File
@@ -18,6 +18,7 @@
#include "../IO/OutputDataProcess.h"
#include "EnvelopeManageAPI.h"
#include "../DataManage/PlatDataManage.h"
#include "../IO/InputDataProcess.h"
/*解包使用*/
CommandDataStruct CiRevCmdDataStru[ATSORXIANDI_TO_CI_CMD_DATA_STRU_SUM_MAX] = {0u}; /*CI操作命令结构体数组*/
@@ -191,7 +192,7 @@ UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLengt
UINT16 preAtsRouteSteCmdNum = 0u; /*检查ATS进路办理命令数*/
UINT16 wCmdStartByteNum = 0u;/*单条命令长度校验用*/
UINT16 wParseCmdLength = 0u;
UINT8 chLogicSecIndex = 0u;
UINT8 chSecIndex = 0u;
UINT32 dwHlhtTrainId = 0u;/*互联互通列车编号*/
UINT16 wTrainId = 0;/*列车ID 高字节类型,低字节编号*/
UINT16 logId = 0;/*vobc时是使用端编号 1-TC1 2-TC2 0-2IP车(首尾冗余车)*/
@@ -200,7 +201,7 @@ UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLengt
UINT32 dwCmdId = 0u;
UINT16 wTerminalId = 0u;
UINT8 chVirCi = 0u;
UINT8 chLogSecNum = 0u;
UINT8 chSectionNum = 0u;
UINT8 chToaCmdNum = 0u;
UINT32 dwCmdParam_DevID = 0u;
UINT16 dwCmdParam_Type = 0u;
@@ -314,7 +315,7 @@ UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLengt
ii += 4u;
(void)dquHlhtId2VobcName(dwHlhtTrainId, &wTrainId, &logId);/*4字节互联互通编号转2字节*/
chLogSecNum = dataBuf[ii++];/*逻辑区段数量*/
chSectionNum = dataBuf[ii++];/*区段数量,命令类型为0x93,0x94代表逻辑区段数量,0x0b,0x0c代表物理区段数量*/
/*对命令编号、命令设备ID进行防护*/
dwCmdParam_DevID = dwCmdParam & 0xffff0000u;
dwCmdParam_Type = (UINT16)(dwCmdParam & 0x0000ff00u);
@@ -334,7 +335,7 @@ UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLengt
{
chToaCmdNum++;
chRetVal = ToaAddCmd(chCmdType, wTrainId, dwCmdId, wTerminalId, chVirCi, dwCmdParam);
if ((CI_SUCCESS == chRetVal) && (0u != chLogSecNum))
if ((CI_SUCCESS == chRetVal) && (0u != chSectionNum))
{
chRetVal = CI_ERROR;
}
@@ -353,12 +354,12 @@ UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLengt
CiRevCmdDataStru[jj].wTrainIdParam = wTrainId; /* 列车ID*/
CiRevCmdDataStru[jj].OverLapRouteID = oVerlap_RouteId; /* 保护区段关联进路ID*/
CiRevCmdDataStru[jj].chLogicSecSum = chLogSecNum;/*逻辑区段数量*/
if (MAX_ROUTE_IN_LT_NUM > CiRevCmdDataStru[jj].chLogicSecSum)
CiRevCmdDataStru[jj].chSectionSum = chSectionNum;/*区段数量*/
if (MAX_ROUTE_IN_LT_NUM > CiRevCmdDataStru[jj].chSectionSum)
{
for (chLogicSecIndex = 0u; chLogicSecIndex < CiRevCmdDataStru[jj].chLogicSecSum; chLogicSecIndex++)
for (chSecIndex = 0u; chSecIndex < CiRevCmdDataStru[jj].chSectionSum; chSecIndex++)
{
CiRevCmdDataStru[jj].wLogicSecData[chLogicSecIndex] = ShortFromChar(&dataBuf[ii]);/*逻辑区段ID*/
CiRevCmdDataStru[jj].wSectionData[chSecIndex] = ShortFromChar(&dataBuf[ii]);/*区段ID序列,命令类型为0x93,0x94代表逻辑区段序列,0x0b,0x0c代表物理区段序列*/
ii += 2u;
}
}
@@ -521,6 +522,7 @@ UINT8 PackCiToAtsOrXianDiData(const UINT8 deviceId, const UINT8 targetDevType, c
UINT8 chVirHeadScreStat = TRAIN_VIR_SCREEN_PASS_FLAG_INVALID; /*列车虚拟前筛标志*/
UINT8 chVirTailScreStat = TRAIN_VIR_SCREEN_PASS_FLAG_INVALID; /*列车虚拟后筛标志*/
UINT16 wTrainId = 0u; /*列车ID*/
UINT8 cPhySecIndex = 0U;
UINT8 chRetVal = CI_ERROR;
UINT8 indicatorType = 0u; /*设备类型*/
@@ -783,7 +785,7 @@ UINT8 PackCiToAtsOrXianDiData(const UINT8 deviceId, const UINT8 targetDevType, c
LongToChar(dwTrainId, &ciToXianDiDataBuffer[ii]);
ii += 4u;
ciToXianDiDataBuffer[ii++] = 0u;/*逻辑区段数量*/
ciToXianDiDataBuffer[ii++] = 0u;/*区段数量*/
}
ShortToChar((UINT16)(ii - curIndex - 2U), &ciToXianDiDataBuffer[curIndex]); /*命令帧总长度*/
@@ -3088,4 +3090,218 @@ void PackCiDataToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii)
{
/*入参检查失败,不处理*/
}
}
/*
* 功能描述:检查批量计轴复位命令
* 参数说明:UINT8 virCIid 输入虚拟联锁ID
* UINT8 orderType 命令类型
* const UINT8 cPhySecSum 物理区段数量
* const UINT16 pPhySecIdBuff[] 物理区段ID数组
* 返 回 值:无
* Created By yx 2026.04.14
*/
UINT8 CheckAxisResetCmd(UINT8 virCIid, UINT8 cmdType, const UINT8 cPhySecSum, const UINT16 pPhySecIdBuff[])
{
UINT8 ii = 0U;
UINT8 checkRetVal = CI_FALSE;
UINT8 belongVirCIid = 0U;
UINT8 OrderCheckReVal = 0U;
UINT8 retVal = CI_ERROR;
UINT16 wPhySecId = 0U; /*物理区段ID*/
if ((NULL != pPhySecIdBuff) && (0U != cPhySecSum))
{
for (ii = 0U; ii < cPhySecSum; ii++)
{
wPhySecId = pPhySecIdBuff[ii];
checkRetVal = CheckTheDevIsNotOfDiffLine(CI_DEVICE_TYPE_PHYSEC, wPhySecId);
belongVirCIid = GetPhySecBelongVirCiId(wPhySecId);
OrderCheckReVal = CheckOrderWhetherDoing(virCIid, belongVirCIid, cmdType, wPhySecId); /*检查命令能否被执行*/
if ((CI_TRUE == checkRetVal) && (CI_SUCCESS == OrderCheckReVal))
{
/*继续检查*/
}
else
{/*检查失败*/
retVal = CI_ERROR;
break;
}
}
/*所有区段都检查完成且全部通过*/
if (ii == cPhySecSum)
{
retVal = CI_SUCCESS;
}
}
else
{
/*数据错误,返回失败*/
}
return retVal;
}
/*
* 功能描述: 针对批量计轴复位一次二次命令的反馈
* 参数说明: const UINT32 commandId, 命令ID
* const UINT16 deviceId, 设备ID
* const UINT8 deviceType, 设备类型
* const UINT16 termial_id,终端ID
* const UINT8 order_type,命令类型
* const UINT8 response_type, 回复类型
* const UINT8 affirm_result, 确认结果
* const UINT8 virCIid, 虚拟联锁ID
* const UINT8 cPhySecSum 物理区段数量
* const UINT16 pPhySecIdBuff[] 物理区段ID数组
* 返回值
*/
void SetAixsResetCiSendCmdBackData(const UINT32 commandId, const UINT16 deviceId, const UINT8 deviceType, const UINT16 termial_id, const UINT8 order_type, const UINT8 response_type, const UINT8 affirm_result, const UINT8 virCIid, const UINT8 cPhySecSum, const UINT16 pPhySecIdBuff[])
{
UINT32 curCycleNum = 0U;
UINT32 appCycTime = 0U;/*联锁周期数*/
UINT16 ii = 0U;
UINT8 jj = 0U;
UINT16 cmdDeviceId = 0U;
UINT8 cmdDevType = 0U;
UINT32 deviceInfo = 0U; /*设备信息*/
UINT32 firstOrderTimeCount = 0U;
UINT8 checkVaild = CI_SUCCESS;
curCycleNum = Get2oo2CurCycleNum();
appCycTime = GetSystemParaAppCycleTime();/*获取联锁周期号*/
firstOrderTimeCount = GetFirstOrderTimeCount();
/*要发送二次命令时,清除暂存的一次命令*/
if (RESPONSE_SECOND == response_type)
{
for (ii = 0U; ii < CiSendBackDataTempStruSum; ii++)
{
cmdDeviceId = (UINT16)(CiSendBackDataTempStru[ii].CommandParam >> 16U);
cmdDevType = (UINT8)(CiSendBackDataTempStru[ii].CommandParam >> 8U);
if ((termial_id == CiSendBackDataTempStru[ii].termial_id) && (commandId == CiSendBackDataTempStru[ii].CommandId)
&& (deviceType == cmdDevType) && (deviceId == cmdDeviceId) && (virCIid == CiSendBackDataTempStru[ii].VirCIid)
&& (cPhySecSum == CiSendBackDataTempStru[ii].chSectionSum))
{
for (jj = 0U; jj < cPhySecSum; jj++)
{
if (pPhySecIdBuff[jj] != CiSendBackDataTempStru[ii].wSectionData[jj])
{
checkVaild = CI_ERROR;
break;
}
else
{
/*继续对比*/
}
}
if (CI_SUCCESS == checkVaild)
{
(void)CommonMemSet((void*)&CiSendBackDataTempStru[ii], (UINT32)sizeof(CommandDataStruct), 0U, (UINT32)sizeof(CommandDataStruct));
}
else
{
/*不是同一个一次二次命令*/
}
}
}
}
/*清除暂存一次命令后,将无效命令清除,并将数量置为有效命令的数量*/
ClearCiSendBackDataTempStruData();
if (CiSendCmdStruCurSum < CI_TO_ATSORXIANDI_CMD_DATA_STRU_SUM_MAX)
{
deviceInfo = (((deviceInfo | (UINT32)deviceId) << 16U) | ((deviceInfo | (UINT32)deviceType) << 8U) | (UINT32)0U);
CiSendCmdDataStru[CiSendCmdStruCurSum].CommandType = CI_BACK_ORDER_REPEAT;/*分类号0x70*/
CiSendCmdDataStru[CiSendCmdStruCurSum].CommandId = commandId;/*命令ID */
CiSendCmdDataStru[CiSendCmdStruCurSum].CommandParam = deviceInfo;/*设备ID+设备类型+参数(时间值)*/
CiSendCmdDataStru[CiSendCmdStruCurSum].termial_id = termial_id; /*终端ID*/
CiSendCmdDataStru[CiSendCmdStruCurSum].order_type = order_type;/*命令类型*/
CiSendCmdDataStru[CiSendCmdStruCurSum].response_type = response_type;/*回复类型*/
CiSendCmdDataStru[CiSendCmdStruCurSum].affirm_result = affirm_result; /*确认结果*/
CiSendCmdDataStru[CiSendCmdStruCurSum].setCurNum = 0U; /*一次命令设置周期*/
CiSendCmdDataStru[CiSendCmdStruCurSum].firstCmd_time = 0U;
CiSendCmdDataStru[CiSendCmdStruCurSum].VirCIid = virCIid;
CiSendCmdDataStru[CiSendCmdStruCurSum].OCid = 0U;
CiSendCmdDataStru[CiSendCmdStruCurSum].chSectionSum = cPhySecSum; /*物理区段数量*/
if ((pPhySecIdBuff != NULL) && (cPhySecSum > 0U))
{
(void)CommonMemCpy((void*)CiSendCmdDataStru[CiSendCmdStruCurSum].wSectionData, (UINT32)cPhySecSum * sizeof(UINT16), (const void*)pPhySecIdBuff, (UINT32)cPhySecSum * sizeof(UINT16)); /*物理区段序列*/
}
if ((RESPONSE_FIRST == CiSendCmdDataStru[CiSendCmdStruCurSum].response_type) && (AFFIRM_SUCCESS == CiSendCmdDataStru[CiSendCmdStruCurSum].affirm_result))
{/*针对一次命令设置命令周期*/
CiSendCmdDataStru[CiSendCmdStruCurSum].setCurNum = curCycleNum; /*一次命令设置周期*/
CiSendCmdDataStru[CiSendCmdStruCurSum].firstCmd_time = (UINT8)((firstOrderTimeCount * appCycTime) / 1000U);
/*暂存1次命令*/
if (CiSendBackDataTempStruSum < CI_TO_ATSORXIANDI_CMD_DATA_STRU_SUM_MAX)
{
(void)CommonMemCpy(&CiSendBackDataTempStru[CiSendBackDataTempStruSum], (UINT32)sizeof(CommandDataStruct), &CiSendCmdDataStru[CiSendCmdStruCurSum], (UINT32)sizeof(CommandDataStruct));
CiSendBackDataTempStruSum++;
}
else
{
debug_infor_printf((const)"Error:CiSendBackDataTempStru,%d exceed max %d\n", CiSendBackDataTempStruSum, CI_TO_ATSORXIANDI_CMD_DATA_STRU_SUM_MAX);
}
}
CiSendCmdStruCurSum++;
}
else
{
debug_infor_printf((const)"Error:SetAixsResetCiSendCmdBackData,%d exceed max %d\n", CiSendCmdStruCurSum, CI_TO_ATSORXIANDI_CMD_DATA_STRU_SUM_MAX);
}
}
/*
* 功能描述: 批量计轴复位二次命令有效性检查
* 参数说明: const UINT32 commandId, 命令ID
* const UINT16 deviceId, 设备ID
* const UINT8 deviceType, 设备类型
* const UINT16 termial_id,终端ID
* const UINT8 order_type,命令类型
* const UINT8 virCIid, 虚拟联锁ID
* const UINT8 cPhySecSum 物理区段数量
* const UINT16 pPhySecIdBuff[] 物理区段ID数组
* 返回值 CI_ERROR : 失败
* CI_SUCCESS: 成功
*/
UINT8 CheckAxisResetSndOrderValid(const UINT32 commandId, const UINT16 deviceId, const UINT8 deviceType, const UINT16 termial_id, const UINT8 order_type, const UINT8 virCiID, const UINT8 cPhySecSum, const UINT16 pPhySecIdBuff[])
{
UINT16 ii = 0U;
UINT16 jj = 0U;
UINT8 reVal = CI_ERROR;
UINT8 firstOrder = 0U;
UINT16 cmdDeviceId = 0U;
UINT8 cmdDevType = 0U;
UINT8 checkVaild = CI_SUCCESS;
firstOrder = FindFirstOrder(order_type);
for (ii = 0U; ii < CiSendBackDataTempStruSum; ii++)
{
cmdDeviceId = (UINT16)(CiSendBackDataTempStru[ii].CommandParam >> 16U);
cmdDevType = (UINT8)(CiSendBackDataTempStru[ii].CommandParam >> 8U);
if ((deviceId == cmdDeviceId) && (deviceType == cmdDevType) && (commandId == CiSendBackDataTempStru[ii].CommandId)
&& (termial_id == CiSendBackDataTempStru[ii].termial_id) && (firstOrder == CiSendBackDataTempStru[ii].order_type)
&& (0U != firstOrder) && (virCiID == CiSendBackDataTempStru[ii].VirCIid) && (cPhySecSum == CiSendBackDataTempStru[ii].chSectionSum))
{
for (jj = 0U; jj < cPhySecSum; jj++)
{
if (pPhySecIdBuff[jj] != CiSendBackDataTempStru[ii].wSectionData[jj])
{
checkVaild = CI_ERROR;
break;
}
else
{
/*继续对比*/
}
}
if (CI_SUCCESS == checkVaild)
{
reVal = CI_SUCCESS;
}
else
{
reVal = CI_ERROR;
}
break;
}
}
return reVal;
}
@@ -91,8 +91,8 @@ typedef struct S_CommandDataStruct
UINT8 VirCIid;/*虚拟联锁ID*/
/*车车新加*/
UINT16 wTrainIdParam; /*列车ID 20220301车车新增*/
UINT8 chLogicSecSum; /*逻辑区段数量 20220301车车新增*/
UINT16 wLogicSecData[MAX_ROUTE_IN_LT_NUM];/*逻辑区段序列 20220301车车新增*/
UINT8 chSectionSum; /*区段数量,命令类型为0x93,0x94代表逻辑区段数量,0x0b,0x0c代表物理区段数量*/
UINT16 wSectionData[MAX_ROUTE_IN_LT_NUM];/*区段序列,命令类型为0x93,0x94代表逻辑区段序列,0x0b,0x0c代表物理区段序列*/
UINT8 OCid;/*OC ID*/
UINT16 OverLapRouteID; /*保护区段关联进路ID 20240319车车新增*/
@@ -408,6 +408,49 @@ UINT8 GetOcPscConfirmFlag(UINT8 index);
*/
void PackCiDataToAts(UINT8* ciToXianDiDataBuffer, UINT16* ii);
/*
* 功能描述:检查批量计轴复位命令
* 参数说明:UINT8 virCIid 输入虚拟联锁ID
* UINT8 orderType 命令类型
* const UINT8 cPhySecSum 物理区段数量
* const UINT16 pPhySecIdBuff[] 物理区段ID数组
* 返 回 值:无
* Created By yx 2026.04.14
*/
UINT8 CheckAxisResetCmd(UINT8 virCIid, UINT8 cmdType, const UINT8 cPhySecSum, const UINT16 pPhySecIdBuff[]);
/*
* 功能描述: 针对批量计轴复位一次二次命令的反馈
* 参数说明: const UINT32 commandId, 命令ID
* const UINT16 deviceId, 设备ID
* const UINT8 deviceType, 设备类型
* const UINT16 termial_id,终端ID
* const UINT8 order_type,命令类型
* const UINT8 response_type, 回复类型
* const UINT8 affirm_result, 确认结果
* const UINT8 virCIid, 虚拟联锁ID
* const UINT8 cPhySecSum 物理区段数量
* const UINT16 pPhySecIdBuff[] 物理区段ID数组
* 返回值
* Created By yx 2026.04.14
*/
void SetAixsResetCiSendCmdBackData(const UINT32 commandId, const UINT16 deviceId, const UINT8 deviceType, const UINT16 termial_id, const UINT8 order_type, const UINT8 response_type, const UINT8 affirm_result, const UINT8 virCIid, const UINT8 cPhySecSum, const UINT16 pPhySecIdBuff[]);
/*
* 功能描述: 批量计轴复位二次命令有效性检查
* 参数说明: const UINT32 commandId, 命令ID
* const UINT16 deviceId, 设备ID
* const UINT8 deviceType, 设备类型
* const UINT16 termial_id,终端ID
* const UINT8 order_type,命令类型
* const UINT8 virCIid, 虚拟联锁ID
* const UINT8 cPhySecSum 物理区段数量
* const UINT16 pPhySecIdBuff[] 物理区段ID数组
* 返回值 CI_ERROR : 失败
* CI_SUCCESS: 成功
* Created By yx 2026.04.14
*/
UINT8 CheckAxisResetSndOrderValid(const UINT32 commandId, const UINT16 deviceId, const UINT8 deviceType, const UINT16 termial_id, const UINT8 order_type, const UINT8 virCiID, const UINT8 cPhySecSum, const UINT16 pPhySecIdBuff[]);
#ifdef __cplusplus
}
#endif
+199 -194
View File
@@ -617,7 +617,6 @@ UINT8 CheckCi2CiDataLenValid(const UINT8* dataBuf, const UINT16 totalLength,UINT
UINT16 cmdNum = 0u, cmdNumIndex = 0u;
UINT16 stationLen = 0u, stationLenIndex = 0u;
UINT16 tmpStationLen = 0u;
UINT16 tmpTotalLen = 0u;
UINT16 logsecLockStateNumIndex = 0u;
UINT16 logsecLockStateNum = 0u;
UINT16 wCfpInfoNum = 0u;
@@ -1345,7 +1344,7 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength)
UINT8 cFlashTrainInfoFlag = 0u;/* 是否刷新列车信息 */
UINT16 dwTmpIndex = 0u;
CfpTrainInfoStru tmpTrainInfo = { 0u };
CfpEnvelopeStruct tmpEnvelopeInfo = { 0u };
CfpEnvelopeStruct tmpOtherEnvelope[OTHER_RC_SEND_ENVELOPE_SUM_MAX] = {0u}; /* 接收到的其他联锁的包络信息 */
UINT8 chEnvelopeNum = 0u;
UINT8 chEnvelopeIndex = 0u;
UINT8 chTrainIndex = 0u;
@@ -2643,214 +2642,224 @@ UINT8 ParseCiToCiDataFrame(UINT8* dataBuf, UINT16 dataLength)
/* 分界点收到相邻OC发来的包络数量 */
chEnvelopeNum = dataBuf[ii++];
if (CUTOFF_POINT_SUM_MAX >= chEnvelopeNum)
if (OTHER_RC_SEND_ENVELOPE_SUM_MAX >= chEnvelopeNum)
{
SetCfpOtherOcENum(deviceId, chEnvelopeNum);
for (chEnvelopeIndex = 0u; chEnvelopeIndex < chEnvelopeNum; chEnvelopeIndex++)
{
tmpOtherEnvelope[chEnvelopeIndex].envelopeType = dataBuf[ii++]; /* 包络类型 */
if ((TYPE_UKT_ENVELOPE == tmpOtherEnvelope[chEnvelopeIndex].envelopeType)
|| (TYPE_UCT_ENVELOPE == tmpOtherEnvelope[chEnvelopeIndex].envelopeType)
|| (TYPE_CT_ENVELOPE == tmpOtherEnvelope[chEnvelopeIndex].envelopeType))
{
;/*1:通信车 2:丢失通信车 3:隐藏车*/
}
else
{
reVal = CI_ERROR;
}
tmpOtherEnvelope[chEnvelopeIndex].headTrainID = ShortFromChar(&dataBuf[ii]);/* 前车ID */
ii += 2u;
tmpOtherEnvelope[chEnvelopeIndex].tailTrainID = ShortFromChar(&dataBuf[ii]);/* 后车ID */
ii += 2u;
tmpOtherEnvelope[chEnvelopeIndex].startPos.Dir = dataBuf[ii++];/* 起点方向 */
tmpOtherEnvelope[chEnvelopeIndex].startPos.Lnk = ShortFromChar(&dataBuf[ii]);/* 起点link */
ii += 2u;
tmpOtherEnvelope[chEnvelopeIndex].startPos.Off = LongFromChar(&dataBuf[ii]);/* 起点offset */
ii += 4u;
tmpOtherEnvelope[chEnvelopeIndex].endPos.Dir = dataBuf[ii++];/* 终点方向 */
tmpOtherEnvelope[chEnvelopeIndex].endPos.Lnk = ShortFromChar(&dataBuf[ii]);/* 终点link */
ii += 2u;
tmpOtherEnvelope[chEnvelopeIndex].endPos.Off = LongFromChar(&dataBuf[ii]);/* 终点offset */
ii += 4u;
wLinkTioc = GetLinkManageTiocById(tmpOtherEnvelope[chEnvelopeIndex].startPos.Lnk);
if (wLinkTioc == localCiId)
{
(void)dsuCheckSameLoc(tmpOtherEnvelope[chEnvelopeIndex].startPos.Lnk, tmpOtherEnvelope[chEnvelopeIndex].startPos.Off, &tmpOtherEnvelope[chEnvelopeIndex].startPos.Lnk, &tmpOtherEnvelope[chEnvelopeIndex].startPos.Off);
}
wLinkTioc = GetLinkManageTiocById(tmpOtherEnvelope[chEnvelopeIndex].endPos.Lnk);
if (wLinkTioc == localCiId)
{
(void)dsuCheckSameLoc(tmpOtherEnvelope[chEnvelopeIndex].endPos.Lnk, tmpOtherEnvelope[chEnvelopeIndex].endPos.Off, &tmpOtherEnvelope[chEnvelopeIndex].endPos.Lnk, &tmpOtherEnvelope[chEnvelopeIndex].endPos.Off);
}
/*分界点相邻OC发来的包络截取转移至发送联锁处理*/
tmpOtherEnvelope[chEnvelopeIndex].ACCnt = elm_PrepareACBtwPoints(tmpOtherEnvelope[chEnvelopeIndex].startPos, tmpOtherEnvelope[chEnvelopeIndex].endPos, tmpOtherEnvelope[chEnvelopeIndex].ACID);
/* 内部优化 20220419 wqm elm_PrepareACBtwPoints返回0或者返回列车包络中包含的区段最大个数时,此处都应设置返回为CI_ERROR*/
if ((SECTION_IN_ENVELOPE_SUM_MAX == tmpOtherEnvelope[chEnvelopeIndex].ACCnt) || (0u == tmpOtherEnvelope[chEnvelopeIndex].ACCnt))
{
reVal = CI_ERROR;
}
else
{
for (chAcIndex = 0u; chAcIndex < tmpOtherEnvelope[chEnvelopeIndex].ACCnt; chAcIndex++)
{
wTiocId = GetAxisBelongTioc(tmpOtherEnvelope[chEnvelopeIndex].ACID[chAcIndex]);
if ((localCiId == wTiocId) || (0u == wTiocId))
{
reVal = CI_ERROR;
break;
}
else
{
;
}
}
}
tmpOtherEnvelope[chEnvelopeIndex].trianCnt = dataBuf[ii++];/* 包含列车数量 */
for (chTrainIndex = 0u; chTrainIndex < tmpOtherEnvelope[chEnvelopeIndex].trianCnt; chTrainIndex++)
{
tmpOtherEnvelope[chEnvelopeIndex].trainID[chTrainIndex] = ShortFromChar(&dataBuf[ii]);/* 列车ID */
ii += 2u;
tmpOtherEnvelope[chEnvelopeIndex].ACTPort[chTrainIndex] = dataBuf[ii++]; /* 列车激活端——UCT跨分界点RRM用 */
}
if (CI_SUCCESS != reVal)
{
break;
}
}
if (CI_SUCCESS == reVal)
{
/*全部解析通过 写入分界点接收到的包络数据 */
SetCfpOtherOcENum(deviceId, chEnvelopeNum);
for (chEnvelopeIndex = 0u; chEnvelopeIndex < chEnvelopeNum; chEnvelopeIndex++)
{
SetCfpOtherOcEData(deviceId, chEnvelopeIndex, tmpOtherEnvelope[chEnvelopeIndex]);
}
}
}
else
{
reVal = CI_ERROR;
}
for (chEnvelopeIndex = 0u; chEnvelopeIndex < chEnvelopeNum; chEnvelopeIndex++)
if (CI_SUCCESS == reVal)
{
tmpEnvelopeInfo.envelopeType = dataBuf[ii++]; /* 包络类型 */
if ((TYPE_UKT_ENVELOPE == tmpEnvelopeInfo.envelopeType)
|| (TYPE_UCT_ENVELOPE == tmpEnvelopeInfo.envelopeType)
|| (TYPE_CT_ENVELOPE == tmpEnvelopeInfo.envelopeType))
chCtNum = dataBuf[ii++];
for (chCtIndex = 0u; chCtIndex < chCtNum; chCtIndex++)
{
;/*1:通信车 2:丢失通信车 3:隐藏车*/
}
else
{
reVal = CI_ERROR;
}
tmpEnvelopeInfo.headTrainID = ShortFromChar(&dataBuf[ii]);/* 前车ID */
ii += 2u;
tmpEnvelopeInfo.tailTrainID = ShortFromChar(&dataBuf[ii]);/* 后车ID */
ii += 2u;
tmpEnvelopeInfo.startPos.Dir = dataBuf[ii++];/* 起点方向 */
tmpEnvelopeInfo.startPos.Lnk = ShortFromChar(&dataBuf[ii]);/* 起点link */
ii += 2u;
tmpEnvelopeInfo.startPos.Off = LongFromChar(&dataBuf[ii]);/* 起点offset */
ii += 4u;
tmpEnvelopeInfo.endPos.Dir = dataBuf[ii++];/* 终点方向 */
tmpEnvelopeInfo.endPos.Lnk = ShortFromChar(&dataBuf[ii]);/* 终点link */
ii += 2u;
tmpEnvelopeInfo.endPos.Off = LongFromChar(&dataBuf[ii]);/* 终点offset */
ii += 4u;
wLinkTioc = GetLinkManageTiocById(tmpEnvelopeInfo.startPos.Lnk);
if (wLinkTioc == localCiId)
{
(void)dsuCheckSameLoc(tmpEnvelopeInfo.startPos.Lnk, tmpEnvelopeInfo.startPos.Off, &tmpEnvelopeInfo.startPos.Lnk, &tmpEnvelopeInfo.startPos.Off);
}
wLinkTioc = GetLinkManageTiocById(tmpEnvelopeInfo.endPos.Lnk);
if (wLinkTioc == localCiId)
{
(void)dsuCheckSameLoc(tmpEnvelopeInfo.endPos.Lnk, tmpEnvelopeInfo.endPos.Off, &tmpEnvelopeInfo.endPos.Lnk, &tmpEnvelopeInfo.endPos.Off);
}
/*截取分界点相邻OC发来的包络数据*/
reVal = CutCfpOtherOcEData(deviceId,&tmpEnvelopeInfo);
tmpEnvelopeInfo.ACCnt = elm_PrepareACBtwPoints(tmpEnvelopeInfo.startPos, tmpEnvelopeInfo.endPos, tmpEnvelopeInfo.ACID);
/* 内部优化 20220419 wqm elm_PrepareACBtwPoints返回0或者返回列车包络中包含的区段最大个数时,此处都应设置返回为CI_ERROR*/
if ((SECTION_IN_ENVELOPE_SUM_MAX == tmpEnvelopeInfo.ACCnt) || (0u == tmpEnvelopeInfo.ACCnt))
{
reVal = CI_ERROR;
}
else
{
for (chAcIndex = 0u; chAcIndex < tmpEnvelopeInfo.ACCnt; chAcIndex++)
{
wTiocId = GetAxisBelongTioc(tmpEnvelopeInfo.ACID[chAcIndex]);
if ((localCiId == wTiocId) || (0u == wTiocId))
{
reVal = CI_ERROR;
break;
}
else
{
;
}
}
}
tmpEnvelopeInfo.trianCnt = dataBuf[ii++];/* 包含列车数量 */
for (chTrainIndex = 0u; chTrainIndex < tmpEnvelopeInfo.trianCnt; chTrainIndex++)
{
tmpEnvelopeInfo.trainID[chTrainIndex] = ShortFromChar(&dataBuf[ii]);/* 列车ID */
wTrainId = ShortFromChar(&dataBuf[ii]); /* 列车ID */
ii += 2u;
tmpEnvelopeInfo.ACTPort[chTrainIndex] = dataBuf[ii++]; /* 列车激活端——UCT跨分界点RRM用 */
g_szTiocCt[chTiocIndex].szCtId[g_szTiocCt[chTiocIndex].chCtNum++] = wTrainId;
SetTrainMsgFromTiocId(wTrainId, (UINT8)sourceId);
(void)SetTrainTransmitStat(wTrainId, TRAIN_COMM_STATE_GOOD);
chLevel = dataBuf[ii++];
(void)SetTrainLevel(wTrainId, chLevel); /* 列车运行级别 */
dwTrainDelay = LongFromChar(&dataBuf[ii]); /* TIOC与列车通信延时 */
ii += 4u;
(void)SetTrainMsgDelayTime(wTrainId, dwTrainDelay);
wSpeed = ShortFromChar(&dataBuf[ii]);
ii += 2u;
(void)SetTrainSpeed(wTrainId, wSpeed); /* 列车速度 */
chSpeedDir = dataBuf[ii++];
(void)SetTrainSpeedDir(wTrainId, chSpeedDir); /* 速度方向 */
chTrainDir = dataBuf[ii++];
(void)SetTrainDir(wTrainId, chTrainDir); /* 列车运行方向 */
wLinkId = ShortFromChar(&dataBuf[ii]); /* 列车最大安全前link */
ii += 2u;
(void)SetTrainMaxHeadLink(wTrainId, wLinkId);
dwOffset = LongFromChar(&dataBuf[ii]); /* 列车最大安全前Offset */
ii += 4u;
(void)SetTrainMaxHeadOffset(wTrainId, dwOffset);
wLinkId = ShortFromChar(&dataBuf[ii]); /* 列车最小安全前link */
ii += 2u;
(void)SetTrainMinHeadLink(wTrainId, wLinkId);
dwOffset = LongFromChar(&dataBuf[ii]); /* 列车最小安全前Offset */
ii += 4u;
(void)SetTrainMinHeadOffset(wTrainId, dwOffset);
wLinkId = ShortFromChar(&dataBuf[ii]); /* 列车最大安全后link */
ii += 2u;
(void)SetTrainMaxTailLink(wTrainId, wLinkId);
dwOffset = LongFromChar(&dataBuf[ii]); /* 列车最大安全后Offset */
ii += 4u;
(void)SetTrainMaxTailOffset(wTrainId, dwOffset);
wLinkId = ShortFromChar(&dataBuf[ii]); /* 列车最小安全后link */
ii += 2u;
(void)SetTrainMinTailLink(wTrainId, wLinkId);
dwOffset = LongFromChar(&dataBuf[ii]); /* 列车最小安全后Offset */
ii += 4u;
(void)SetTrainMinTailOffset(wTrainId, dwOffset);
/*设置列车最大安全后端、最小安全前端、最大安全前端的运行方向*/
reVal = SetTrainOtherPointDir(wTrainId, chTrainDir);
}
if (CI_SUCCESS == reVal)
/*分界点远程RM跨控区申请信息*/
cRrmSrcRcId = dataBuf[ii++]; /*源RC ID*/
wRrmTrainId = ShortFromChar(&dataBuf[ii]); /* RRM列车ID */
ii += 2U;
wRrmTrainNextStaId = ShortFromChar(&dataBuf[ii]); /* RRM列车申请的下一站台ID */
ii += 2U;
chRrmSrcApplyState = dataBuf[ii++]; /* 跨控区远程RM时,源TIOC申请状态 */
chRrmDstAllowState = dataBuf[ii++]; /* 跨控区远程RM时,目标TIOC允许状态 */
SetCfpRrmSrcRcId(deviceId, cRrmSrcRcId);
SetCfpRrmTrainId(deviceId, wRrmTrainId);
SetCfpRrmTrainNextStaId(deviceId, wRrmTrainNextStaId);
if (cRrmSrcRcId != localCiId)
{
/* 写入分界点接收到的包络数据 */
SetCfpOtherOcEData(deviceId, chEnvelopeIndex, tmpEnvelopeInfo);
SetCfpRrmSrcApplyState(deviceId, chRrmSrcApplyState);
}
else
{
;
/*本控区为源RC,不设置*/
}
SetCfpRrmDstAllowState(deviceId, chRrmDstAllowState);
wCfpRelAdjaRcSignalId = ShortFromChar(&dataBuf[ii]);
ii += 2U;
cCfpSignalLightUpFlag = dataBuf[ii]; /*分界点信号机亮灯标志*/
ii++;
belongCiId = GetSignalBelongCiId(wCfpRelAdjaRcSignalId);
if ((0U != belongCiId) && (belongCiId == localCiId))
{
SetSleepTrainLightUpSignalFlag(wCfpRelAdjaRcSignalId, cCfpSignalLightUpFlag); /*设置来自分界点的休眠车点亮信号机标志有效*/
}
else
{
/*非本控区信号机,不处理*/
}
}
chCtNum = dataBuf[ii++];
for (chCtIndex = 0u; chCtIndex < chCtNum; chCtIndex++)
{
wTrainId = ShortFromChar(&dataBuf[ii]); /* 列车ID */
ii += 2u;
g_szTiocCt[chTiocIndex].szCtId[g_szTiocCt[chTiocIndex].chCtNum++] = wTrainId;
SetTrainMsgFromTiocId(wTrainId, (UINT8)sourceId);
(void)SetTrainTransmitStat(wTrainId, TRAIN_COMM_STATE_GOOD);
chLevel = dataBuf[ii++];
(void)SetTrainLevel(wTrainId, chLevel); /* 列车运行级别 */
dwTrainDelay = LongFromChar(&dataBuf[ii]); /* TIOC与列车通信延时 */
ii += 4u;
(void)SetTrainMsgDelayTime(wTrainId, dwTrainDelay);
wSpeed = ShortFromChar(&dataBuf[ii]);
ii += 2u;
(void)SetTrainSpeed(wTrainId, wSpeed); /* 列车速度 */
chSpeedDir = dataBuf[ii++];
(void)SetTrainSpeedDir(wTrainId, chSpeedDir); /* 速度方向 */
chTrainDir = dataBuf[ii++];
(void)SetTrainDir(wTrainId, chTrainDir); /* 列车运行方向 */
wLinkId = ShortFromChar(&dataBuf[ii]); /* 列车最大安全前link */
ii += 2u;
(void)SetTrainMaxHeadLink(wTrainId, wLinkId);
dwOffset = LongFromChar(&dataBuf[ii]); /* 列车最大安全前Offset */
ii += 4u;
(void)SetTrainMaxHeadOffset(wTrainId, dwOffset);
wLinkId = ShortFromChar(&dataBuf[ii]); /* 列车最小安全前link */
ii += 2u;
(void)SetTrainMinHeadLink(wTrainId, wLinkId);
dwOffset = LongFromChar(&dataBuf[ii]); /* 列车最小安全前Offset */
ii += 4u;
(void)SetTrainMinHeadOffset(wTrainId, dwOffset);
wLinkId = ShortFromChar(&dataBuf[ii]); /* 列车最大安全后link */
ii += 2u;
(void)SetTrainMaxTailLink(wTrainId, wLinkId);
dwOffset = LongFromChar(&dataBuf[ii]); /* 列车最大安全后Offset */
ii += 4u;
(void)SetTrainMaxTailOffset(wTrainId, dwOffset);
wLinkId = ShortFromChar(&dataBuf[ii]); /* 列车最小安全后link */
ii += 2u;
(void)SetTrainMinTailLink(wTrainId, wLinkId);
dwOffset = LongFromChar(&dataBuf[ii]); /* 列车最小安全后Offset */
ii += 4u;
(void)SetTrainMinTailOffset(wTrainId, dwOffset);
/*设置列车最大安全后端、最小安全前端、最大安全前端的运行方向*/
reVal = SetTrainOtherPointDir(wTrainId, chTrainDir);
}
/*分界点远程RM跨控区申请信息*/
cRrmSrcRcId = dataBuf[ii++]; /*源RC ID*/
wRrmTrainId = ShortFromChar(&dataBuf[ii]); /* RRM列车ID */
ii += 2U;
wRrmTrainNextStaId = ShortFromChar(&dataBuf[ii]); /* RRM列车申请的下一站台ID */
ii += 2U;
chRrmSrcApplyState = dataBuf[ii++]; /* 跨控区远程RM时,源TIOC申请状态 */
chRrmDstAllowState = dataBuf[ii++]; /* 跨控区远程RM时,目标TIOC允许状态 */
SetCfpRrmSrcRcId(deviceId, cRrmSrcRcId);
SetCfpRrmTrainId(deviceId, wRrmTrainId);
SetCfpRrmTrainNextStaId(deviceId, wRrmTrainNextStaId);
if (cRrmSrcRcId != localCiId)
{
SetCfpRrmSrcApplyState(deviceId, chRrmSrcApplyState);
}
else
{
/*本控区为源RC,不设置*/
}
SetCfpRrmDstAllowState(deviceId, chRrmDstAllowState);
wCfpRelAdjaRcSignalId = ShortFromChar(&dataBuf[ii]);
ii += 2U;
cCfpSignalLightUpFlag = dataBuf[ii]; /*分界点信号机亮灯标志*/
ii++;
belongCiId = GetSignalBelongCiId(wCfpRelAdjaRcSignalId);
if ((0U != belongCiId) && (belongCiId == localCiId))
{
SetSleepTrainLightUpSignalFlag(wCfpRelAdjaRcSignalId, cCfpSignalLightUpFlag); /*设置来自分界点的休眠车点亮信号机标志有效*/
}
else
{
/*非本控区信号机,不处理*/
break;
}
}
}
@@ -3834,7 +3843,6 @@ void PackCiToCiDataFrameUseCfg(UINT8 dstCiId,UINT8* dataFrame, UINT16* dataLengt
UINT8 routeBelongCi = 0u;
UINT8 belongCiId = 0u;
UINT8 startLockFlag = 0u;
UINT16 secPLockBelongRouteId = 0u;
UINT16 logSectionSum = 0u;
UINT16* logIdBuf = NULL;
UINT16 logLockBelongRouteId = 0u;
@@ -5167,7 +5175,6 @@ UINT8 ParseCiToCiDataFrameHLHT(UINT8* dataBuf, const UINT16 dataLength, const UI
UINT32 ii = 0u;
UINT8 startLockState = 0u;
UINT8 chTransmitRecvDataCycResult = 0U;/*通信状态更新结果*/
UINT8 ch2oo2SheBeiType = 0U;/*设备类型*/
UINT32 dwBadEnsureTime = 0U; /*通信中断判断周期数*/
UINT32 dwAppCycleTime = 0U; /*CI应用周期*/
@@ -9577,7 +9584,6 @@ UINT8 ParseCiToCiDataCheck(UINT8* dataBuf, UINT16 dataLength,UINT8 *errNo)
{
UINT8 reVal = CI_ERROR;
UINT8 errorNo_length = 0U;
UINT8 errorNO_Type = 0U;
UINT16 ii = 0U; /*数据索引*/
/*入参防护*/
@@ -10920,7 +10926,6 @@ UINT8 CheckCiToCiSignalData(const UINT8* dataBuf, UINT16* index)
UINT8 chSignalMaintainState = 0U;/*信号机维修点灯状态*/
UINT8 chSignalDsState = 0U;/*信号机断丝状态*/
UINT8 chDsState = 0U; /*信号机断丝按位校验*/
UINT8 chSignalVBLNearFlag = 0U; /*信号机VBL列车接近标志*/
UINT8 chCheckSigCurColorResult = CI_ERROR;/*信号机当前显示颜色合法性检查结果*/
UINT8 cCutBtnState = 0U; /*旁路按钮状态*/
@@ -14571,7 +14576,7 @@ UINT8 CiToCiEnvelopeCheck(const UINT8* dataBuf, UINT16* index)
chEnvelopeNum = dataBuf[ii];
ii++;
if (SECTION_REL_ENVELOPE_SUM_MAX >= chEnvelopeNum)
if (OTHER_RC_SEND_ENVELOPE_SUM_MAX >= chEnvelopeNum)
{
for (chEnvelopeIndex = 0u; chEnvelopeIndex < chEnvelopeNum; chEnvelopeIndex++)
{
@@ -7054,6 +7054,8 @@ static UINT8 PackCiToIvocSleepTrainInfo(UINT8* pDataBuf, UINT16 *wDataLength)
UINT16 wEnvelopeSendSumIndex = 0u;
UINT16 wTrainId = 0u;
UINT8 chLinkLogicDirUpAndDown = 0u;
UINT8 chTrainVirHeadScreenFlag = 0U;/*ÐéÄâǰɸ±êÖ¾*/
UINT8 chTrainVirTailScreenFlag = 0U;/*ÐéÄâºóɸ±êÖ¾*/
if ((NULL == pDataBuf)
|| (NULL == wDataLength))
@@ -7142,8 +7144,15 @@ static UINT8 PackCiToIvocSleepTrainInfo(UINT8* pDataBuf, UINT16 *wDataLength)
chRetVal = CI_ERROR;
}
/*前筛*/
chHeadScreStat = strEnvelope.suspicHead;
chTrainVirHeadScreenFlag = GetTrainVirHeadScreenPassFlag(wTrainId);
if (TRAIN_VIR_SCREEN_PASS_FLAG_VALID == chTrainVirHeadScreenFlag)
{
chHeadScreStat = CI_IVOC_HEAD_SCREEN_PASS;
}
else
{
chHeadScreStat = strEnvelope.suspicHead;
}
if (CI_IVOC_HEAD_SCREEN_PASS == chHeadScreStat)
{
pDataBuf[ii] |= BIT_VAL_00000001B << 2; /*前端筛选通过 01B*/
@@ -7158,7 +7167,15 @@ static UINT8 PackCiToIvocSleepTrainInfo(UINT8* pDataBuf, UINT16 *wDataLength)
debug_infor_printf((const)"\n PackCiToIvocSleepTrainInfo HeadScreState_Error, state : %d \n", chHeadScreStat);
}
/*后筛*/
chTailScreStat = strEnvelope.suspicTail;
chTrainVirTailScreenFlag = GetTrainVirTailScreenPassFlag(wTrainId);
if (TRAIN_VIR_SCREEN_PASS_FLAG_VALID == chTrainVirTailScreenFlag)
{
chTailScreStat = CI_IVOC_TAIL_SCREEN_PASS;
}
else
{
chTailScreStat = strEnvelope.suspicTail;
}
if (CI_IVOC_TAIL_SCREEN_PASS == chTailScreStat)
{
pDataBuf[ii] |= BIT_VAL_00000001B << 4; /*后端筛选通过 01B*/
+297 -4
View File
@@ -495,6 +495,14 @@ UINT8 RelayInit(CHAR* FSName)
debug_infor_printf((const)"LinkSpecialEaDataInit fail.\r\n");
}
/*计轴区段防护道岔初始化*/
funcRtn *= AxisSecProtectSwitchInit();
if (0u == funcRtn)
{
debug_infor_printf((const)"AxisSecProtectSwitchInit fail.\r\n");
}
return funcRtn;
}
@@ -1996,6 +2004,7 @@ UINT8 PhySgmtCfgDtStruFromDquSgmtStr(DSU_PHYSICAL_SGMT_STRU* pPhysicalSgmt, Phys
}
pPsclSgmtCfgDtStr->PhySecType = pPhysicalSgmt->Type;
pPsclSgmtCfgDtStr->LjkSecFlag = pPhysicalSgmt->LjkFlag;
pPsclSgmtCfgDtStr->QcxSecFlag = pPhysicalSgmt->QcxFlag;
pPsclSgmtCfgDtStr->BelongAxleSysID = pPhysicalSgmt->BelongAxleSysID;
pPsclSgmtCfgDtStr->AxisSectionSum = 0u;
pPsclSgmtCfgDtStr->LocatedFloodGateSum = 0U; /*所在防淹门数量初始化为0*/
@@ -7112,7 +7121,9 @@ UINT8 RouteConfigDataStructInit(CHAR * FSName)
for (i = 0u; i < dquCICfgDtStr.lgcSctCfgDtStrLen; i++)
{
execRet = LogRelateRouteDataInit(dquCICfgDtStr.RouteCfgDtStr, &(dquCICfgDtStr.lgcSctCfgDtStr[i]));/*逻辑区段关联进路计算*/
execRet *= LogRelateOverlapDataInit(dquCICfgDtStr.OvlapCfgDtStr, &(dquCICfgDtStr.lgcSctCfgDtStr[i]));/*逻辑区段关联保护区段计算*/
execRet *= LogRelateProSwDataInit(dquCICfgDtStr.RouteCfgDtStr, &(dquCICfgDtStr.lgcSctCfgDtStr[i]));/*逻辑区段关联防护道岔计算*/
if (execRet > 0u)
{
@@ -11701,7 +11712,7 @@ UINT8 LogRelateProSwDataInit(RouteConfigDataStruct* RouteCfgDtStr, LogicSectionC
for (mm = 0U; mm < pLgScCfgDtStr->chRelateProSwSum; mm++)
{/*关联防护道岔ID去重*/
if ((pLgScCfgDtStr->wRelateProSwId[mm].SwitchId == dquCICfgDtStr.RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[pLgScCfgDtStr->wRelateRouteId[kk]]].RouteProtectSwitchStru[hh].ProtectSwitchId)
&&(pLgScCfgDtStr->wRelateProSwId[mm].SwitchPosition == dquCICfgDtStr.RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[pLgScCfgDtStr->wRelateRouteId[kk]]].RouteProtectSwitchStru[hh].ProtectPosition))
&& (pLgScCfgDtStr->wRelateProSwId[mm].SwitchPosition == dquCICfgDtStr.RouteCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuRouteIndex[pLgScCfgDtStr->wRelateRouteId[kk]]].RouteProtectSwitchStru[hh].ProtectPosition))
{
chProtectSwFlag = 1U;
break;
@@ -11746,6 +11757,11 @@ UINT8 LogRelateProSwDataInit(RouteConfigDataStruct* RouteCfgDtStr, LogicSectionC
{
rtnvalue = 1U;
}
if (1U == rtnvalue)
{/*将逻辑区段所属保护区段的防护道岔存储入逻辑区段结构体*/
rtnvalue = LogRelateProSwDataByOverlapInit(pLgScCfgDtStr);
}
return rtnvalue;
}
@@ -12804,7 +12820,7 @@ UINT8 AirShaftSectionDataInit(RouteConfigDataStruct* pRouteCfgDtStr, LS_AirShaft
}
}
}
else if((NULL != pRouteCfgDtStr) && (NULL == pAirShaftSecStruct))
else if ((NULL != pRouteCfgDtStr) && (NULL == pAirShaftSecStruct))
{/*风井进路检查表未配置数据*/
pRouteCfgDtStr->airShaftRouteSecSum = 0U;
(void)CommonMemSet((void*)pRouteCfgDtStr->wAirShaftRouteSecIdBuf, (UINT32)sizeof(pRouteCfgDtStr->wAirShaftRouteSecIdBuf), 0U, (UINT32)sizeof(pRouteCfgDtStr->wAirShaftRouteSecIdBuf));
@@ -12814,6 +12830,283 @@ UINT8 AirShaftSectionDataInit(RouteConfigDataStruct* pRouteCfgDtStr, LS_AirShaft
{
/*入参非法,返回0*/
}
return rtnvalue;
}
}
/*********************************************
*
*pLogCfgDtStr配置数据结构体指针
*01
* add mpt 20260331
*********************************************/
UINT8 LogRelateProSwDataByOverlapInit(LogicSectionConfigDataStruct* pLgScCfgDtStr)
{
UINT8 rtnvalue = 0U;
UINT8 ii = 0U;
UINT16 jj = 0U;
UINT8 kk = 0U;
UINT8 hh = 0U;
UINT8 mm = 0U;
UINT16 wProtectSwSum = 0U;/*逻辑区段关联防护道岔数量计数*/
UINT16 wProtectSwId = 0U;/*逻辑区段关联防护道岔ID过渡变量*/
UINT8 chProtectSwFlag = 0U;/*逻辑区段关联防护道岔去重标志*/
UINT8 chMaxCheck = CI_SUCCESS;
if (NULL != pLgScCfgDtStr)
{
if (0u == pLgScCfgDtStr->chRelateRouteSum)
{
/*逻辑区段关联防护道岔计算*/
for (ii = 0; ii < pLgScCfgDtStr->chLogsecSwitchSum; ii++)
{/*遍历逻辑区段包含的所有道岔*/
wProtectSwSum = dquCICfgDtStr.SwchCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuPointIndex[pLgScCfgDtStr->LogsecSwitchIdStru[ii].SwitchId]].wProtectSwitchNum;
for (jj = 0; jj < wProtectSwSum; jj++)
{/*遍历道岔对应的防护道岔*/
wProtectSwId = dquCICfgDtStr.SwchCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuPointIndex[pLgScCfgDtStr->LogsecSwitchIdStru[ii].SwitchId]].wszProtectSwitchIdBuf[jj];
chProtectSwFlag = 0U;
for (kk = 0U; kk < pLgScCfgDtStr->chRelateOverLapSum; kk++)
{/*遍历逻辑区段关联的保护区段*/
for (hh = 0U; hh < dquCICfgDtStr.OvlapCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuProtectLinkIndex[pLgScCfgDtStr->wRelateOverLapIdBuf[kk]]].ProtectSwitchSum; hh++)
{/*查询逻辑区段关联保护区段,若保护区段包含该防护道岔,则逻辑区段关联防护道岔的位置与保护区段一致*/
if (dquCICfgDtStr.OvlapCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuProtectLinkIndex[pLgScCfgDtStr->wRelateOverLapIdBuf[kk]]].ProtectSwitchStru[hh].ProtectSwitchId == wProtectSwId)
{
for (mm = 0U; mm < pLgScCfgDtStr->chRelateProSwSum; mm++)
{/*关联防护道岔ID去重*/
if ((pLgScCfgDtStr->wRelateProSwId[mm].SwitchId == dquCICfgDtStr.OvlapCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuProtectLinkIndex[pLgScCfgDtStr->wRelateOverLapIdBuf[kk]]].ProtectSwitchStru[hh].ProtectSwitchId)
&& (pLgScCfgDtStr->wRelateProSwId[mm].SwitchPosition == dquCICfgDtStr.OvlapCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuProtectLinkIndex[pLgScCfgDtStr->wRelateOverLapIdBuf[kk]]].ProtectSwitchStru[hh].ProtectPosition))
{
chProtectSwFlag = 1U;
break;
}
}
if (1U != chProtectSwFlag)
{/*当前防护道岔数组中不包含此ID才进行添加*/
if (LOGSEC_RELATE_PRO_SW_SUM_MAX > pLgScCfgDtStr->chRelateProSwSum)
{
pLgScCfgDtStr->wRelateProSwId[pLgScCfgDtStr->chRelateProSwSum].SwitchId = dquCICfgDtStr.OvlapCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuProtectLinkIndex[pLgScCfgDtStr->wRelateOverLapIdBuf[kk]]].ProtectSwitchStru[hh].ProtectSwitchId;
pLgScCfgDtStr->wRelateProSwId[pLgScCfgDtStr->chRelateProSwSum].SwitchPosition = dquCICfgDtStr.OvlapCfgDtStr[g_dsuEmapStru->dsuEmapIndexStru->dsuProtectLinkIndex[pLgScCfgDtStr->wRelateOverLapIdBuf[kk]]].ProtectSwitchStru[hh].ProtectPosition;
(pLgScCfgDtStr->chRelateProSwSum)++;
}
else
{
chMaxCheck = CI_ERROR;
}
break;
}
}
}
if (CI_ERROR == chMaxCheck)
{
break;
}
}
if (CI_ERROR == chMaxCheck)
{
break;
}
}
if (CI_ERROR == chMaxCheck)
{
break;
}
}
if (CI_ERROR == chMaxCheck)
{
rtnvalue = 0U;
}
else
{
rtnvalue = 1U;
}
}
else
{
rtnvalue = 1U;
}
}
return rtnvalue;
}
/*********************************************
*
*pOverlapCfgDtStr保护区段配置数据结构体指针 pLogCfgDtStr配置数据结构体指针
*01
* add by mpt 20260331
*********************************************/
UINT8 LogRelateOverlapDataInit(OverlapConfigDataStruct* pOverlapCfgDtStr, LogicSectionConfigDataStruct* pLogCfgDtStr)
{
UINT16 i = 0U;
UINT16 j = 0U;
UINT8 rtnvalue = 0U;
UINT8 chMaxCheck = CI_SUCCESS;
if ((NULL != pOverlapCfgDtStr) && (NULL != pLogCfgDtStr))
{
/*逻辑区段包含保护区段数目初始化为0*/
pLogCfgDtStr->chRelateOverLapSum = 0U;
for (i = 0U; i < dquCICfgDtStr.OvlapCfgDtStrLen; i++)
{/*遍历所有保护区段,若包含此逻辑区段,即此保护区段为本逻辑区段关联保护区段*/
for (j = 0; j < pOverlapCfgDtStr[i].cLogicSectionSum; j++)
{
if (pOverlapCfgDtStr[i].szLogicSectionIdBuf[j] == pLogCfgDtStr->LogicSectionId)
{
if (LOGSEC_RELATE_OVERLAP_SUM_MAX > pLogCfgDtStr->chRelateOverLapSum)
{
pLogCfgDtStr->wRelateOverLapIdBuf[pLogCfgDtStr->chRelateOverLapSum] = pOverlapCfgDtStr[i].OverlapId;
pLogCfgDtStr->chRelateOverLapSum++;
}
else
{
chMaxCheck = CI_ERROR;
}
break;
}
}
if (CI_ERROR == chMaxCheck)
{
break;
}
}
if (CI_ERROR == chMaxCheck)
{
rtnvalue = 0U;
}
else
{
rtnvalue = 1U;
}
}
return rtnvalue;
}
/*********************************************
*
*LogsecSwitchStruct* pSrcSwitchStructBuf
UINT8 chSrclen
AxisSwitchStruct* pDstSwitchStructBuf
UINT8 dstLen
*-1
*add by mpt 20260331
*********************************************/
INT16 AxisSecCfgDtStruFromLogicSecStr(LogsecSwitchStruct* pSrcSwitchStructBuf, UINT8 chSrclen, AxisSwitchStruct* pDstSwitchStructBuf, UINT8 dstLen)
{
UINT8 i = 0u;
UINT8 j = 0u;
INT16 rtnvalue = -1;
UINT8 tempLen = 0u;
if ((NULL != pSrcSwitchStructBuf) && (NULL != pDstSwitchStructBuf))
{
rtnvalue = 0;
tempLen = dstLen;
for (i = 0u; i < chSrclen; i++)
{
for (j = 0u; j < dstLen; j++)
{
if ((pSrcSwitchStructBuf[i].SwitchId == pDstSwitchStructBuf[j].SwitchId) && (pSrcSwitchStructBuf[i].SwitchPosition == pDstSwitchStructBuf[j].SwitchPosition))
{/*输入的源数据在目标数据中已经找到了,则跳出*/
break;
}
else
{
/*继续*/
}
}
if (j == dstLen)
{/*在目标数据中未找到本条防护道岔配置*/
if (AXIS_RELATE_PRO_SW_SUM_MAX > tempLen)
{
pDstSwitchStructBuf[tempLen].SwitchId = pSrcSwitchStructBuf[i].SwitchId;
pDstSwitchStructBuf[tempLen].SwitchPosition = pSrcSwitchStructBuf[i].SwitchPosition;
tempLen++;
}
else
{
rtnvalue = -1;
break;
}
}
else
{
/*充分数据无需添加*/
}
}
}
else
{
/*返回失败*/
rtnvalue = -1;
}
if (0 == rtnvalue)
{
rtnvalue = (INT16)tempLen;
}
return rtnvalue;
}
/*********************************************
*
*void
*01
* add mpt 20260331
*********************************************/
UINT8 AxisSecProtectSwitchInit(void)
{
UINT16 j = 0u;
UINT16 i = 0u;
INT16 ret = 0;
UINT16 k = 0u;
UINT8 rtnvalue = 0u;
AxisSectionConfigDataStruct* pAxScCfgDtStr = NULL;
for (k = 0u; k < dquCICfgDtStr.AxisCfgDtStrLen; k++)
{
pAxScCfgDtStr = &dquCICfgDtStr.AxisSctCfgDtStr[k];
for (i = 0u; i < pAxScCfgDtStr->LogSectionSum; i++)
{
for (j = 0u; j < dquCICfgDtStr.lgcSctCfgDtStrLen; j++)
{
if (dquCICfgDtStr.lgcSctCfgDtStr[j].LogicSectionId == pAxScCfgDtStr->LogSectionIdBuf[i])
{
/*拷贝拷贝*/
ret = AxisSecCfgDtStruFromLogicSecStr(dquCICfgDtStr.lgcSctCfgDtStr[j].wRelateProSwId, dquCICfgDtStr.lgcSctCfgDtStr[j].chRelateProSwSum, pAxScCfgDtStr->wRelateProSwId, pAxScCfgDtStr->chRelateProSwSum);
if (-1 != ret)
{
pAxScCfgDtStr->chRelateProSwSum = (UINT8)ret;/*更新数量*/
}
break;
}
}
if (-1 == ret)
{
break;
}
}
if (-1 == ret)
{
break;
}
}
if (-1 == ret)
{
rtnvalue = 0u;
}
else
{
rtnvalue = 1u;
}
return rtnvalue;
}
+38
View File
@@ -945,5 +945,43 @@ UINT8 BGLinkRelAGLinkCal(LinkDataConfigStru* pLinkScCfgDtStr);
*Create yx 2026.03.04
*********************************************/
UINT8 AirShaftSectionDataInit(RouteConfigDataStruct* pRouteCfgDtStr, LS_AirShaftStruct* pAirShaftSecStruct);
/*********************************************
*函数功能:逻辑区段关联防护道岔(遍历保护区段)
*参数说明:pLogCfgDtStr配置数据结构体指针
*返回值:0,失败;1,成功
* add mpt 20260331
*********************************************/
UINT8 LogRelateProSwDataByOverlapInit(LogicSectionConfigDataStruct* pLgScCfgDtStr);
/*********************************************
*函数功能:逻辑区段关联保护区段相关数据初始化
*参数说明:pOverlapCfgDtStr保护区段配置数据结构体指针 pLogCfgDtStr配置数据结构体指针
*返回值:0,失败;1,成功
* add by mpt 20260331
*********************************************/
UINT8 LogRelateOverlapDataInit(OverlapConfigDataStruct* pOverlapCfgDtStr, LogicSectionConfigDataStruct* pLogCfgDtStr);
/*********************************************
*函数功能:逻辑区段配置数据结构体计算
*参数说明:LogsecSwitchStruct* pSrcSwitchStructBuf 源数据
UINT8 chSrclen 源数据长度
AxisSwitchStruct* pDstSwitchStructBuf 目标数据
UINT8 dstLen 目标数据长度
*返回值:-1,失败;其他为长度
*add by mpt 20260331
*********************************************/
INT16 AxisSecCfgDtStruFromLogicSecStr(LogsecSwitchStruct* pSrcSwitchStructBuf, UINT8 chSrclen, AxisSwitchStruct* pDstSwitchStructBuf, UINT8 dstLen);
/*********************************************
*函数功能:计轴区段防护道岔初始化
*参数说明:void
*返回值:0,失败;1,成功
* add mpt 20260331
*********************************************/
UINT8 AxisSecProtectSwitchInit(void);
#endif
+4
View File
@@ -384,5 +384,9 @@
#define ROUTE_TO_LEAD_FLAG_NO ((UINT8)0x55) /*普通进路转引导进路标志无效*/
#define ROUTE_TO_LEAD_FLAG_YES ((UINT8)0xaa) /*普通进路转引导进路标志有效*/
#define ROUTE_COUPLINK_RESULT_GET ((UINT8)0x55) /*收到联挂结果*/
#define ROUTE_COUPLINK_RESULT_NOT ((UINT8)0xaa) /*未收到联挂结果*/
#endif
@@ -1150,4 +1150,56 @@ UINT8 GetAxisSecCbtcProperty(const UINT16 axisSectionId)
}
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,9 @@ typedef struct S_AxisSectionConfigDataStruct
UINT8 chAxisLinXian; /*计轴临线属性-是否为本线路-电子地图Link表获得*/
UINT32 dwAxisTotalLen; /*计轴关联link总长*/
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;
extern AxisSectionConfigDataStruct AxisSectionConfigDataStru[AXIS_SECTION_SUM_MAX]; /*定义计轴区段配置数据结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
@@ -321,6 +324,31 @@ UINT8 GetAxisSecBorderProperty(const UINT16 axisSectionId);
*/
UINT8 GetAxisSecCbtcProperty(const UINT16 axisSectionId);
/*
* ID计轴区段的CBTC区域属性
* const UINT16 axisSectionId ID
* 0x55 CBTC区域属性
* 0xAA CBTC区域属性
* Created By LQ 2025.08.05
*/
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
}
#endif
@@ -873,4 +873,45 @@ void ClearAxisTXSafeLocFlag(void)
/*ID非法,不处理*/
}
}
}
/*
*
* UINT16 wAcId
* CI_ERROR CI_SUCCESS满足
* Create fan 20260410
*/
UINT8 GetAcSwitchPosCheck(UINT16 wAcId)
{
AxisSwitchStruct* axisSwitchStru = NULL;
UINT8 axisSwitchSum = 0U;/*计轴条件道岔数量*/
UINT8 jj = 0U;
UINT8 retValue = CI_SUCCESS;/*本函数检查ARB使用 成功时需要检查未安全侧*/
UINT8 switchCurPosition = 0U;/*道岔位置*/
axisSwitchStru = GetAxisSwitchIdStru(wAcId);
axisSwitchSum = GetAxisSwitchSum(wAcId);
if (NULL != axisSwitchStru)
{
for (jj = 0U; jj < axisSwitchSum; jj++)
{
switchCurPosition = GetSwitchCurPosition(axisSwitchStru[jj].SwitchId); /*获取道岔当前位置*/
/*四开时保留可达性*/
if (((SWITCH_POSITION_FANWEI == switchCurPosition) || (SWITCH_POSITION_DINGWEI == switchCurPosition))
&& (axisSwitchStru[jj].SwitchPosition != switchCurPosition))
{
retValue = CI_ERROR;
break;
}
else
{
/*四开或道岔位置满足*/
/*计轴关联多个道岔时需所有道岔满足*/
}
}
}
else
{
;
}
return retValue;
}
@@ -283,6 +283,14 @@ void SetAxisTXSafeLocFlag(const UINT16 axisSectionId, const UINT8 cFlag);
*/
void ClearAxisTXSafeLocFlag(void);
/*
*
* UINT16 wAcId
* CI_ERROR CI_SUCCESS满足
* Create fan 20260410
*/
UINT8 GetAcSwitchPosCheck(UINT16 wAcId);
#ifdef __cplusplus
}
#endif
@@ -89,6 +89,10 @@ typedef struct S_LogicSectionConfigDataStruct
UINT16 logSecRltPsdBuf[LOGSEC_RELATE_PSD_MAX]; /*逻辑区段关联屏蔽门ID数组*/
UINT8 logSecRltEsbSum; /*关联紧急按钮数量*/
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;
/*******************************全局变量声明*******************************/
@@ -3747,6 +3747,9 @@ void LogJumpLockCmdManage(const UINT16 logSectionId, const UINT8 jumpLockState)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 checkResult = CI_ERROR;
UINT16 devId = 0u; /*구ID*/
UINT8 devState = 0u; /*구榴檄*/
UINT8 retVal = 0u;
/** 获取逻辑区段数组下标*/
bufIndex = GetlogSectionBufIndex(logSectionId);
@@ -3768,9 +3771,26 @@ void LogJumpLockCmdManage(const UINT16 logSectionId, const UINT8 jumpLockState)
else
{
/** 设置跳跃锁闭允许标志为允许 */
SetLogSecJumpLockPermFlag(logSectionId, LOGIC_JUMPUNLOCK_PERMISSIVE_YES);
ClearLogSeceSwitchDanCaoPos(logSectionId);/*헌뇜데꾸貫零*/
/** 设置逻辑区段跳跃锁闭 */
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);
}
else
{
SetLogSecJumpLockPermFlag(logSectionId, LOGIC_JUMPUNLOCK_PERMISSIVE_NO);
}
}
}
/** 逻辑区段跳跃锁闭未锁闭*/
@@ -3780,6 +3800,8 @@ void LogJumpLockCmdManage(const UINT16 logSectionId, const UINT8 jumpLockState)
SetLogSecJumpLockPermFlag(logSectionId, LOGIC_JUMPUNLOCK_PERMISSIVE_NO);
/** 设置跳跃锁闭未锁闭 */
SetLogSecJumpLockState(logSectionId, LOGIC_SECTION_JUMP_LOCK_NO);
SetLogSecRelProSwitchLockSta(logSectionId, SWITCH_LOCK_PROTECT_CANCEL);
}
else
{
@@ -174,6 +174,31 @@ UINT8 GetPhySecLjkFlag(const UINT16 phySectionId)
return retVal;
}
/*
* ID物理区段牵出线区段标志
* const UINT16 phySectionId, ID
* 0:
* >0: 线0x55线 0xAA线
* Create fan 20260415
*/
UINT8 GetPhySecQcxFlag(const UINT16 phySectionId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = CI_ERROR;
bufIndex = GetPhySecConfigBufIndex(phySectionId); /*获取区段数组下标*/
if (bufIndex < PHYSICAL_SECTION_SUM_MAX)
{
retVal = PhysicalSectionConfigDataStru[bufIndex].QcxSecFlag;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* ID物理区段轨道继电器ID
@@ -1232,7 +1257,7 @@ void AddNearPhySec(const UINT16 wPhySecId)
}
chAdjacentPhyNum = GetAdjacentPhySecNum(wPhySecId);
wAdjacentPhyBuf = GetAdjacentPhySecBuf(wPhySecId);/*本联锁直接相邻*/
for (ii = 0; ii < chAdjacentPhyNum; ii++)
for (ii = 0U; ii < chAdjacentPhyNum; ii++)
{
wAdjacentPhySec = wAdjacentPhyBuf[ii];
dwPhySecLen = GetPhySecRelayMinAcLen(wAdjacentPhySec);
@@ -1247,7 +1272,7 @@ void AddNearPhySec(const UINT16 wPhySecId)
/*直接相邻的长度不足*/
chNearSecNum = GetAdjacentPhySecNum(wAdjacentPhySec);
dwNearSecBuf = GetAdjacentPhySecBuf(wAdjacentPhySec);
for (jj = 0; jj < chNearSecNum; jj++)
for (jj = 0U; jj < chNearSecNum; jj++)
{
/*添加间接邻近的区段*/
dwIndirectLen = GetPhySecRelayMinAcLen(dwNearSecBuf[jj]);
@@ -1263,7 +1288,7 @@ void AddNearPhySec(const UINT16 wPhySecId)
else
{
/*待检查区域仍在本联锁和相邻RC发送范围*/
chAddCheck = CheckNearPhySec(dwNearSecBuf[jj], wPhySecId, wAdjacentPhySec);
chAddCheck = CheckNearPhySec(dwNearSecBuf[jj], wPhySecId, wAdjacentPhySec, 0U);
chBelongCi = GetPhySecBelongCiId(dwNearSecBuf[jj]);
chCiType = GetCiType(chBelongCi);
if (CI_SUCCESS == chAddCheck)
@@ -1279,7 +1304,7 @@ void AddNearPhySec(const UINT16 wPhySecId)
{
chTwoStepNearSecNum = GetAdjacentPhySecNum(dwNearSecBuf[jj]);
dwTwoStepNearSecBuf = GetAdjacentPhySecBuf(dwNearSecBuf[jj]);
for (kk = 0; kk < chTwoStepNearSecNum; kk++)
for (kk = 0U; kk < chTwoStepNearSecNum; kk++)
{
/*添加间隔两步邻近的区段*/
dwIndirectLen = GetPhySecRelayMinAcLen(dwTwoStepNearSecBuf[kk]);
@@ -1292,7 +1317,7 @@ void AddNearPhySec(const UINT16 wPhySecId)
}
else
{
chAddCheck = CheckNearPhySec(dwTwoStepNearSecBuf[kk], wPhySecId, dwNearSecBuf[jj]);
chAddCheck = CheckNearPhySec(dwTwoStepNearSecBuf[kk], wPhySecId, wAdjacentPhySec,dwNearSecBuf[jj]);
/*暂不再查*/
}
}
@@ -1349,25 +1374,25 @@ UINT16* GetAdjacentPhySecBuf(const UINT16 wPhySecId)
}
/*
*
* const UINT16 wPhySecId UINT16 basePhysecwPrePhySecId
* const UINT16 wPhySecId UINT16 basePhysec基准wAdjPhySecId ,wSndPreSec一步间接跳转
* CI_SUCCESS CI_ERROR
*Create fan 20240822
*/
UINT8 CheckNearPhySec(const UINT16 wPhySecId, const UINT16 basePhysec, const UINT16 wPrePhySecId)
UINT8 CheckNearPhySec(const UINT16 wPhySecId, const UINT16 basePhysec, const UINT16 wPrePhySecId,const UINT16 wSndPreSec)
{
UINT8 retValue = CI_SUCCESS;
UINT8 ii = 0U;
UINT8 jj = 0U;
UINT16* wAdjacentPhyBuf = NULL; /*直接相连区段数组*/
UINT16 chAdjacentPhyNum = 0U; /*直接相连区段数量*/
UINT8 chAdjacentPhyNum = 0U; /*直接相连区段数量*/
UINT8 chNearSecNum = 0U; /*间接相邻数量*/
UINT16 bufIndex = 0U;
UINT16 wTransitAc = 0U; /*跳转计轴*/
UINT8 chTransitAcNum = 0U;/*跳转计轴数量*/
bufIndex = GetPhySecConfigBufIndex(basePhysec); /*获取区段数组下标*/
chAdjacentPhyNum = GetAdjacentPhySecNum(basePhysec);
wAdjacentPhyBuf = GetAdjacentPhySecBuf(basePhysec);
chNearSecNum = PhysicalSectionConfigDataStru[bufIndex].chNearPhySecNum;
/*不是基准区段*/
if (wPhySecId == basePhysec)
{
@@ -1386,24 +1411,51 @@ UINT8 CheckNearPhySec(const UINT16 wPhySecId, const UINT16 basePhysec, const UIN
}
}
}
/*第二步 检查上一区段中存在跳转计轴*/
if (CI_SUCCESS == retValue)
{
if (0U == wSndPreSec)
{
/*一步间接*/
wTransitAc = GetTransitAcFromPreSec(wPhySecId, basePhysec, wPrePhySecId);
}
else
{
/*二步间接*/
wTransitAc = GetSndTransitAcFromPreSce(wPhySecId, basePhysec, wPrePhySecId, wSndPreSec);
}
if (0U == wTransitAc)
{
/*未获取到满足条件的计轴*/
retValue = CI_ERROR;
}
}
/*第步 检查已有间接相邻*/
/*第步 检查已有间接相邻*/
if (CI_SUCCESS == retValue)
{
for (jj = 0; jj < chNearSecNum; jj++)
{
if (wPhySecId == PhysicalSectionConfigDataStru[bufIndex].IndirectNearPhySecBuf[jj])
{
retValue = CI_ERROR;
break;
/*增加跳转计轴*/
chTransitAcNum = PhysicalSectionConfigDataStru[bufIndex].TransitAcData[jj].RelateAcNum;
if (PHYSICAL_INCLUDE_AXIS_SUM_MAX > chTransitAcNum)
{
PhysicalSectionConfigDataStru[bufIndex].TransitAcData[jj].AcIdBuf[chTransitAcNum] = wTransitAc;
PhysicalSectionConfigDataStru[bufIndex].TransitAcData[jj].RelateAcNum++;
}
retValue = CI_ERROR;/*不需要添加为间接相邻区段*/
}
}
}
/*添加*/
if ((CI_SUCCESS == retValue) &&(PHYSEC_INDIRECTNEAR_SEC_SUM_MAX>chNearSecNum))
{
/*新增间接相邻区段 记录第一个跳转计轴*/
PhysicalSectionConfigDataStru[bufIndex].IndirectNearPhySecBuf[chNearSecNum] = wPhySecId;
PhysicalSectionConfigDataStru[bufIndex].IndirectNearSecPreSec[chNearSecNum] = wPrePhySecId;
PhysicalSectionConfigDataStru[bufIndex].TransitAcData[chNearSecNum].AcIdBuf[0] = wTransitAc;
PhysicalSectionConfigDataStru[bufIndex].TransitAcData[chNearSecNum].RelateAcNum++;
PhysicalSectionConfigDataStru[bufIndex].chNearPhySecNum++;
}
else
@@ -1645,35 +1697,66 @@ void AddNeighborPhyConditionAc(const UINT16 wPhySecId, UINT8 chIndex, UINT16 AcI
}
/*
*
* const UINT16 wPhySecId UINT16 wNearSecId
*
*Create fan 20260303
* ID物理区段的ARB防护范围区段的跳转计轴序列
* const UINT16 phySectionId, ID UINT16 wNearSecID
* 0:
* >0: ID数组指针
*Create fan 202604010
*/
UINT16 GetNearSecPreSecId(const UINT16 wPhySecId, UINT16 wNearSecId)
UINT16* GetPhySecNearSecTransitAcBuf(const UINT16 phySectionId, const UINT16 wNearSecID)
{
UINT16 bufIndex = 0U;
UINT8 ii = 0U;
UINT16 retVal = 0U;
bufIndex = GetPhySecConfigBufIndex(wPhySecId); /*获取区段数组下标*/
if (PHYSICAL_SECTION_SUM_MAX > bufIndex)
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 * retVal = NULL;
UINT8 i = 0U;
bufIndex = GetPhySecConfigBufIndex(phySectionId); /*获取区段数组下标*/
if (PHYSICAL_SECTION_SUM_MAX> bufIndex)
{
for (ii = 0U; ii < PhysicalSectionConfigDataStru[bufIndex].chNearPhySecNum; ii++)
for (i = 0U; i < PhysicalSectionConfigDataStru[bufIndex].chNearPhySecNum; i++)
{
if (wNearSecId == PhysicalSectionConfigDataStru[bufIndex].IndirectNearPhySecBuf[ii])
if (PhysicalSectionConfigDataStru[bufIndex].IndirectNearPhySecBuf[i] == wNearSecID)
{
retVal = PhysicalSectionConfigDataStru[bufIndex].IndirectNearSecPreSec[ii];
retVal = PhysicalSectionConfigDataStru[bufIndex].TransitAcData[i].AcIdBuf;
break;
}
else
}
}
else
{
retVal = NULL;
}
return retVal;
}
/*
* ID物理区段到某个临近区段的直接跳转计轴数量
* const UINT16 phySectionId, ID UINT16 wNearSecID
* 0:
* >0: ID数组指针
*Create fan 202604010
*/
UINT8 GetPhySecNearSecTransitAcNum(const UINT16 phySectionId, const UINT16 wNearSecID)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = 0U;
UINT8 i = 0U;
bufIndex = GetPhySecConfigBufIndex(phySectionId); /*获取区段数组下标*/
if (PHYSICAL_SECTION_SUM_MAX> bufIndex)
{
for (i = 0U; i < PhysicalSectionConfigDataStru[bufIndex].chNearPhySecNum; i++)
{
if (PhysicalSectionConfigDataStru[bufIndex].IndirectNearPhySecBuf[i] == wNearSecID)
{
;/*继续*/
retVal = PhysicalSectionConfigDataStru[bufIndex].TransitAcData[i].RelateAcNum;
break;
}
}
}
else
{
;/*不处理*/
retVal = 0U;
}
return retVal;
}
@@ -1787,4 +1870,167 @@ UINT8 GetAdjacentPhySecAcCheck(const UINT16 wPhySecId, UINT16 wNearSec)
;/*返回需进行检查*/
}
return retValue;
}
/*
*
* constUINT16 wBasePhySec基准区段 wTransitAcId
* CI_ERROR不可达 CI_SUCCESS可达
* Create fan 20260410
*/
UINT8 GetTransitPhySecAcCheck(const UINT16 wBasePhySec, UINT16 wTransitAcId)
{
UINT8 retValue = CI_SUCCESS;/*SUCCESS时检查对应区段,为安全态*/
UINT16 wPreSec = 0U;
UINT8 jj = 0U;
UINT8 chAdvacentCheck = CI_ERROR;/*是否一步间接*/
UINT16 wFiestStepSec = 0U;
UINT8 chTransitAcNum = 0U; /*跳转计轴数量*/
UINT16* chTransitAcBuf = NULL; /*跳转计轴数组*/
UINT8 chStepCheck = CI_SUCCESS;
wPreSec = GetAxisSecRelativePhySecId(wTransitAcId);
if (0U != wPreSec)
{
/*待检查区段与上一区段之间的可达性由跳转计轴保证*/
retValue = GetAcSwitchPosCheck(wTransitAcId);
chAdvacentCheck = CheckPhySecIfAdjacent(wBasePhySec, wPreSec);
if (CI_SUCCESS == chAdvacentCheck)
{
/*一步间接:检查条件计轴+基准区段的道岔位置*/
retValue &= GetAdjacentPhySecAcCheck(wBasePhySec, wPreSec);/*基准区段的道岔满足*/
}
else
{
/*二步间接:检查条件计轴+一步间接区段的所有条件计轴中存在满足且基准道岔位置满足的区段*/
chTransitAcNum = GetPhySecNearSecTransitAcNum(wBasePhySec, wPreSec);
chTransitAcBuf = GetPhySecNearSecTransitAcBuf(wBasePhySec, wPreSec);
if ((NULL != chTransitAcBuf)&&(0U < chTransitAcNum))
{
for (jj = 0; jj < chTransitAcNum; jj++)
{
wFiestStepSec = GetAxisSecRelativePhySecId(chTransitAcBuf[jj]);
chStepCheck = GetAcSwitchPosCheck(chTransitAcBuf[jj]);
chStepCheck &= GetAdjacentPhySecAcCheck(wBasePhySec, wFiestStepSec);/*基准区段到直接相邻的道岔满足*/
if (CI_SUCCESS == chStepCheck)
{
break;
}
}
}
else
{
chStepCheck = CI_ERROR;/*不存在跳转条件*/
}
retValue &= chStepCheck;
}
}
/*检查跳转区段中存在*/
return retValue;
}
/*
* ID
* const UINT16 wPhySecId UINT16 basePhysec基准区段wAdjPhySecId
* CI_SUCCESS CI_ERROR
*Create fan 20260410
*/
UINT16 GetTransitAcFromPreSec(const UINT16 wPhySecId, const UINT16 basePhysec, const UINT16 wPrePhySecId)
{
UINT16 retAcId = 0U;
UINT8 phyAcNum = 0; /*物理区段计轴*/
UINT16* pACBuff = NULL; /*物理区段计轴数组*/
UINT16 wAcStratLink = 0U; /*计轴始端link*/
UINT16 wAcTerminLink = 0U; /*计轴终端link*/
UINT8 chAcLinkSum = 0;
UINT16* pAclinkBuf = NULL;
UINT16 wStartNearLink = 0U; /*计轴始端相邻link*/
UINT16 wTmmNearLink = 0U;/*计轴终端相邻link*/
UINT16 wStartNearSec = 0U;
UINT16 wTmmNearSec = 0U;
UINT8 jj = 0U;
/*跳转区段中找一端链接基准 一端为待检查的区段跳转计轴*/
phyAcNum = GetPAxisSectionSum(wPrePhySecId);
pACBuff = GetPAxisSectionIdBuf(wPrePhySecId);
if ((0U != phyAcNum) && (NULL != pACBuff))
{
/*遍历跳转区段的关联计轴*/
for (jj = 0u; jj < phyAcNum; jj++)
{
chAcLinkSum = GetAxisLinkSum(pACBuff[jj]);
pAclinkBuf = GetAxisLinkIdBuf(pACBuff[jj]);
wAcStratLink = pAclinkBuf[0];
wAcTerminLink = pAclinkBuf[chAcLinkSum - (UINT8)1U];
/*获取始端相邻物理区段*/
wStartNearLink = GetLinkOrgnJointMainLkIdById(wAcStratLink);
wStartNearSec = GetLinkRelatedPhySec(wStartNearLink);
/*获取终端相邻物理区段*/
wTmmNearLink = GetLinkTmnlJointMainLkById(wAcTerminLink);
wTmmNearSec = GetLinkRelatedPhySec(wTmmNearLink);
if (((wStartNearSec == basePhysec) && (wTmmNearSec == wPhySecId))
|| ((wStartNearSec == wPhySecId) && (wTmmNearSec == basePhysec)))
{
/*在跳转区段中找到跳转计轴*/
retAcId = pACBuff[jj];
break;
}
}
}
return retAcId;
}
/*
* ID
* const UINT16 wPhySecId UINT16 basePhysec基准wAdjPhySecId ,wSndPreSec一步间接跳转
* 0 >0 ID
*Create fan 20260410
*/
UINT16 GetSndTransitAcFromPreSce(const UINT16 wPhySecId, const UINT16 basePhysec, const UINT16 wAdjPhySecId, const UINT16 wSndPreSec)
{
UINT16 retAcId = 0U;/*符合条件二步跳转计轴*/
UINT16 wAcStratLink = 0U; /*计轴始端link*/
UINT16 wAcTerminLink = 0U; /*计轴终端link*/
UINT8 chAcLinkSum = 0;
UINT16* pAclinkBuf = NULL;
UINT16 wFirstStartNearLink = 0U; /*第一跳转计轴始端相邻link*/
UINT16 wFirstTmmNearLink = 0U;/*第一跳转计轴终端相邻link*/
UINT16 wFirstStepAc = 0U;/*基准到一步间接中的跳转计轴*/
UINT16 wSndStepAc = 0U;/*直接相邻到二步间接中的跳转计轴*/
wFirstStepAc = GetTransitAcFromPreSec(wSndPreSec, basePhysec, wAdjPhySecId);
wSndStepAc = GetTransitAcFromPreSec(wPhySecId, wAdjPhySecId, wSndPreSec);
if ((0U != wFirstStepAc) && (0U != wSndStepAc))
{
chAcLinkSum = GetAxisLinkSum(wFirstStepAc);
pAclinkBuf = GetAxisLinkIdBuf(wFirstStepAc);
wAcStratLink = pAclinkBuf[0];
wAcTerminLink = pAclinkBuf[chAcLinkSum - (UINT8)1U];
/*获取始端相邻link*/
wFirstStartNearLink = GetLinkOrgnJointMainLkIdById(wAcStratLink);
/*获取终端相邻link*/
wFirstTmmNearLink = GetLinkTmnlJointMainLkById(wAcTerminLink);
/*获取第二跳转计轴的始端终端*/
chAcLinkSum = GetAxisLinkSum(wSndStepAc);
pAclinkBuf = GetAxisLinkIdBuf(wSndStepAc);
wAcStratLink = pAclinkBuf[0];
wAcTerminLink = pAclinkBuf[chAcLinkSum - (UINT8)1U];
/*是否相等*/
if ((wFirstStartNearLink == wAcStratLink)
|| (wFirstStartNearLink == wAcTerminLink)
|| (wFirstTmmNearLink == wAcStratLink)
|| (wFirstTmmNearLink == wAcTerminLink))
{
retAcId = wSndStepAc;
}
else
{
retAcId = 0U;
}
}
return retAcId;
}
@@ -43,6 +43,7 @@ typedef struct S_PhysicalSectionConfigData
UINT8 managedByZcFlag; /*是否由ZC管辖(配置字段)*/
UINT8 PhySecType; /*物理区段类型(无岔区段/有岔区段) (配置字段)*/
UINT8 LjkSecFlag; /*列检库区段标志(非列检库区段/列检库区段) (配置字段)*/
UINT8 QcxSecFlag; /*牵出线区段标志(非牵出线区段/牵出线区段) (配置字段)*/
UINT16 GdRelayId; /*轨道继电器ID (配置字段)*/
UINT16 wGdRelayId2; /*轨道继电器ID2 (配置字段) 迪斯尼*/
UINT16 RepGdRelayId; /*复视轨道继电器ID*/
@@ -79,7 +80,7 @@ typedef struct S_PhysicalSectionConfigData
UINT16 AdjacentPhySecBuf[PHYSEC_ADJACENT_SEC_SUM_MAX]; /*物理区段直接相邻物理区段数组*/
NeighborSecConditionAcStruct AdjacentSecAcData[PHYSEC_ADJACENT_SEC_SUM_MAX];/*直接相邻区段的检查计轴*/
UINT16 IndirectNearPhySecBuf[PHYSEC_INDIRECTNEAR_SEC_SUM_MAX]; /*单位距离内内间接邻近物理区段数组*/
UINT16 IndirectNearSecPreSec[PHYSEC_INDIRECTNEAR_SEC_SUM_MAX];/*间接相邻区段的跳转路径*/
NeighborSecConditionAcStruct TransitAcData[PHYSEC_INDIRECTNEAR_SEC_SUM_MAX];/*间接相邻区段的跳转计轴*/
UINT8 chArbPossibleTag; /*是否能判Arb*/
UINT16 wIndexInAxle; /*在计轴系统中的索引*/
} PhysicalSectionConfigDataStruct;
@@ -174,6 +175,15 @@ UINT8 GetPhySecType(const UINT16 phySectionId);
*/
UINT8 GetPhySecLjkFlag(const UINT16 phySectionId);
/*
* ID物理区段牵出线区段标志
* const UINT16 phySectionId, ID
* 0:
* >0: 线0x55线 0xAA线
* Create fan 20260415
*/
UINT8 GetPhySecQcxFlag(const UINT16 phySectionId);
/*
* ID物理区段轨道继电器ID
* const UINT16 phySectionId, ID
@@ -467,11 +477,11 @@ UINT8 GetAdjacentPhySecNum(const UINT16 wPhySecId);
UINT16* GetAdjacentPhySecBuf(const UINT16 wPhySecId);
/*
*
* const UINT16 wPhySecId UINT16 basePhysecwPrePhySecId
* const UINT16 wPhySecId UINT16 basePhysec基准wPrePhySecId ,wSndPreSec一步间接跳转
* CI_SUCCESS CI_ERROR
*Create fan 20240822
*/
UINT8 CheckNearPhySec(const UINT16 wPhySecId, const UINT16 basePhysec, const UINT16 wPrePhySecId);
UINT8 CheckNearPhySec(const UINT16 wPhySecId, const UINT16 basePhysec, const UINT16 wPrePhySecId, const UINT16 wSndPreSec);
/*
*
@@ -530,13 +540,22 @@ UINT16 GetPhyIdByIndexInAxle(const UINT8 chAxleId, const UINT16 wIndexInAxle);
void AddNeighborPhyConditionAc(const UINT16 wPhySecId, UINT8 chIndex, UINT16 AcId);
/*
*
* const UINT16 wPhySecId UINT16 wNearSecId
*
*Create fan 20260303
* ID物理区段的ARB防护范围区段的跳转计轴序列
* const UINT16 phySectionId, ID UINT16 wNearSecID相邻区段
* 0:
* >0: ID数组指针
*Create fan 202604010
*/
UINT16 GetNearSecPreSecId(const UINT16 wPhySecId, UINT16 wNearSecId);
UINT16* GetPhySecNearSecTransitAcBuf(const UINT16 phySectionId, const UINT16 wNearSecID);
/*
* ID物理区段的ARB防护范围区段的跳转计轴数量
* const UINT16 phySectionId, ID UINT16 wNearSecID相邻区段
* 0:
* >0: ID数组指针
*Create fan 202604010
*/
UINT8 GetPhySecNearSecTransitAcNum(const UINT16 phySectionId, const UINT16 wNearSecID);
/*
*
* const UINT16 wPhySecIdconst UINT16 wPreSecId
@@ -553,6 +572,31 @@ UINT8 CheckPhySecIfAdjacent(const UINT16 wPhySecId, const UINT16 wPreSecId);
*/
UINT8 GetAdjacentPhySecAcCheck(const UINT16 wPhySecId, UINT16 wNearSec);
/*
*
* constUINT16 wBasePhySec基准区段 wTransitAcId
* CI_ERROR不可达 CI_SUCCESS可达
* Create fan 20260410
*/
UINT8 GetTransitPhySecAcCheck(const UINT16 wBasePhySec , UINT16 wTransitAcId);
/*
* ID
* const UINT16 wPhySecId UINT16 basePhysec基准区段wAdjPhySecId
* CI_SUCCESS CI_ERROR
*Create fan 20260410
*/
UINT16 GetTransitAcFromPreSec(const UINT16 wPhySecId, const UINT16 basePhysec, const UINT16 wPrePhySecId);
/*
* ID
* const UINT16 wPhySecId UINT16 basePhysec基准wAdjPhySecId ,wSndPreSec一步间接跳转
* 0 >0 ID
*Create fan 20260410
*/
UINT16 GetSndTransitAcFromPreSce(const UINT16 wPhySecId, const UINT16 basePhysec, const UINT16 wAdjPhySecId, const UINT16 wSndPreSec);
#ifdef __cplusplus
}
#endif
@@ -41,6 +41,8 @@
#define LOGSEC_RELATE_ESB_MAX ((UINT8)0X04U) /*定义逻辑区段关联紧急按钮数量最大值*//* add 20240410 fan*/
#define QINXIAN_SWITCH_MAX_NUM ((UINT8)0X16U) /*定义侵限区段关联条件道岔的最大数量 add 20240607 LC */
#define LOGSEC_RELATE_OVERLAP_SUM_MAX ((UINT16)200) /*定义逻辑区段关联保护区段数量最大值 add 20260330 mpt*/
#define AXIS_RELATE_PRO_SW_SUM_MAX ((UINT16)100) /*定义计轴区段关联防护道岔数量最大值*/
#define PHYSEC_ADJACENT_SEC_SUM_MAX ((UINT8)15) /*定义物理区段直接相邻物理区段最大个数*//* add 20240821 fan*/
#define PHYSEC_INDIRECTNEAR_SEC_SUM_MAX ((UINT8)100) /*定义距离一定范围内间接邻近物理区段最大个数*//* add 20240821 fan*/
@@ -52,6 +54,9 @@
/*列检库区段标识*/
#define PHYSICAL_SECTION_LJK_NO ((UINT8)0x55) /*非列检库区段*/
#define PHYSICAL_SECTION_LJK_YES ((UINT8)0xaa) /*列检库区段*/
/*牵出线区段标识*/
#define PHYSICAL_SECTION_QCX_NO ((UINT8)0x55) /*非牵出线区段*/
#define PHYSICAL_SECTION_QCX_YES ((UINT8)0xaa) /*牵出线区段*/
/*物理区段征用状态*/
#define PHYSICAL_SECTION_USING_NO ((UINT8)0x11) /*未征用*/
+311 -245
View File
@@ -19,7 +19,6 @@ SwitchDataStruct SwitchDataStru[SWITCH_SUM_MAX]; /*
/*
* ID道岔数据
*
@@ -115,19 +114,19 @@ UINT8 GetSwitchLockStatus(const UINT16 switchId)
/*
* ID道岔锁闭状态
*
*
* const UINT8 lockType,
* const UINT16 pLockId,id
* const UINT16 switchId, ID
* const UINT8 lockCommand,
* void
* void
*/
void SetSwitchLockStatus(const UINT8 pLockType,const UINT16 pLockId,const UINT16 switchId, const UINT8 lockCommand)
void SetSwitchLockStatus(const UINT8 pLockType, const UINT16 pLockId, const UINT16 switchId, const UINT8 lockCommand)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = CI_ERROR;
UINT8 switchLockStatus = 0u;
UINT16 ii =0u;/*游标*/
UINT16 ii = 0u;/*游标*/
UINT16 jj = 0u;/*游标*/
UINT16 kk = 0u;/*游标*/
@@ -146,244 +145,244 @@ void SetSwitchLockStatus(const UINT8 pLockType,const UINT16 pLockId,const UINT16
switch (pLockType)
{
case SWITCH_PLOCKTYPE_DANSUO:/*锁闭类型为单锁*/
{
if (SWITCH_LOCK_DANSUO_SET == lockCommand )
{/*设置单锁*/
if ((SWITCH_LOCK_STATUS_PROTECT == switchLockStatus) || (SWITCH_LOCK_STATUS_DAP == switchLockStatus))
{
SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_DAP; /*设置道岔单锁且防护锁闭状态*/
}
else
{
SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_DANSUO; /*设置道岔单锁状态*/
}
}
else if (SWITCH_LOCK_DANSUO_CANCEL == lockCommand)
{/*取消单锁*/
if (SWITCH_LOCK_STATUS_PROTECT == switchLockStatus)
{
SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_PROTECT; /*保持道岔防护锁闭状态*/
}
else if (SWITCH_LOCK_STATUS_DAP == switchLockStatus)
{
SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_PROTECT; /*设置道岔防护锁闭状态*/
}
else
{
SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_NO; /*设置道岔未锁闭状态*/
}
{
if (SWITCH_LOCK_DANSUO_SET == lockCommand)
{/*设置单锁*/
if ((SWITCH_LOCK_STATUS_PROTECT == switchLockStatus) || (SWITCH_LOCK_STATUS_DAP == switchLockStatus))
{
SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_DAP; /*设置道岔单锁且防护锁闭状态*/
}
else
{
/*非法值不处理*/
SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_DANSUO; /*设置道岔单锁状态*/
}
retVal = CI_SUCCESS;
break;
}
else if (SWITCH_LOCK_DANSUO_CANCEL == lockCommand)
{/*取消单锁*/
if (SWITCH_LOCK_STATUS_PROTECT == switchLockStatus)
{
SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_PROTECT; /*保持道岔防护锁闭状态*/
}
else if (SWITCH_LOCK_STATUS_DAP == switchLockStatus)
{
SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_PROTECT; /*设置道岔防护锁闭状态*/
}
else
{
SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_NO; /*设置道岔未锁闭状态*/
}
}
else
{
/*非法值不处理*/
}
retVal = CI_SUCCESS;
break;
}
case SWITCH_PLOCKTYPE_ROUTE:/*锁闭类型为被进路防护锁闭*/
{
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].PLockedRouteIdArr[ii])
{
emptyIndex = (INT16)ii;/*空位值为0,表示为空位,记住索引*/
}
}
if (pLockId == SwitchDataStru[bufIndex].PLockedRouteIdArr[ii])
{/*找到被锁闭的id*/
findFlag = 1u;
}
}
if (0u == findFlag)
{/*没找到被锁闭id*/
if (emptyIndex >= 0)
{/*且空位存在*/
SwitchDataStru[bufIndex].PLockedRouteIdArr[emptyIndex] = pLockId;/*设置被锁闭id*/
SwitchDataStru[bufIndex].PLockedRouteNum++; /*被锁闭id数量增加1个*/
}
else
{/*超过软件支持的最大防护锁闭设备数目,输出打印信息*/
debug_infor_printf((const)"Set switch id %d PLOCK by routeId %d fail,no empty space\n",bufIndex,pLockId);
}
}
}
else if (SWITCH_LOCK_PROTECT_CANCEL == lockCommand)
{/*取消防护锁闭*/
targetIndex = -1;/*目标索引*/
/*如果没找到,返回*/
/*找到,设为0,且把数量-1*/
for (ii=0;ii<SWITCH_MAX_PROTECT_LOCKED_NUM;ii++)
{
if (SwitchDataStru[bufIndex].PLockedRouteIdArr[ii] == pLockId)
{
targetIndex = (INT16)ii;
SwitchDataStru[bufIndex].PLockedRouteIdArr[ii] = 0U;/*设为0*/
break;
}
}
if (targetIndex >=0)/*找到了*/
{
if (SwitchDataStru[bufIndex].PLockedRouteNum > 0U)
{
SwitchDataStru[bufIndex].PLockedRouteNum--;/*减1处理*/
}
}
}
else
{
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].PLockedRouteIdArr[ii])
{
emptyIndex = (INT16)ii;/*空位值为0,表示为空位,记住索引*/
}
}
if (pLockId == SwitchDataStru[bufIndex].PLockedRouteIdArr[ii])
{/*找到被锁闭的id*/
findFlag = 1u;
}
}
if (0u == findFlag)
{/*没找到被锁闭id*/
if (emptyIndex >= 0)
{/*且空位存在*/
SwitchDataStru[bufIndex].PLockedRouteIdArr[emptyIndex] = pLockId;/*设置被锁闭id*/
SwitchDataStru[bufIndex].PLockedRouteNum++; /*被锁闭id数量增加1个*/
}
else
{/*超过软件支持的最大防护锁闭设备数目,输出打印信息*/
debug_infor_printf((const)"Set switch id %d PLOCK by routeId %d fail,no empty space\n", bufIndex, pLockId);
}
}
retVal = CI_SUCCESS;
break;
}
else if (SWITCH_LOCK_PROTECT_CANCEL == lockCommand)
{/*取消防护锁闭*/
targetIndex = -1;/*目标索引*/
/*如果没找到,返回*/
/*找到,设为0,且把数量-1*/
for (ii = 0; ii < SWITCH_MAX_PROTECT_LOCKED_NUM; ii++)
{
if (SwitchDataStru[bufIndex].PLockedRouteIdArr[ii] == pLockId)
{
targetIndex = (INT16)ii;
SwitchDataStru[bufIndex].PLockedRouteIdArr[ii] = 0U;/*设为0*/
break;
}
}
if (targetIndex >= 0)/*找到了*/
{
if (SwitchDataStru[bufIndex].PLockedRouteNum > 0U)
{
SwitchDataStru[bufIndex].PLockedRouteNum--;/*减1处理*/
}
}
}
else
{
/*非法命令,不处理*/
}
retVal = CI_SUCCESS;
break;
}
case SWITCH_PLOCKTYPE_OVERLAP:/*锁闭类型为被保护区段防护锁闭*/
{
if (SWITCH_LOCK_PROTECT_SET == lockCommand)
{/*设置防护锁闭*/
findFlag = 0u;/*置未找到*/
emptyIndex = -1;/*空位索引*/
/*查找被防护锁闭保护区段id是否存在,存在,退出;不存在,找一个存放位置,更新被锁闭的保护区段数量*/
for (ii=0;ii<SWITCH_MAX_PROTECT_LOCKED_NUM;ii++)
{
if (emptyIndex < 0)/*空位索引小于0,才查找空位索引*/
{
if (0u == SwitchDataStru[bufIndex].PLockedOverlapIdArr[ii])
{
emptyIndex = (INT16)ii;/*空位值为0,表示为空位,记住索引*/
}
}
if (pLockId == SwitchDataStru[bufIndex].PLockedOverlapIdArr[ii])
{/*找到被锁闭的id*/
findFlag = 1u;
}
}
if (0u == findFlag)
{/*没找到被锁闭id*/
if (emptyIndex >= 0)
{/*且空位存在*/
SwitchDataStru[bufIndex].PLockedOverlapIdArr[emptyIndex] = pLockId;/*设置被锁闭id*/
SwitchDataStru[bufIndex].PLockedOverlapNum++; /*被锁闭id数量增加1个*/
}
else
{
debug_infor_printf((const)"Set switch id %d PLOCK by overlapId %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].PLockedOverlapIdArr[ii] == pLockId)
{
targetIndex = (INT16)ii;
SwitchDataStru[bufIndex].PLockedOverlapIdArr[ii] = 0U;/*设为0*/
break;
}
}
if (targetIndex >=0)/*找到了*/
{
if (SwitchDataStru[bufIndex].PLockedOverlapNum > 0U)
{
SwitchDataStru[bufIndex].PLockedOverlapNum--;/*减1处理*/
}
}
}
else
{
if (SWITCH_LOCK_PROTECT_SET == lockCommand)
{/*设置防护锁闭*/
findFlag = 0u;/*置未找到*/
emptyIndex = -1;/*空位索引*/
/*查找被防护锁闭保护区段id是否存在,存在,退出;不存在,找一个存放位置,更新被锁闭的保护区段数量*/
for (ii = 0; ii < SWITCH_MAX_PROTECT_LOCKED_NUM; ii++)
{
/*非法命令,不处理*/
if (emptyIndex < 0)/*空位索引小于0,才查找空位索引*/
{
if (0u == SwitchDataStru[bufIndex].PLockedOverlapIdArr[ii])
{
emptyIndex = (INT16)ii;/*空位值为0,表示为空位,记住索引*/
}
}
if (pLockId == SwitchDataStru[bufIndex].PLockedOverlapIdArr[ii])
{/*找到被锁闭的id*/
findFlag = 1u;
}
}
if (0u == findFlag)
{/*没找到被锁闭id*/
if (emptyIndex >= 0)
{/*且空位存在*/
SwitchDataStru[bufIndex].PLockedOverlapIdArr[emptyIndex] = pLockId;/*设置被锁闭id*/
SwitchDataStru[bufIndex].PLockedOverlapNum++; /*被锁闭id数量增加1个*/
}
else
{
debug_infor_printf((const)"Set switch id %d PLOCK by overlapId %d fail,no empty space\n", bufIndex, pLockId);
}
}
retVal = CI_SUCCESS;
break;
}
else if (SWITCH_LOCK_PROTECT_CANCEL == lockCommand)
{/*取消防护锁闭*/
targetIndex = -1;/*目标索引*/
/*如果没找到,返回*/
/*找到,设为0,且把数量-1*/
for (ii = 0u; ii < SWITCH_MAX_PROTECT_LOCKED_NUM; ii++)
{
if (SwitchDataStru[bufIndex].PLockedOverlapIdArr[ii] == pLockId)
{
targetIndex = (INT16)ii;
SwitchDataStru[bufIndex].PLockedOverlapIdArr[ii] = 0U;/*设为0*/
break;
}
}
if (targetIndex >= 0)/*找到了*/
{
if (SwitchDataStru[bufIndex].PLockedOverlapNum > 0U)
{
SwitchDataStru[bufIndex].PLockedOverlapNum--;/*减1处理*/
}
}
}
else
{
/*非法命令,不处理*/
}
retVal = CI_SUCCESS;
break;
}
case SWITCH_PLOCKTYPE_NONROUTE:/*锁闭类型为被非进路防护锁闭*/
{
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].PLockedNonRouteIdArr[ii])
{
emptyIndex = (INT16)ii;/*空位值为0,表示为空位,记住索引*/
}
}
if (pLockId == SwitchDataStru[bufIndex].PLockedNonRouteIdArr[ii])
{/*找到被锁闭的id*/
findFlag = 1u;
}
}
if (0u == findFlag)
{/*没找到被锁闭id*/
if (emptyIndex >= 0)
{/*且空位存在*/
SwitchDataStru[bufIndex].PLockedNonRouteIdArr[emptyIndex] = pLockId;/*设置被锁闭id*/
SwitchDataStru[bufIndex].PLockedNonRouteNum++; /*被锁闭id数量增加1个*/
}
else
{/*超过软件支持的最大防护锁闭设备数目,输出打印信息*/
debug_infor_printf((const)"Set switch id %d PLOCK by nonRouteId %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].PLockedNonRouteIdArr[ii] == pLockId)
{
targetIndex = (INT16)ii;
SwitchDataStru[bufIndex].PLockedNonRouteIdArr[ii] = 0;/*设为0*/
break;
}
}
if (targetIndex >=0)/*找到了*/
{
if (SwitchDataStru[bufIndex].PLockedNonRouteNum > 0U)
{
SwitchDataStru[bufIndex].PLockedNonRouteNum--;/*减1处理*/
}
}
}
else
{
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].PLockedNonRouteIdArr[ii])
{
emptyIndex = (INT16)ii;/*空位值为0,表示为空位,记住索引*/
}
}
if (pLockId == SwitchDataStru[bufIndex].PLockedNonRouteIdArr[ii])
{/*找到被锁闭的id*/
findFlag = 1u;
}
}
if (0u == findFlag)
{/*没找到被锁闭id*/
if (emptyIndex >= 0)
{/*且空位存在*/
SwitchDataStru[bufIndex].PLockedNonRouteIdArr[emptyIndex] = pLockId;/*设置被锁闭id*/
SwitchDataStru[bufIndex].PLockedNonRouteNum++; /*被锁闭id数量增加1个*/
}
else
{/*超过软件支持的最大防护锁闭设备数目,输出打印信息*/
debug_infor_printf((const)"Set switch id %d PLOCK by nonRouteId %d fail,no empty space\n", bufIndex, pLockId);
}
}
retVal = CI_SUCCESS;
break;
}
else if (SWITCH_LOCK_PROTECT_CANCEL == lockCommand)
{/*取消防护锁闭*/
targetIndex = -1;/*目标索引*/
/*如果没找到,返回*/
/*找到,设为0,且把数量-1*/
for (ii = 0u; ii < SWITCH_MAX_PROTECT_LOCKED_NUM; ii++)
{
if (SwitchDataStru[bufIndex].PLockedNonRouteIdArr[ii] == pLockId)
{
targetIndex = (INT16)ii;
SwitchDataStru[bufIndex].PLockedNonRouteIdArr[ii] = 0;/*设为0*/
break;
}
}
if (targetIndex >= 0)/*找到了*/
{
if (SwitchDataStru[bufIndex].PLockedNonRouteNum > 0U)
{
SwitchDataStru[bufIndex].PLockedNonRouteNum--;/*减1处理*/
}
}
}
else
{
/*非法命令,不处理*/
}
retVal = CI_SUCCESS;
break;
}
case SWITCH_PLOCKTYPE_LOGROUTE:/*锁闭类型为被逻辑进路防护锁闭*/
{
SetSwitchLockStaUseByLogRoute(pLockId, switchId, lockCommand);
@@ -391,29 +390,96 @@ void SetSwitchLockStatus(const UINT8 pLockType,const UINT16 pLockId,const UINT16
break;
}
case SWITCH_PLOCKTYPE_NOROUTE_NOOVERLAP_NONONROUTE:/*解除道岔防护锁闭*/
{/*解除道岔防护锁闭,解除被进路/保护区段/非进路锁闭,清所有ID*/
SwitchDataStru[bufIndex].PLockedRouteNum = 0u;
SwitchDataStru[bufIndex].PLockedOverlapNum = 0u;
SwitchDataStru[bufIndex].PLockedNonRouteNum = 0u;
SwitchDataStru[bufIndex].PLockedLogRouteNum = 0u;
for (ii=0u;ii<SWITCH_MAX_PROTECT_LOCKED_NUM;ii++)
{/*解除道岔防护锁闭,解除被进路/保护区段/非进路锁闭,清所有ID*/
SwitchDataStru[bufIndex].PLockedRouteNum = 0u;
SwitchDataStru[bufIndex].PLockedOverlapNum = 0u;
SwitchDataStru[bufIndex].PLockedNonRouteNum = 0u;
SwitchDataStru[bufIndex].PLockedLogRouteNum = 0u;
for (ii = 0u; ii < SWITCH_MAX_PROTECT_LOCKED_NUM; ii++)
{
SwitchDataStru[bufIndex].PLockedNonRouteIdArr[ii] = 0u;
SwitchDataStru[bufIndex].PLockedOverlapIdArr[ii] = 0u;
SwitchDataStru[bufIndex].PLockedRouteIdArr[ii] = 0u;
SwitchDataStru[bufIndex].PLockedLogRouteIdArr[ii] = 0u;
}
retVal = CI_SUCCESS;
}
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++)
{
SwitchDataStru[bufIndex].PLockedNonRouteIdArr[ii] = 0u;
SwitchDataStru[bufIndex].PLockedOverlapIdArr[ii] = 0u;
SwitchDataStru[bufIndex].PLockedRouteIdArr[ii] = 0u;
SwitchDataStru[bufIndex].PLockedLogRouteIdArr[ii] = 0u;
if (emptyIndex < 0)/*空位索引小于0,才查找空位索引*/
{
if (0u == SwitchDataStru[bufIndex].PLockedAxisSecIdArr[ii])
{
emptyIndex = (INT16)ii;/*空位值为0,表示为空位,记住索引*/
}
}
if (pLockId == SwitchDataStru[bufIndex].PLockedAxisSecIdArr[ii])
{/*找到被锁闭的id*/
findFlag = 1u;
}
}
retVal = CI_SUCCESS;
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);
}
}
}
break;
default:
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_ERROR;
break;
/*非法命令,不处理*/
}
retVal = CI_SUCCESS;
break;
}
default:
{
/*类型非法,置返回标志错误*/
retVal = CI_ERROR;
break;
}
}
if (CI_SUCCESS == retVal)
{
@@ -423,7 +489,7 @@ void SetSwitchLockStatus(const UINT8 pLockType,const UINT16 pLockId,const UINT16
(SWITCH_LOCK_STATUS_DAP == SwitchDataStru[bufIndex].LockStatus))/*道岔状态包含单锁*/
{
if (SwitchDataStru[bufIndex].PLockedNonRouteNum + SwitchDataStru[bufIndex].PLockedOverlapNum +
SwitchDataStru[bufIndex].PLockedRouteNum + SwitchDataStru[bufIndex].PLockedLogRouteNum > 0u)
SwitchDataStru[bufIndex].PLockedRouteNum + SwitchDataStru[bufIndex].PLockedLogRouteNum + SwitchDataStru[bufIndex].PLockedAxisSecNum > 0u)
{/*被防护锁闭的设备数目大于0*/
SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_DAP;
}
@@ -442,7 +508,7 @@ void SetSwitchLockStatus(const UINT8 pLockType,const UINT16 pLockId,const UINT16
else
{/*不包含单锁*/
if (SwitchDataStru[bufIndex].PLockedNonRouteNum + SwitchDataStru[bufIndex].PLockedOverlapNum +
SwitchDataStru[bufIndex].PLockedRouteNum + SwitchDataStru[bufIndex].PLockedLogRouteNum > 0u)
SwitchDataStru[bufIndex].PLockedRouteNum + SwitchDataStru[bufIndex].PLockedLogRouteNum + SwitchDataStru[bufIndex].PLockedAxisSecNum > 0u)
{/*被防护锁闭的设备数目大于0*/
SwitchDataStru[bufIndex].LockStatus = SWITCH_LOCK_STATUS_PROTECT;
}
+5 -1
View File
@@ -82,11 +82,15 @@ typedef struct S_SwitchDataStruct
UINT8 chSwitchJichaState; /*道岔挤岔状态*/
UINT8 cSwitchUsingState; /*道岔征用状态:0x11:未征用,0x22:征用,0x44:申请征用,0x88:申请取消征用*/
UINT32 SwitchCollTolerateCycNum; /*道岔采集四开容忍周期*/
UINT8 PLockedAxisSecNum;/*被防护锁闭的计轴区段id数量,只能在本文件使用*/
UINT16 PLockedAxisSecIdArr[SWITCH_MAX_PROTECT_LOCKED_NUM];/*被防护锁闭的计轴区段id数组,只能在本文件使用*/
} SwitchDataStruct;
/*******************************全局变量声明*******************************/
extern SwitchDataStruct SwitchDataStru[SWITCH_SUM_MAX]; /*定义道岔数据结构体*/
/*
* ID道岔数据
*
+1 -1
View File
@@ -34,7 +34,7 @@
#define SWITCH_LOCK_STATUS_DANSUO ((UINT8)0x5a) /*데傑*/
#define SWITCH_LOCK_STATUS_PROTECT ((UINT8)0xa5) /*렝빱傑균*/
#define SWITCH_LOCK_STATUS_DAP ((UINT8)0xaa) /*데傑할렝빱傑균*/
#define SWITCH_PLOCKTYPE_AXISSEC ((UINT8)0x7) /*被计轴区段防护锁闭*/
/*돛뀄傑균쭉서榴檄(쏭痰黨럽웩)*/
#define SWITCH_LOCK_STATUS_DANSUO_NO ((UINT8)0x01) /*灌데傑*/
#define SWITCH_LOCK_STATUS_PROTECT_NO ((UINT8)0x10) /*灌렝빱傑균*/
@@ -61,7 +61,7 @@
/*版本号*/
#define VER_MAIN_SUBCI_CI_CID ((UINT8)22) /*子系统主版本号*/
#define VER_SUB_SUBCI_CI_CID ((UINT8)0) /*子系统子版本号*/
#define VER_BRUNCH_CI_CID ((UINT8)5) /*分支版本号..........主线填0....分支填1 调试填2 */
#define VER_BRUNCH_CI_CID ((UINT8)6) /*分支版本号..........主线填0....分支填1 调试填2 */
#define VER_RETURN_SUBCI_CI_CID ((UINT8)1) /*子系统回归版本号*/
#ifdef SCADE_MODE
@@ -76,7 +76,7 @@
#define VER_SOFT_PRODUCT ((UINT8)40) /*产品编号*/
#define VER_SOFT_MODUAL_APP ((UINT8)1) /*模块编号*/
#define VER_SOFT_MIANVERSION ((UINT8)22) /*主版本号*/
#define VER_SOFT_SUBVERSION ((UINT8)18) /*子版本号*/
#define VER_SOFT_SUBVERSION ((UINT8)22) /*子版本号*/
#endif
@@ -84,7 +84,7 @@
#define VER_1_PUBLIC_FS_1 ((UINT8)30)
#define VER_1_PUBLIC_FS_2 ((UINT8)21)
#define VER_1_PUBLIC_FS_3 ((UINT8)0)
#define VER_1_PUBLIC_FS_4 ((UINT8)0)
#define VER_1_PUBLIC_FS_4 ((UINT8)2)
#define VER_2_PUBLIC_FS_1 ((UINT8)0)
#define VER_2_PUBLIC_FS_2 ((UINT8)0)
+1 -1
View File
@@ -658,7 +658,7 @@ static void SelfCheckInit(void)
{
#ifdef QNX
/*- 文件自检初始化 */
PFM_FileInit();
//PFM_FileInit();
/*- 内存自检初始化*/
PFM_MemCheck_Init();
/*- CPU自检初始化*/
@@ -3704,7 +3704,17 @@ UINT8 PHYSICAL_SGMT_STRU_init(UINT8 * pDataAdd, DSU_PHYSICAL_SGMT_STRU * pPhysic
/*物理区段所属计轴子系统ID*/
pPhysicalSgmtStru->BelongAxleSysID = ShortFromChar(pData);
pData += 2;
rtnValue = 1;
pPhysicalSgmtStru->QcxFlag = *pData;
if ((0x55U != pPhysicalSgmtStru->QcxFlag) && (0xAAU != pPhysicalSgmtStru->QcxFlag))
{
rtnValue = 0U;
}
else
{
pData++;
rtnValue = 1U;
}
}
return rtnValue;
}
@@ -860,6 +860,7 @@ typedef struct DSU_PhysicalSgmt/*
CHAR szName[32]; /*名称*/
UINT8 Type; /*物理区段类型*/
UINT8 LjkFlag; /*列检库标志*/
UINT8 QcxFlag; /*牵出线标志*/
UINT16 BelongAxleSysID; /*物理区段所属计轴子系统ID*/
}DSU_PHYSICAL_SGMT_STRU;
Binary file not shown.
BIN
View File
Binary file not shown.