24 Commits

Author SHA1 Message Date
lh e1b5126cd9 Merge branch 'dev/9.10' 2026-07-30 11:20:12 +08:00
lh 66937f1160 变更会后提交,删除重启命令源id的2取校验 2026-07-20 17:59:31 +08:00
lh b7b0dac7d8 修改协议状态信息和指令分开发送逻辑 2026-07-20 16:34:21 +08:00
lh 3a9ff37074 AIM发送重启回复与状态信息分开发送,二次请求源ID不一致返回失败原因6(重启命令错误) 2026-07-17 14:34:10 +08:00
lh 7e69b7c395 AID重启功能不受影响,待与AIM调试 2026-07-15 16:31:39 +08:00
lh 34a4ef5569 同时建链两条成功,待调试 2026-07-14 17:47:43 +08:00
lh 2fb0440c91 9.9基线版本 2026-07-10 10:45:15 +08:00
lh 70bf3e0d36 增加project文件,用于qde编译 2026-07-02 10:25:00 +08:00
lh d3f54dc0b4 配置RAR和7z文件使用Git LFS 2026-06-29 10:49:27 +08:00
lh a8d15629ac 9.9首版首轮发签代码,应用代码与数据更新 2026-06-17 15:56:22 +08:00
lh 90001acc01 9.9首版首轮发签代码 Merge branch 'test/9.9外网接收时间测试' into dev/9.9 2026-06-16 11:26:13 +08:00
lh f16a7c94b2 修改故障宕机不可自动重启 2026-06-11 15:41:22 +08:00
lh a803ab421f 30ms使用宏定义 2026-06-10 15:31:27 +08:00
lh e14c880a88 修改心跳发送时机,单独线程,等待周期结束前30ms时发送心跳 2026-06-10 15:27:07 +08:00
lh 2d49b7206a 测试代码提交,存在问题,双系发心跳可能不同步,可能出现如备系本周期先发了心跳,这时通控开始回数据,主系本周期可能会接收到数据,然后更新stoptick,但starttick在发心跳才更新,导致耗时结果偏差,单起一系测试最好 2026-06-09 15:34:28 +08:00
lh b362cb2f91 宕机故障码修改 2026-06-01 16:25:15 +08:00
lh fda6f9f84b 应用代码及数据更新 2026-06-01 10:44:32 +08:00
lh 1cfb4c2d59 维护一体机版本号更新 2026-05-29 16:56:20 +08:00
lh 29d8047618 代码走查后修改,主系在发送2乘校验后再次进行校验 2026-05-29 16:30:10 +08:00
lh 5f90274b7a 规范相关修改,数组使用下标取地址方式,而不是直接加长度;输出校验仅在备系失败是打印通道数据 2026-05-28 15:04:42 +08:00
lh 099fa5a712 修改暗文码,2x输出校验帧拼接双CPU的CRC的2取操作修改从函数PFM_OutputProc修改到s_2x2OutputCheckFrame_Pack 2026-05-27 17:48:46 +08:00
lh 520c991568 修改版本号,62->63 2026-05-26 17:22:22 +08:00
lh 957ace26d6 防护主系失效判断,第一次提交,待调试 2026-05-25 15:42:34 +08:00
lh e0a4ce32c2 [9.8] 9.8首版二回代码,基线版本 2026-05-25 15:25:26 +08:00
170 changed files with 25780 additions and 7406 deletions
+2
View File
@@ -1 +1,3 @@
*.zip filter=lfs diff=lfs merge=lfs -text
*.rar filter=lfs diff=lfs merge=lfs -text
*.7z filter=lfs diff=lfs merge=lfs -text
+814
View File
@@ -0,0 +1,814 @@
<?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
@@ -0,0 +1,26 @@
<?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>
+58 -57
View File
@@ -20,77 +20,23 @@ LD = $(CC)
#INCLUDES += -I/path/to/my/lib/include
#INCLUDES += -I../mylib/public
INCLUDES += -I ./src/APP \
-I ./src/APP/ciapp/2oo2 \
-I ./src/APP/ciapp/AllAutoReturn \
-I ./src/APP/ciapp/AutoReturn \
-I ./src/APP/ciapp/AutoRoute \
-I ./src/APP/ciapp/AxisAssert \
-I ./src/APP/ciapp/AxisSort \
-I ./src/APP/ciapp/CutoffPoint \
-I ./src/APP/ciapp/DataManage \
-I ./src/APP/ciapp/DebugPrint \
-I ./src/APP/ciapp/Deployment \
-I ./src/APP/ciapp/DiffLineDev \
-I ./src/APP/ciapp/EnvelopeManage \
-I ./src/APP/ciapp/ERROR \
-I ./src/APP/ciapp/ESB \
-I ./src/APP/ciapp/FloodGate \
-I ./src/APP/ciapp/Garagedoor \
-I ./src/APP/ciapp/HLHTMsgHead \
-I ./src/APP/ciapp/Indicator \
-I ./src/APP/ciapp/Initial \
-I ./src/APP/ciapp/InvadeSection \
-I ./src/APP/ciapp/IO \
-I ./src/APP/ciapp/LogicManage \
-I ./src/APP/ciapp/LogicProcess \
-I ./src/APP/ciapp/LogRecord \
-I ./src/APP/ciapp/Main \
-I ./src/APP/ciapp/Mask \
-I ./src/APP/ciapp/NonAutoReturn \
-I ./src/APP/ciapp/NonRoute \
-I ./src/APP/ciapp/Overlap \
-I ./src/APP/ciapp/ParsePack \
-I ./src/APP/ciapp/PSC \
-I ./src/APP/ciapp/PSD \
-I ./src/APP/ciapp/QueryFiles \
-I ./src/APP/ciapp/Relay \
-I ./src/APP/ciapp/RemoteRM \
-I ./src/APP/ciapp/ReverseCut \
-I ./src/APP/ciapp/ReverseRoute \
-I ./src/APP/ciapp/Route \
-I ./src/APP/ciapp/Section \
-I ./src/APP/ciapp/SectionStateProcess \
-I ./src/APP/ciapp/SGBJ \
-I ./src/APP/ciapp/Signal \
-I ./src/APP/ciapp/SPKS \
-I ./src/APP/ciapp/Switch \
-I ./src/APP/ciapp/System \
-I ./src/APP/ciapp/Train \
-I ./src/APP/ciapp/Transmit \
-I ./src/APP/ciapp/VirtualDevice \
-I ./src/APP/ciapp/WashMachine \
-I ./src/APP/ciapp/WLScreen \
-I ./src/APP/ciapp/WLBrake \
-I ./src/APP/PU13_integration_config \
-I ./src/commoncode/common \
INCLUDES += -I ./src/commoncode/common \
-I ./src/commoncode/commoncode_config_vxworks \
-I ./src/dqu_common/dqu_idmap_common \
-I ./src/dqu_common/dqu_emap_common \
-I ./src/dqu_common/dqu_dfs_common \
-I ./src/dqu_common/dqu_cbtc_common \
-I .\src\protocol\fsfb\common_dqu_fsfb \
-I .\src\protocol\fsfb\common_fsfb \
-I .\src\protocol\protocol_cbtc\common_protocol_config \
-I .\src\protocol\protocol_cbtc\common_dqu_protocol \
-I .\src\protocol\protocol_cbtc\common_protocol \
-I .\src\protocol\protocol_cbtc\common_protocol_sfp_rsspi-config \
-I .\src\protocol\redun_record_cbtc\common_dqu_rp \
-I .\src\protocol\redun_record_cbtc\common_redun \
-I .\src\protocol\redun_record_cbtc\common_redun_record_config \
-I .\src\protocol\rsr_record_cbtc\common_dqu_rsr \
-I .\src\protocol\rsr_record_cbtc\common_rsr \
-I .\src\protocol\rsr_record_cbtc\common_rsr\rssp \
-I .\src\protocol\rsr_record_cbtc\common_rsr\sig \
-I .\src\protocol\rsr_record_cbtc\common_rsr \
-I .\src\protocol\rsr_record_cbtc\common_rsr_record_config \
-I .\src\protocol\rssp_record_cbtc1\common_dqu_rssp \
-I .\src\protocol\rssp_record_cbtc1\common_rssp \
@@ -101,6 +47,8 @@ INCLUDES += -I ./src/APP \
-I .\src\protocol\sfp_record_cbtc1\common_dqu_sfp \
-I .\src\protocol\sfp_record_cbtc1\common_sfp \
-I .\src\protocol\sfp_record_cbtc1\common_sfp_nr_config \
-I .\src\protocol\fsfb\common_dqu_fsfb \
-I .\src\protocol\fsfb\common_fsfb \
-I ./src/DRV \
-I ./src/MSCP \
-I ./src/MSCP/CM \
@@ -109,6 +57,59 @@ INCLUDES += -I ./src/APP \
-I ./src/MSCP/SFM \
-I ./src/MSCP/PFM \
-I ./src/MSCP_CFG \
-I ./src/APP \
-I ./src/APP/ciapp/2oo2 \
-I ./src/APP/ciapp/AllAutoReturn \
-I ./src/APP/ciapp/AutoReturn \
-I ./src/APP/ciapp/AutoRoute \
-I ./src/APP/ciapp/DataManage \
-I ./src/APP/ciapp/DebugPrint \
-I ./src/APP/ciapp/DiffLineDev \
-I ./src/APP/ciapp/ERROR \
-I ./src/APP/ciapp/ESB \
-I ./src/APP/ciapp/FloodGate \
-I ./src/APP/ciapp/Garagedoor \
-I ./src/APP/ciapp/HLHTMsgHead \
-I ./src/APP/ciapp/Indicator \
-I ./src/APP/ciapp/Initial \
-I ./src/APP/ciapp/InvadeSection \
-I ./src/APP/ciapp/IO \
-I ./src/APP/ciapp/LightTestButtonManage \
-I ./src/APP/ciapp/LogicManage \
-I ./src/APP/ciapp/LogicProcess \
-I ./src/APP/ciapp/LogRecord \
-I ./src/APP/ciapp/Main \
-I ./src/APP/ciapp/Mask \
-I ./src/APP/ciapp/NonRoute \
-I ./src/APP/ciapp/Overlap \
-I ./src/APP/ciapp/ParsePack \
-I ./src/APP/ciapp/PSC \
-I ./src/APP/ciapp/PSD \
-I ./src/APP/ciapp/QueryFiles \
-I ./src/APP/ciapp/Relay \
-I ./src/APP/ciapp/ReverseRoute \
-I ./src/APP/ciapp/Route \
-I ./src/APP/ciapp/Section \
-I ./src/APP/ciapp/Signal \
-I ./src/APP/ciapp/SPKS \
-I ./src/APP/ciapp/Switch \
-I ./src/APP/ciapp/System \
-I ./src/APP/ciapp/Transmit \
-I ./src/APP/ciapp/VirtualDevice \
-I ./src/APP/ciapp/WashMachine \
-I ./src/APP/PU13_integration_config \
-I ./src/APP/ciapp/AxisSort \
-I ./src/APP/ciapp/Train \
-I ./src/APP/ciapp/EnvelopeManage \
-I ./src/APP/ciapp/CutoffPoint \
-I ./src/APP/ciapp/SectionStateProcess \
-I ./src/APP/ciapp/AxisAssert \
-I ./src/APP/ciapp/ReverseCut \
-I ./src/APP/ciapp/WLScreen \
-I ./src/APP/ciapp/WLBrake \
-I ./src/APP/ciapp/RemoteRM \
-I ./src/APP/ciapp/NonAutoReturn \
-include stdarg.h
#LIBS += -L/path/to/my/lib/$(PLATFORM)/usr/lib -lmylib
#LIBS += -L../mylib/$(OUTPUT_DIR) -lmylib
+17 -29
View File
@@ -29,7 +29,7 @@ extern UINT8 LocalCiId; /*系
const CM_UINT8 g_SfpInnetParam[] =
{
0,5,/*不同设备通信关系表记录个数*/
0,7,/*不同设备通信关系表记录个数*/
/*记录的格式如下:*/
/* 发起方 发起方发送数据 发起方报文 发起方报文 发起方接收Ack 跟随方 跟随方发送数据 跟随方运行 跟随方报文 此通信关系中成功发送 */
/* 设备类型 通信类型 发送周期长度 最大延时 报文最大延时差 设备类型 通信类型 周期长度 最大延时 一包数据所需最小周期数 */
@@ -37,7 +37,9 @@ const CM_UINT8 g_SfpInnetParam[] =
/*AOM->TIAS*/ 0x15, 0x55, 0x00,0xC8, 0x00,0xC8, 0x00,0xC8, 0x03, 0x55, 0x00,0xC8, 0x00,0xC8, 0x02,
/*AOM->ATP*/ 0x14, 0x55, 0x00,0xC8, 0x00,0xC8, 0x00,0xC8, 0x15, 0x55, 0x00,0xC8, 0x00,0xC8, 0x02,
/*RC主机->维护机*/ 0xD9, 0x55, 0x01,0x2c, 0x01,0x2C, 0x01,0x2C, 0xf8, 0x55, 0x00,0xc8, 0x00,0xc8, 0x02,
/*RC主机->维护机*/ 0xD9, 0x55, 0x01,0x2c, 0x01,0x2C, 0x01,0x2C, 0x30, 0x55, 0x01,0x2c, 0x01,0x2C, 0x02,
/*CI主机->维护机*/ 0xDE, 0x55, 0x01,0x2c, 0x01,0x2C, 0x01,0x2C, 0xf8, 0x55, 0x00,0xc8, 0x00,0xc8, 0x02,
/*CI主机->维护机*/ 0xDE, 0x55, 0x01,0x2c, 0x01,0x2C, 0x01,0x2C, 0x30, 0x55, 0x01,0x2c, 0x01,0x2C, 0x02,
0,2,/*相同设备通信关系表记录个数*/
/*记录的格式如下:*/
/* 发起方 发起方 发起方发送数据 发起方报文 发起方报文 发起方接收Ack 跟随方 跟随方 跟随方发送数据 跟随方运行 跟随方报文 此通信关系中成功发送 */
@@ -244,7 +246,7 @@ void APP_API_Data_Init()
cDevType = (UINT8)((locTypeId >> 8U) & 0x00FFU); /*RC/CI类型*/
cRetVal = CiPatternInit((const)DataPath); /*初始化当前联锁类型配置数据*/
cRetVal = RciCommonConfigDataInit((const)DataPath); /*初始化当前联锁类型配置数据*/
if ((CI_SUCCESS == cRetVal) && (CI_SUCCESS == funcRetVal)) /*初始化当前联锁类型配置数据*/
{
cSystemWorkType = GetSystemWorkType();
@@ -301,7 +303,7 @@ void APP_API_Data_Init()
.M_OutnetRaw_Enable = 0xAA, /**< 外网透传通信功能开关 */
.M_CpuUsageGet_Enable = 0x55,/**< 获取cpu使用率功能开关 */
.M_RemoteUpdate_Enable = 0x55,/**< 远程部署内网安全通信功能开关 */
.ID_Maintenance = DEVICE_TYPE_AIM,
.ID_Maintenance = {2, DEVICE_TYPE_AIM, 0x3001U},
.Start_Path = "/emmc1", /**< 程序启动路径 */
.reboot_replycount = 10, /**< 重启确认报文回复次数 */
.M_AutoReboot_Count = 3, /**< 自动重启次数 */
@@ -369,12 +371,17 @@ void APP_API_Data_Init()
.OutNetBlue.OutnetRaw_Port = 54002, /**< 外网透传通信端口 */
.OutNetBlue.InnetRaw_Port = 53003, /**< 内网透传通信端口 */
.INNET_COM_NUM = 1, /**< 内网通信设备数量 */
.INNET_COM_NUM = 2, /**< 内网通信设备数量 */
.INNET_COM_CFG[0].InnetID = DEVICE_TYPE_AIM, /**< 内网通信ID */
.INNET_COM_CFG[0].Port_Raw_G = 55004, /**< 绿网透传端口 */
.INNET_COM_CFG[0].Port_Safe_G = 55003, /**< 绿网安全端口 */
.INNET_COM_CFG[0].Port_Raw_P = 55004, /**< 紫网透传端口 */
.INNET_COM_CFG[0].Port_Safe_P = 55003, /**< 紫网安全端口 */
.INNET_COM_CFG[1].InnetID = 0X3001U, /**< 内网通信ID */
.INNET_COM_CFG[1].Port_Safe_G = 55005, /**< 绿网安全端口 */
.INNET_COM_CFG[1].Port_Raw_G = 0XFFFF,
.INNET_COM_CFG[1].Port_Safe_P = 55005, /**< 紫网安全端口 */
.INNET_COM_CFG[1].Port_Raw_P = 0XFFFF,
};
@@ -442,6 +449,8 @@ void APP_API_Data_Init()
(void)CommonMemCpy((void*)(AppCfgInterface.Logger_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.18.100"), (UINT32)sizeof("192.168.18.100"));
AppCfgInterface.INNET_COM_CFG[0].IP_G = (CM_UINT32)inet_addr("192.168.146.100");
AppCfgInterface.INNET_COM_CFG[0].IP_P = (CM_UINT32)inet_addr("192.168.18.100");
AppCfgInterface.INNET_COM_CFG[1].IP_G = (CM_UINT32)inet_addr("192.168.146.100");
AppCfgInterface.INNET_COM_CFG[1].IP_P = (CM_UINT32)inet_addr("192.168.18.100");
}
else
@@ -506,6 +515,8 @@ void APP_API_Data_Init()
(void)CommonMemCpy((void*)(AppCfgInterface.Logger_P_IP), (UINT32)sizeof(CM_CHAR) * 32, (const void*)("192.168.20.100"), (UINT32)sizeof("192.168.20.100"));
AppCfgInterface.INNET_COM_CFG[0].IP_G = (CM_UINT32)inet_addr("192.168.148.100");
AppCfgInterface.INNET_COM_CFG[0].IP_P = (CM_UINT32)inet_addr("192.168.20.100");
AppCfgInterface.INNET_COM_CFG[1].IP_G = (CM_UINT32)inet_addr("192.168.148.100");
AppCfgInterface.INNET_COM_CFG[1].IP_P = (CM_UINT32)inet_addr("192.168.20.100");
}
if(SYSTEM_WORK_MODE_ONLY == cSystemWorkType)
@@ -717,46 +728,23 @@ ENUM_CM_RECCUSEB Is_Send_ExtendBoard(IN const CM_UINT16 dstDevTypeId)
{
ENUM_CM_RECCUSEB retVal = ENUM_CM_CC; /*返回值*/
CM_UINT8 devType = 0U; /*设备类型*/
CM_UINT8 devId = 0U; /*设备ID*/
CM_UINT16 wAtsGtWayDevTypeId = 0U;
UINT8 chLocalCiType = 0U; /*本联锁属性*/
UINT8 chDstCiType = 0U; /*本联锁属性*/
UINT8 chCldScxCommMode = 0U;
UINT8 chWorkType = 0U; /*双系工作模式*/
UINT8 cControlState = 0U;/*主备用模式*/
UINT8 cRcWorkMode = 0u;/*RC工作模式*/
UINT8 chResult = CI_ERROR; /*联锁属性检查结果*/
UINT8 serialGroup = 0U; /*串口通信组索引*/
wAtsGtWayDevTypeId = GetTiocTrnsmtGtwyDevTypeId();
/**使用通控板与ATS网关通信*/
if (dstDevTypeId != wAtsGtWayDevTypeId)
{
devType = (CM_UINT8)((dstDevTypeId >> 8) & 0xFF);
devId = (CM_UINT8)(dstDevTypeId & 0xFF);
chLocalCiType = GetLocalCiType();
chDstCiType = GetCiType(devId);
chCldScxCommMode = GetCiFunctionSwitchConfig(SCX_CLD_INTERFACE_TYPE);
chWorkType = GetSystemWorkType();
cControlState = GetLocalCiBackUpPattern();
cRcWorkMode = GetLocalRcWorkMode();
if ((SCX_CLD_SERIAL_PORT_COMM == chCldScxCommMode) && (CI_SYSTEM_TYPE_RCI == devType))
{
if (((CI_TYPE_CLD == chLocalCiType) && (CI_TYPE_SCX == chDstCiType)) || ((CI_TYPE_SCX == chLocalCiType) && (CI_TYPE_CLD == chDstCiType)))
{
/*串口通信要求双方一个为车辆段一个为试车线*/
chResult = CI_SUCCESS;
}
else
{
; /*CI类型错误,返回失败*/
}
}
else
{
; /*不为串口通信,此时不对本地CI类型及对方CI类型进行判断*/
}
chResult = IsSerialDevice(dstDevTypeId, &serialGroup);
if ((CI_SYSTEM_TYPE_XIANDI == devType) || (CI_SYSTEM_TYPE_ATS == devType)
|| (CI_SUCCESS == chResult)
@@ -30,6 +30,6 @@
#define VER_INTE_PROJECT 220 /*项目编号*/
#define VER_INTE_PRODUCT 40 /*产品编号*/
#define VER_INTE_EXE 1 /*可执行编号*/
#define VER_INTE_TIME 112 /*集成次数编号*/
#define VER_INTE_TIME 131 /*集成次数编号*/
#endif/*endif of #define _CI_INTEGRATE_CONFIG_H*/
+199 -40
View File
@@ -443,17 +443,17 @@ UINT32 CopyValidSetRcVobcDataStru(const UINT8* pCurCiAppDataPointer, void* pData
for (i = 0u; i < ValidIdNum; i++)
{
pDstAddr = (UINT8*)pDataStru + struLength * i;
/*ԪǰֽIDΪ0ʱЧ,˴˵Ч*/
if (0u != ShortFromCharLE(pDstAddr))
if (i < struNum)
{
(void)memcpy(pDstAddr, pCurCiAppDataPointer + curIndex, struLength);
pDstAddr = (UINT8*)pDataStru + struLength * i;
(void)CommonMemCpy((void*)pDstAddr, (UINT32)struLength, (const void*)(pCurCiAppDataPointer + curIndex), (UINT32)struLength);
curIndex += (UINT32)struLength;
}
else
{
/*ִκβ*/
curIndex += (UINT32)struLength;
debug_infor_printf((const)"ERROR: SetValidIdNum = %d\n", i);
}
}
}
@@ -1618,19 +1618,42 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer)
pCiAppDataPointer[curIndex] = gDyTestNum;
curIndex += 1U;
/*гԶɸѡ*/
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(TrainAtsScreenStru)* TRAIN_SUM_MAX), (void*)(&gszAtsScreenInfo), (UINT32)(sizeof(TrainAtsScreenStru)* TRAIN_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(TrainAtsScreenStru) * TRAIN_SUM_MAX);
/*Զɸѡг*/
pCiAppDataPointer[curIndex] = gAtsScreenNum;
curIndex += 1U;
/*ZCCBTCгѹϢ*/
pCiAppDataPointer[curIndex] = gCbtcCrossNumZc;
curIndex += 1u;
for (ii = 0u; ii < gCbtcCrossNumZc; ii++)
{
ShortToChar(gCbtcCrossStructZc[ii].wSignalId, &pCiAppDataPointer[curIndex]);
curIndex += 2u;
pCiAppDataPointer[curIndex] = gCbtcCrossStructZc[ii].wTrainId;
curIndex += 1u;
}
/*ATS/ֵ/һȷϢͬ*/
/**/
(void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(AtsFollowUpCmdFstStru), (const void *)(&gDansuoCancleMsgFst), (UINT32)sizeof(AtsFollowUpCmdFstStru));
curIndex = curIndex + (UINT32)sizeof(AtsFollowUpCmdFstStru);
(void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(RCIFollowUpReplyStru), (const void *)(&gDansuoCancleReplyFst), (UINT32)sizeof(RCIFollowUpReplyStru));
curIndex = curIndex + (UINT32)sizeof(RCIFollowUpReplyStru);
/**/
(void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(AtsFollowUpCmdFstStru), (const void *)(&gSwitchUnflockMsgFst), (UINT32)sizeof(AtsFollowUpCmdFstStru));
curIndex = curIndex + (UINT32)sizeof(AtsFollowUpCmdFstStru);
(void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(RCIFollowUpReplyStru), (const void *)(&gSwitchUnflockReplyFst), (UINT32)sizeof(RCIFollowUpReplyStru));
curIndex = curIndex + (UINT32)sizeof(RCIFollowUpReplyStru);
/*ν*/
(void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(AtsFollowUpCmdFstStru), (const void *)(&gSecUnflockMsgFst), (UINT32)sizeof(AtsFollowUpCmdFstStru));
curIndex = curIndex + (UINT32)sizeof(AtsFollowUpCmdFstStru);
(void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(RCIFollowUpReplyStru), (const void *)(&gSecUnflockReplyFst), (UINT32)sizeof(RCIFollowUpReplyStru));
curIndex = curIndex + (UINT32)sizeof(RCIFollowUpReplyStru);
/*źŻ*/
(void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(AtsFollowUpCmdFstStru), (const void *)(&gSignalUnflockMsgFst), (UINT32)sizeof(AtsFollowUpCmdFstStru));
curIndex = curIndex + (UINT32)sizeof(AtsFollowUpCmdFstStru);
(void)CommonMemCpy((void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(RCIFollowUpReplyStru), (const void *)(&gSignalUnflockReplyFst), (UINT32)sizeof(RCIFollowUpReplyStru));
curIndex = curIndex + (UINT32)sizeof(RCIFollowUpReplyStru);
/*һCRC*/
crcLength = curIndex - crcIndex;
crcResult = Tioc_CommonCrc32(pCiAppDataPointer + crcIndex, crcLength);
debug_infor_printf((const)"2oo2 RecvCiCmdDataStruCurSum-szNeighborCiInfo CRC:%x, Length:%d\n", crcResult, crcLength);
debug_infor_printf((const)"2oo2 RecvCiCmdDataStruCurSum-FollowUpCmd CRC:%x, Length:%d\n", crcResult, crcLength);
}
return curIndex;
}
@@ -2463,10 +2486,38 @@ UINT8 SetCiAppData(const UINT8 *pCiAppDataPointer,const UINT32 len)
gDyTestNum = pCiAppDataPointer[curIndex];
curIndex += 1U;
/*гԶɸѡ*/
(void)CommonMemCpy((void*)(&gszAtsScreenInfo), (UINT32)(sizeof(TrainAtsScreenStru)* TRAIN_SUM_MAX), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(TrainAtsScreenStru)* TRAIN_SUM_MAX));
curIndex = curIndex + (UINT32)(sizeof(TrainAtsScreenStru) * TRAIN_SUM_MAX);
/*ZCCBTCгѹϢ*/
gCbtcCrossNumZc = pCiAppDataPointer[curIndex];
curIndex += 1u;
for (ii = 0u; ii < gCbtcCrossNumZc; ii++)
{
gCbtcCrossStructZc[ii].wSignalId = ShortFromChar(&pCiAppDataPointer[curIndex]);
curIndex += 2u;
gCbtcCrossStructZc[ii].wTrainId = pCiAppDataPointer[curIndex];
curIndex += 1u;
}
/*ͬһ*/
/**/
(void)CommonMemCpy((void *)(&gDansuoCancleMsgFst), (UINT32)sizeof(AtsFollowUpCmdFstStru), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(AtsFollowUpCmdFstStru));
curIndex = curIndex + (UINT32)sizeof(AtsFollowUpCmdFstStru);
(void)CommonMemCpy((void *)(&gDansuoCancleReplyFst), (UINT32)sizeof(RCIFollowUpReplyStru), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(RCIFollowUpReplyStru));
curIndex = curIndex + (UINT32)sizeof(RCIFollowUpReplyStru);
/**/
(void)CommonMemCpy((void *)(&gSwitchUnflockMsgFst), (UINT32)sizeof(AtsFollowUpCmdFstStru), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(AtsFollowUpCmdFstStru));
curIndex = curIndex + (UINT32)sizeof(AtsFollowUpCmdFstStru);
(void)CommonMemCpy((void *)(&gSwitchUnflockReplyFst), (UINT32)sizeof(RCIFollowUpReplyStru), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(RCIFollowUpReplyStru));
curIndex = curIndex + (UINT32)sizeof(RCIFollowUpReplyStru);
/*ν*/
(void)CommonMemCpy((void *)(&gSecUnflockMsgFst), (UINT32)sizeof(AtsFollowUpCmdFstStru), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(AtsFollowUpCmdFstStru));
curIndex = curIndex + (UINT32)sizeof(AtsFollowUpCmdFstStru);
(void)CommonMemCpy((void *)(&gSecUnflockReplyFst), (UINT32)sizeof(RCIFollowUpReplyStru), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(RCIFollowUpReplyStru));
curIndex = curIndex + (UINT32)sizeof(RCIFollowUpReplyStru);
/*źŻ*/
(void)CommonMemCpy((void *)(&gSignalUnflockMsgFst), (UINT32)sizeof(AtsFollowUpCmdFstStru), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(AtsFollowUpCmdFstStru));
curIndex = curIndex + (UINT32)sizeof(AtsFollowUpCmdFstStru);
(void)CommonMemCpy((void *)(&gSignalUnflockReplyFst), (UINT32)sizeof(RCIFollowUpReplyStru), (const void *)(pCiAppDataPointer + curIndex), (UINT32)sizeof(RCIFollowUpReplyStru));
curIndex = curIndex + (UINT32)sizeof(RCIFollowUpReplyStru);
rtn = 1U;
}
}
@@ -2921,12 +2972,12 @@ UINT32 GetCiGeneralData(UINT8* pCiAppDataPointer)
curIndex = curIndex + curResult;
/*ͬѩϢ*/
curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void*)(szSendCiAreaSnow), CI_COM_CI_MAX_NUM, (UINT16)sizeof(ToCiAreaSnowStruct));
curIndex = curIndex + curResult;
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM), (void*)(szSendCiAreaSnow), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM));
curIndex = curIndex + (UINT32)(sizeof(ToCiAreaSnowStruct) * CI_COM_CI_MAX_NUM);
/*ͬѩϢ*/
curResult = CopyValidGetDataStru(pCiAppDataPointer + curIndex, (void*)(szRecvCiAreaSnow), CI_COM_CI_MAX_NUM, (UINT16)sizeof(ToCiAreaSnowStruct));
curIndex = curIndex + curResult;
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM), (void*)(szRecvCiAreaSnow), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM));
curIndex = curIndex + (UINT32)(sizeof(ToCiAreaSnowStruct) * CI_COM_CI_MAX_NUM);
/* ѩ */
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_LocalSnowModel), (UINT32)sizeof(UINT8));
@@ -2958,6 +3009,56 @@ UINT32 GetCiGeneralData(UINT8* pCiAppDataPointer)
/*뱾CIͨŵRcͨͷ*/
curResult = CopyValidGetHlhtHeadCtxs(pCiAppDataPointer + curIndex, CI_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), gSzRcHLHTHeadCtxs);
curIndex = curIndex + curResult;
/*ZCCBTCгѹϢ*/
pCiAppDataPointer[curIndex] = gCbtcCrossNumZc;
curIndex += 1u;
for (ii = 0u; ii < gCbtcCrossNumZc; ii++)
{
ShortToChar(gCbtcCrossStructZc[ii].wSignalId, &pCiAppDataPointer[curIndex]);
curIndex += 2u;
pCiAppDataPointer[curIndex] = gCbtcCrossStructZc[ii].wTrainId;
curIndex += 1u;
}
/**/
for (ii = 0U; ii < g_VirtualCIStructData.virtualCiNum; ii++)
{
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_VirtualCIStructData.virtualCi[ii].virtualCiId), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_VirtualCIStructData.virtualCi[ii].chAllSignalBrightFlag) , (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_VirtualCIStructData.virtualCi[ii].chAllSwitchYLockFlag), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8) , (const void*)(&g_VirtualCIStructData.virtualCi[ii].autoTriggerflag) , (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_VirtualCIStructData.virtualCi[ii].cimode), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_VirtualCIStructData.virtualCi[ii].chLabourCancelLinShiXianState) , (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwFlag), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8), (const void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwjHunXianFLag) , (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT32), (const void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwStartCycNum) , (UINT32)sizeof(UINT32));
curIndex = curIndex + (UINT32)sizeof(UINT32);
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT32), (const void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwValidCycNum) , (UINT32)sizeof(UINT32));
curIndex = curIndex + (UINT32)sizeof(UINT32);
/*ָʾ״̬*/
(void)CommonMemCpy((void*)(pCiAppDataPointer + curIndex), (UINT32)(VIRTUAL_CI_INDICATOR_SUM_MAX) * sizeof(IndicatorDataStruct) ,(const void*)(&g_VirtualCIStructData.virtualCi[ii].IndicatorData) , (UINT32)(VIRTUAL_CI_INDICATOR_SUM_MAX) * sizeof(IndicatorDataStruct));
curIndex = curIndex + (UINT32)((VIRTUAL_CI_INDICATOR_SUM_MAX) * sizeof(IndicatorDataStruct));
}
}
return curIndex;
@@ -3216,12 +3317,12 @@ UINT8 SetCiGeneralData(const UINT8* pCiAppDataPointer, const UINT32 len)
curIndex = curIndex + curResult;
/*ͬѩϢ*/
curResult = CopyValidSetDataStru(pCiAppDataPointer + curIndex, (void*)(szSendCiAreaSnow), CI_COM_CI_MAX_NUM, (UINT16)sizeof(ToCiAreaSnowStruct));
curIndex = curIndex + curResult;
(void)CommonMemCpy((void*)(szSendCiAreaSnow), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM));
curIndex = curIndex + (UINT32)(sizeof(ToCiAreaSnowStruct) * CI_COM_CI_MAX_NUM);
/*ͬѩϢ*/
curResult = CopyValidSetDataStru(pCiAppDataPointer + curIndex, (void*)(szRecvCiAreaSnow), CI_COM_CI_MAX_NUM, (UINT16)sizeof(ToCiAreaSnowStruct));
curIndex = curIndex + curResult;
(void)CommonMemCpy((void*)(szRecvCiAreaSnow), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(sizeof(ToCiAreaSnowStruct)* CI_COM_CI_MAX_NUM));
curIndex = curIndex + (UINT32)(sizeof(ToCiAreaSnowStruct) * CI_COM_CI_MAX_NUM);
/* ѩ */
(void)CommonMemCpy((void*)(&g_LocalSnowModel), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
@@ -3254,6 +3355,56 @@ UINT8 SetCiGeneralData(const UINT8* pCiAppDataPointer, const UINT32 len)
curResult = CopyValidSetHlhtHeadCtxs(pCiAppDataPointer + curIndex, CI_SUM_MAX, (UINT16)sizeof(HLHTHeadContextStru), gSzRcHLHTHeadCtxsCiToRc);
curIndex = curIndex + curResult;
/*ZCCBTCгѹϢ*/
gCbtcCrossNumZc = pCiAppDataPointer[curIndex];
curIndex += 1u;
for (ii = 0u; ii < gCbtcCrossNumZc; ii++)
{
gCbtcCrossStructZc[ii].wSignalId = ShortFromChar(&pCiAppDataPointer[curIndex]);
curIndex += 2u;
gCbtcCrossStructZc[ii].wTrainId = pCiAppDataPointer[curIndex];
curIndex += 1u;
}
/**/
for (ii = 0U; ii < g_VirtualCIStructData.virtualCiNum; ii++)
{
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].virtualCiId) , (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].chAllSignalBrightFlag), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].chAllSwitchYLockFlag), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].autoTriggerflag), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].cimode) , (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].chLabourCancelLinShiXianState) , (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwFlag), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwjHunXianFLag), (UINT32)sizeof(UINT8), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT8));
curIndex = curIndex + (UINT32)sizeof(UINT8);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwStartCycNum) , (UINT32)sizeof(UINT32), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT32));
curIndex = curIndex + (UINT32)sizeof(UINT32);
(void)CommonMemCpy((void*)(&g_VirtualCIStructData.virtualCi[ii].ZfwValidCycNum), (UINT32)sizeof(UINT32), (const void*)(pCiAppDataPointer + curIndex), (UINT32)sizeof(UINT32));
curIndex = curIndex + (UINT32)sizeof(UINT32);
/*ָʾ״̬*/
(void)CommonMemCpy((void*)(g_VirtualCIStructData.virtualCi[ii].IndicatorData), (UINT32)(VIRTUAL_CI_INDICATOR_SUM_MAX) * sizeof(IndicatorDataStruct), (const void*)(pCiAppDataPointer + curIndex), (UINT32)(VIRTUAL_CI_INDICATOR_SUM_MAX) * sizeof(IndicatorDataStruct));
curIndex = curIndex + (UINT32)((VIRTUAL_CI_INDICATOR_SUM_MAX) * sizeof(IndicatorDataStruct));
}
rtn = 1u;
}
else
@@ -3409,6 +3560,8 @@ UINT32 CopyValidGetSigDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum, Signal
curIndex++;
*(pCurCiAppDataPointer + curIndex) = pstSignalDataStruCC[i].SignalCrossState;
curIndex++;
*(pCurCiAppDataPointer + curIndex) = pstSignalDataStruCC[i].wCrossTacsTrainId;
curIndex++;
}
else
{
@@ -3475,6 +3628,8 @@ UINT32 CopyValidSetSigDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum, Signal
curIndex++;
pstSignalDataStruCC[devId].SignalCrossState = *(pCurCiAppDataPointer + curIndex);
curIndex++;
pstSignalDataStruCC[devId].wCrossTacsTrainId = *(pCurCiAppDataPointer + curIndex);
curIndex++;
}
else
@@ -3648,19 +3803,19 @@ UINT32 CopyValidGetLogicSecDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum,Lo
for (j = 0U; j < pstLogSecDataStruCC[i].chTrainInfoSum; j++)
{
ShortToChar(pstLogSecDataStruCC[i].szTrainResData->wTrainId, (pCurCiAppDataPointer + curIndex));
ShortToChar(pstLogSecDataStruCC[i].szTrainResData[j].wTrainId, (pCurCiAppDataPointer + curIndex));
curIndex += 2U;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData->chTrainApplyState;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData[j].chTrainApplyState;
curIndex++;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData->chLogicResUsable;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData[j].chLogicResUsable;
curIndex++;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData->chLogicReturnState;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData[j].chLogicReturnState;
curIndex++;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData->chLogicUnlockState;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData[j].chLogicUnlockState;
curIndex++;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData->chTrainLevel;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szTrainResData[j].chTrainLevel;
curIndex++;
LongToChar(pstLogSecDataStruCC[i].szTrainResData->dwRcvUnlockCmdCyc, (pCurCiAppDataPointer + curIndex));
LongToChar(pstLogSecDataStruCC[i].szTrainResData[j].dwRcvUnlockCmdCyc, (pCurCiAppDataPointer + curIndex));
curIndex += 4U;
}
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].cResReqOtherCIId;
@@ -3685,11 +3840,11 @@ UINT32 CopyValidGetLogicSecDataCC(UINT8* pCurCiAppDataPointer, UINT16 struNum,Lo
curIndex++;
for (j = 0U; j < pstLogSecDataStruCC[i].chLogSecLockBelLogRouteSum; j++)
{
ShortToChar(pstLogSecDataStruCC[i].szLogSecLockBelLogRouteData->wLogSecLockBelLogRouteId, (pCurCiAppDataPointer + curIndex));
ShortToChar(pstLogSecDataStruCC[i].szLogSecLockBelLogRouteData[j].wLogSecLockBelLogRouteId, (pCurCiAppDataPointer + curIndex));
curIndex += 2U;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szLogSecLockBelLogRouteData->chLogSecLockBelLogRouteState;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szLogSecLockBelLogRouteData[j].chLogSecLockBelLogRouteState;
curIndex++;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szLogSecLockBelLogRouteData->wLogSecLockBelLogRouteDir;
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].szLogSecLockBelLogRouteData[j].wLogSecLockBelLogRouteDir;
curIndex++;
}
*(pCurCiAppDataPointer + curIndex) = pstLogSecDataStruCC[i].LogSecLogLockState;
@@ -4586,6 +4741,7 @@ UINT32 CopyValidSetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcTo
{
m_OcToCiOrginDataNum = (UINT8)ValidIdNum;
/**/
debug_infor_printf((char*)"m_OcToCiOrginDataNum = %d\n", m_OcToCiOrginDataNum);
(void)CommonMemSet(OcRecvData, (UINT32)((OC_SUM_MAX)* sizeof(OcToCiOriginDataStruct)), 0U, (UINT32)((OC_SUM_MAX)* sizeof(OcToCiOriginDataStruct))); /*սṹֹ*/
for (i = 0U; i < ValidIdNum; i++)
{
@@ -4621,6 +4777,8 @@ UINT32 CopyValidSetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcTo
curIndex++;
pOcDevice->BoardState[j] = *(pCurCiAppDataPointer + curIndex);
curIndex++;
pOcDevice->MainStandbyState[j] = *(pCurCiAppDataPointer + curIndex);
curIndex++;
}
}
@@ -4766,7 +4924,6 @@ UINT32 CopyValidSetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcTo
UINT32 CopyValidGetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcToCiOriginDataStruct OcRecvData[])
{
UINT32 curIndex = 0U;
UINT16 ValidIdNum = 0U;
UINT16 i = 0U;
UINT16 k = 0U;
UINT8 j = 0U;
@@ -4786,8 +4943,8 @@ UINT32 CopyValidGetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcTo
/*Ч*/
ShortToChar(m_OcToCiOrginDataNum, pCurCiAppDataPointer);
curIndex += (UINT32)sizeof(UINT16); /*ֽ*/
if (struNum > ValidIdNum)
{
//printf("m_OcToCiOrginDataNum = %d\n", m_OcToCiOrginDataNum);
for (i = 0U; i < m_OcToCiOrginDataNum; i++)
{
ShortToChar(OcRecvData[i].OcId, (pCurCiAppDataPointer + curIndex));
@@ -4819,6 +4976,8 @@ UINT32 CopyValidGetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcTo
curIndex++;
*(pCurCiAppDataPointer + curIndex) = pOcDevice->BoardState[j];
curIndex++;
*(pCurCiAppDataPointer + curIndex) = pOcDevice->MainStandbyState[j];
curIndex++;
}
}
ShortToChar(OcRecvData[i].OcGdNum, (pCurCiAppDataPointer + curIndex));
@@ -4935,7 +5094,7 @@ UINT32 CopyValidGetOcOrginData(UINT8* pCurCiAppDataPointer, UINT16 struNum, OcTo
LongToChar(OcRecvData[i].ComStartCycle, (pCurCiAppDataPointer + curIndex));
curIndex += 4U;
}
}
}
else
{
@@ -56,6 +56,7 @@
#include "../Route/LogicalRouteDataManage.h"
#include "../Route/LongRouteDataManage.h"
#include "../ReverseCut/ReverseCutDataManage.h"
#include "../AxisSort/AxisSort.h"
#ifdef __cplusplus
extern "C" {
@@ -394,7 +394,7 @@ static UINT8 aam_AxisErrorJudge(UINT16 acID,UINT16 acIndex)
; /*继续处理*/
}
/** 判断相邻范围内计轴坏车最近占用时间检查通过 */
if ((CI_ERROR == chNearbyCheck))
if (CI_ERROR == chNearbyCheck)
{
/*有 坏车接近 或左右相邻计轴均无车接近 立即清除冗余计时*/
if ((AAM_BAD_NEAR == sameTrainType) || (AAM_BAD_NEAR == convertTrainType))
@@ -423,7 +423,6 @@ static UINT8 aam_AxisErrorJudge(UINT16 acID,UINT16 acIndex)
/** 冗余计时位加1*/
aam_AddRedunTime(acIndex, maxRedunTimes);
}
/** 计轴故障的判断 */
tmpRedunTime = aam_GetRedunTime(acIndex);
tmppassTrainType = aam_GetPassTrainFlag(acIndex);
@@ -2111,7 +2110,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*/
+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 */
@@ -105,37 +105,34 @@ SAME_LINE_ERR,
*/
UINT8 IsSameLineCI(const UINT8 ciA, const UINT8 ciB)
{
UINT32 etcsIdA, etcsIdB;
UINT16 u16CiA, u16CiB;
UINT32 etcsIdA = 0U;
UINT32 etcsIdB = 0U;
UINT16 u16CiA = 0U;
UINT16 u16CiB = 0U;
UINT8 retVal = SAME_LINE_ERR;
UINT8 cbtcSysType = DQU_CBTC_FAO;
UINT8 dquDevNameA = CI_ERROR;
UINT8 dquDevNameB = CI_ERROR;
UINT8 chCiAFactoryType = 0U;
UINT8 chCiBFactoryType = 0U;
u16CiA = (UINT16)((CI_SYSTEM_TYPE_RCI * 256u) + ciA);
u16CiB = (UINT16)((CI_SYSTEM_TYPE_RCI * 256u) + ciB);
u16CiA = (UINT16)((CI_SYSTEM_TYPE_RCI * 256U) + ciA);
u16CiB = (UINT16)((CI_SYSTEM_TYPE_RCI * 256U) + ciB);
cbtcSysType = GetCbtcSysType();
dquDevNameA = dquDevName2HlhtId(u16CiA,0U,&etcsIdA);
dquDevNameB = dquDevName2HlhtId(u16CiB,0U,&etcsIdB);
dquDevNameA = dquDevName2HlhtId(u16CiA,0u,&etcsIdA);
dquDevNameB = dquDevName2HlhtId(u16CiB,0u,&etcsIdB);
if(DQU_CBTC_CPK == cbtcSysType)
{
retVal = SAME_LINE_YES;
}
else if(DQU_CBTC_FAO == cbtcSysType)
{
retVal = SAME_LINE_YES;
}
else if(DQU_CBTC_HLT == cbtcSysType)
{
/*需要增加互联互通的判断*/
if ((CI_SUCCESS == dquDevNameA) && (CI_SUCCESS == dquDevNameB))
{
/*根据互联互通ETCS编号的定义,从低到高第三个字节为线路编号*/
if ((etcsIdA & ((UINT32)0x00ff0000)) == (etcsIdB & ((UINT32)0x00ff0000)))
{
retVal = SAME_LINE_YES;
/*同一条线路,一期二期使用不同厂家联锁,也判为不同线路,接口走互联互通*/
chCiAFactoryType = GetCiFactoryType(ciA);
chCiBFactoryType = GetCiFactoryType(ciB);
if (chCiAFactoryType == chCiBFactoryType)
{
retVal = SAME_LINE_YES;
}
@@ -146,17 +143,14 @@ UINT8 IsSameLineCI(const UINT8 ciA, const UINT8 ciB)
}
else
{
retVal = SAME_LINE_ERR;
retVal = SAME_LINE_NO;
}
}/* zt 删除单轨相关代码 2022-02-15 */
else if (DQU_CBTC_CC == cbtcSysType)
{
retVal = SAME_LINE_YES;
}
else
{
retVal = SAME_LINE_ERR;
}
return retVal;
}
/*
@@ -204,7 +198,7 @@ UINT32 GetCiTranCiDataCheckVer(const UINT8 ciId, const UINT16 deviceName)
UINT8 ii = 0U;
UINT8 chBreakFlag = 0U;
UINT8 chDevType = 0U;
chDevType = (UINT8)((deviceName & 0xFF00) >> 8U);
chDevType = (UINT8)((deviceName & 0xFF00u) >> 8U);
if ((ciId > 0U) && (ciId < CI_SUM_MAX) &&
((RC_WORK_MODE_CI == chDevType)||(RC_WORK_MODE_TIOC == chDevType)))
{
+250 -45
View File
@@ -1292,17 +1292,13 @@ edit cgh 20241203
UINT8 RouteLockDriveSwitch(const UINT16 routeId, const UINT8 NeedForDrvRoutAssoSwit)
{
UINT8 ii = 0u;
UINT8 switchSum = 0u;
UINT16 switchId = 0u;
UINT8 switchExpPosition = SWITCH_POSITION_INVALID; /*道岔期望位置*/
UINT8 switchDancaoPosition = SWITCH_POSITION_INVALID; /*单操有效位置*/
RouteSwitchStruct* pRouteSwitchStru = NULL; /*道岔数据结构指针*/
UINT8 innerSwitchRetVal = CI_ERROR; /*检查进路内道岔是否可被驱动的结果*/
UINT8 assocSwitchRetVal = CI_ERROR; /*检查带动道岔是否可被驱动的结果*/
UINT8 assocSwitchSum = 0u; /*道岔数目*/
RouteAssocSwitchStruct routeAssocSwitchStru = {0,0}; /*道岔数据*/
UINT8 routeProtectSwitchSum = 0u; /*防护道岔数目*/
RouteProtectSwitchStruct* pRouteProtectSwitchStru = NULL; /*防护道岔数据*/
UINT8 chAutoCheck = 0U;
UINT8 chSendLevel = 0U;
chAutoCheck = AutoSignalOrRouteValid(routeId);
@@ -3236,7 +3232,6 @@ UINT8 GetSwitchRouteLockState(UINT16 switchId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 belongSecId = 0u; /*所属区段ID*/
UINT16 doubleSwitchId = 0u; /*双动道岔ID*/
UINT8 belongPhySecState = 0u; /*所属物理区段的进路状态*/
UINT8 reVal = CI_ERROR;
@@ -3258,21 +3253,7 @@ UINT8 GetSwitchRouteLockState(UINT16 switchId)
}
else
{
doubleSwitchId = GetDSwitchOtherId(switchId);/*获取双动道岔ID*/
if (doubleSwitchId != 0u)
{/*双动道岔非空*/
belongSecId = GetSwitchPhySectionId(doubleSwitchId);
belongPhySecState = GetPhySecLockState(belongSecId);
if ((PHYSICAL_SECTION_LOCK_NORMAL == belongPhySecState) ||
(PHYSICAL_SECTION_LOCK_PROTECT == belongPhySecState) ||
(PHYSICAL_SECTION_LOCK_DELAY == belongPhySecState) ||
(PHYSICAL_SECTION_LOCK_FAULTDELAY == belongPhySecState))
{
reVal = CI_SUCCESS;
}
}
/*双动道岔锁闭状态不处理*/
}
}
return reVal;
@@ -5016,15 +4997,15 @@ void SetPhySecSpksFLockBySpksId(UINT16 spksId,UINT8 spksStatus)
*/
UINT8 GetOtherCiDevStatus(UINT16 const devType,UINT16 const devId,UINT16 const chkDevStatus)
{
UINT8 devState = 0u;
UINT8 tmpDevState = 0u;
UINT8 tmpPsdVobcCmd = 0u;
UINT8 tmpColor = 0u;
UINT8 ttmpDevState = 0u;
UINT8 psdMutualLockState = 0u;
UINT16 tempdevId = 0u; /*临时设备ID*/
UINT8 tempdevState = 0u; /*临时设备状态*/
UINT8 devState = 0U;
UINT8 tmpDevState = 0U;
UINT8 tmpPsdVobcCmd = 0U;
UINT8 tmpColor = 0U;
UINT8 ttmpDevState = 0U;
UINT8 psdMutualLockState = 0U;
UINT16 tempdevId = 0U; /*临时设备ID*/
UINT8 tempdevState = 0U; /*临时设备状态*/
UINT8 chPsdExceptState = 0U;
switch(devType)
{
case CI_DEVICE_TYPE_SWITCH: /*道岔*/
@@ -5039,12 +5020,12 @@ UINT8 GetOtherCiDevStatus(UINT16 const devType,UINT16 const devId,UINT16 const c
}
else
{
devState = 0u;
devState = 0U;
}
break;
case CI_DEVICE_TYPE_SIGNAL: /*信号机*/
tmpColor = GetSignalCurColor(devId);
if (tmpColor > 0u)
if (0U < tmpColor)
{
tmpDevState = GetSignalOpenCloseState(tmpColor);
if (SIGNAL_OPEN == tmpDevState)
@@ -5058,7 +5039,7 @@ UINT8 GetOtherCiDevStatus(UINT16 const devType,UINT16 const devId,UINT16 const c
}
else
{
devState = 0u;
devState = 0U;
}
break;
case CI_DEVICE_TYPE_ROUTE: /*进路*/
@@ -5092,13 +5073,21 @@ UINT8 GetOtherCiDevStatus(UINT16 const devType,UINT16 const devId,UINT16 const c
}
else
{
devState = 0u;
devState = 0U;
}
break;
case CI_DEVICE_TYPE_PSD: /*站台屏蔽门*/
tmpDevState = GetPsdState(devId);
tmpPsdVobcCmd = GetPsdVobcCmd(devId);
psdMutualLockState = GetPsdMutualLockRemoveState(devId);
chPsdExceptState = GePsdExceptState(devId);
if (PSD_EXCEPT_NO != chPsdExceptState)
{
devState = OTHER_CI_PSD_STATUS_OPEN; /* 屏蔽门异常状态,则认为打开 */
}
else
{
if ((PSD_MUTUALLOCK_REMOVE_YES == psdMutualLockState) || (PSD_ATS_MUTUALLOCK_REMOVE_YES == psdMutualLockState)
|| (PSD_ATS_AND_JD_MUTUALLOCK_REMOVE_YES == psdMutualLockState))
{
@@ -5107,7 +5096,7 @@ UINT8 GetOtherCiDevStatus(UINT16 const devType,UINT16 const devId,UINT16 const c
}
else if (PSD_STATE_OPEN == tmpDevState)
{
if (tmpPsdVobcCmd == VOBCTOCI_COMMAND_TYPE_PSDOPEN)
if (VOBCTOCI_COMMAND_TYPE_PSDOPEN == tmpPsdVobcCmd)
{
/* 收到VOBCToCI打开屏蔽门命令,则直接认为屏蔽门占用打开 */
devState = OTHER_CI_PSD_STATUS_OCCUPY_OPEN;
@@ -5125,11 +5114,14 @@ UINT8 GetOtherCiDevStatus(UINT16 const devType,UINT16 const devId,UINT16 const c
}
else
{
devState = 0u;
devState = 0U;
}
}
break;
case CI_DEVICE_TYPE_PSD_EXCEPT_OPEN: /*站台屏蔽门(异常打开*/
devState = GePsdExceptOpenState(devId);
case CI_DEVICE_TYPE_PSD_EXCEPT_OPEN: /*站台屏蔽门(异常)*/
devState = GePsdExceptState(devId);
/*宁象需求:屏蔽门异常打开又关闭、尚未取消异常状态时不开放信号*/
break;
case CI_DEVICE_TYPE_GARAGEDOOR: /*车库门*/
tmpDevState = GetGaragedoorState(devId);
@@ -5143,7 +5135,7 @@ UINT8 GetOtherCiDevStatus(UINT16 const devType,UINT16 const devId,UINT16 const c
}
else
{
devState = 0u;
devState = 0U;
}
break;
case CI_DEVICE_TYPE_WASHMACHINE: /* 洗车机 */
@@ -5166,7 +5158,7 @@ UINT8 GetOtherCiDevStatus(UINT16 const devType,UINT16 const devId,UINT16 const c
}
else
{
if (ttmpDevState == SPKS_CUT_NO)
if (SPKS_CUT_NO == ttmpDevState)
{
devState = OTHER_CI_SPKS_YES;
}
@@ -5928,6 +5920,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*/
@@ -6072,6 +6066,21 @@ UINT8 CheckJumpLockApply(UINT16 axisSectionId)
}
}
}
if (CI_SUCCESS == reVal)
{/*检查防护道岔位置*/
devId = 0u;
devState = 0u;
reVal = AxisSecAllProtSwitchPosCheck(axisSectionId, &devId, &devState);
}
if (CI_SUCCESS == reVal)
{/*检查防护道岔封锁状态*/
devId = 0u;
devState = 0u;
reVal = AxisSecProtSwitchFLockCheck(axisSectionId, &devId, &devState);
}
return reVal;
}
@@ -6201,6 +6210,7 @@ UINT8 CheckLogJumpLockApply(UINT16 logSectionId)
UINT8 logSecLockState = 0U;
UINT8 logSecLockRouteNum = 0U;
UINT8 chFailStep = 0U;
UINT8 cYLockAlarmFlag = FLAG_UNSET; /*引导总锁报警标志*/
bufIndex = GetlogSectionBufIndex(logSectionId); /*获取区段数组下标*/
/**区段下标合法*/
@@ -6466,6 +6476,28 @@ 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
{
@@ -6767,10 +6799,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;
}
@@ -6799,6 +6838,32 @@ UINT8 JumpLockDriveSwitch(const UINT16 axisSecId)
}
}
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)
{
/*驱动计轴区段道岔*/
@@ -6817,7 +6882,7 @@ UINT8 JumpLockDriveSwitch(const UINT16 axisSecId)
/*
:
:
: const UINT16 axisSecId ID
: const UINT8 DrivFlag
:
@@ -6829,12 +6894,18 @@ 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); /*获取计轴区段内道岔数据*/
protectSwitchSum = GetAxisSecRelateProSwSum(axisSecId);
pProtectSwitchStru = GetAxisSecRelateProSwStru(axisSecId);
if ((NULL != pAxisSecSwitchStru) && (NULL != pProtectSwitchStru))
{
if (SWITCH_NEED_DRIV_TRUE == DrivFlag)
{/*需要驱动计轴区段内道岔*/
@@ -6842,9 +6913,17 @@ void AxisSecDrvInnerSwitch(const UINT16 axisSecId, const UINT8 DrivFlag)
{
switchId = pAxisSecSwitchStru[ii].SwitchId;
switchExpPos = pAxisSecSwitchStru[ii].SwitchPosition;
funRtn = SwitchDriveProcess(switchId, switchExpPos); /*设置计轴区段内道岔的驱动状态为驱动中*/
(void)SwitchDriveProcess(switchId, switchExpPos); /*设置计轴区段内道岔的驱动状态为驱动中*/
}
for (ii = 0u; ii < protectSwitchSum; ii++)
{
switchId = pProtectSwitchStru[ii].SwitchId;
switchExpPos = pProtectSwitchStru[ii].SwitchPosition;
(void) SwitchDriveProcess(switchId, switchExpPos); /*设置计轴区段防护道岔的驱动状态为驱动中*/
}
}
}
}
@@ -7298,7 +7377,7 @@ 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);
@@ -7322,8 +7401,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;
}
@@ -11592,3 +11672,128 @@ UINT8 GetLocalVirCiType(UINT8 chVirCiId)
return ret;
}
/*
*
*
*
* Created :LYJ
*/
UINT8 CheckLocalCiLSXSStata(void)
{
UINT8 chRet = 0U;
UINT8 chVirCINum = 0U;
UINT8 i = 0U;
UINT8 chXiansuState = 0U;
UINT8 chVirtualCIid = 0U;
UINT8 chTsrSureFlag = 0U;
chTsrSureFlag = GetTsrSureFlag(); /*获取临时限速确认标志*/
if (CI_TSR_SURE_YES == chTsrSureFlag)
{
chRet = CI_SUCCESS;
}
else
{
/*临时限速未确认,判断是否做了限速清除*/
chVirCINum = GetVirtualCINum();
for (i = 0U; i < chVirCINum; i++)
{
chVirtualCIid = GetVirtualCIid(i);
chXiansuState = GetVirCILabourCancelLSXianSta(chVirtualCIid);
if ((LINSHIXIANSU_COMM_GOOD_STATE == chXiansuState) || (LINSHIXIANSU_LABOURCANCLE_YES_STATE == chXiansuState))
{
chRet = CI_SUCCESS;
}
else
{
chRet = CI_ERROR;
break;
}
}
}
return chRet;
}
/*
:
:
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]);
}
}
}
@@ -74,6 +74,11 @@ typedef struct S_AreaSnowInfoStruct
/* 其他联锁条件检查配置状态相关定义 */
#define LOCAL_AREA_SNOW_SUM_MAX ((UINT8)20) /*本控区及相邻控区发送的区间雨雪站台数量*/
#define ALL_AREA_SNOW_SUM_MAX ((UINT8)254) /*TMC发送的全线区间雨雪站台数量*/
#define ALL_CBTC_CROSS_SUM_MAX ((UINT8)253) /*CBTC跨压最大数量*/
#define ALL_TACS_CROSS_SUM_MAX ((UINT8)253) /*TACS跨压最大数量*/
#define CROSS_SIGNAL_ID_MAX ((UINT16)1499) /*跨压信号机ID最大值*/
#define CBTC_CROSS_ID_MAX ((UINT8)253) /*CBTC跨压最大列车ID*/
#define TACS_CROSS_ID_MAX ((UINT8)253) /*TACS跨压最大列车ID*/
/* 1 信号机
开放0x55
@@ -221,8 +226,6 @@ extern UINT8 comm_Train_Test_YSKJ_SCX_State; /*
extern UINT8 comm_Train_Test_SQJ_CLD_State; /*试车线与车辆段采用通信接口时车辆段SQJ状态*/
extern UINT8 comm_Train_Test_TYSJ_CLD_State; /*试车线与车辆段采用通信接口时车辆段TYSJ状态*/
extern UINT8 ZCToCIAutoRtnIndict_Flash_Sta; /*ZC给CI的无人折返灯闪灯状态*/
extern UINT8 ZCToCIAutoRtnIndict_Steady_Sta; /*ZC给CI的无人折返灯稳灯状态*/
extern UINT8 AutoTriggerFlag; /*自动触发标志初始化为未设置*/
extern UINT8 CiCiRelayInterfaceConfirmFlag;/*继电接口确认标志*/
@@ -1975,4 +1978,36 @@ void SetLocalSnowModelCC(UINT8 setmodle);
add by mpt 20260104
*/
UINT8 GetLocalVirCiType(UINT8 chVirCiId);
/*
* 功能描述:判断本联锁临时限速状态
* 参数说明:无
* 返 回 值:临时限速有效返回失败,清除或与ZC通信正常返回成功
* Created :LYJ
*/
UINT8 CheckLocalCiLSXSStata(void);
/*
功能描述:
清除逻辑区段关联道岔单操位置
输入参数:
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
+8 -1
View File
@@ -111,6 +111,10 @@
#define EFUNC_OVERLAP_VALIDMASK_CHECK ((UINT8)0x4A) /*函数:OverlapValidMaskCheck 计算保护区段有效码位检查*/
#define EFUNC_ROUTE_LOCK_DRIVE_SWITCH ((UINT8)0xD2) /*RouteLockDriveSwitch 锁闭道岔*/
#define EFUNC_ROUTE_COUPLINK_SET ((UINT8)0xD7) /*SetCouplinkRouteLogicManage 办理联挂进路逻辑管理*/
#define EFUNC_FOLLOWUP_SWITCH_DANSUO_CANCLE ((UINT8)0xD8) /*FollowUpSwitchUnFlockCheck 一二次道岔单解命令*/
#define EFUNC_FOLLOWUP_SWITCH_UNFLOCK ((UINT8)0xD9) /*FollowUpSwitchUnFlockCheck 一二次道岔解封命令*/
#define EFUNC_FOLLOWUP_SEC_UNFLOCK ((UINT8)0xDA) /*FollowUpSecUnFlockCheck 一二次区段解封命令*/
#define EFUNC_FOLLOWUP_SIGNAL_UNFLOCK ((UINT8)0xDB) /*FollowUpSwitchUnFlockCheck 一二次信号解封命令*/
/*车辆段联锁逻辑检查*/
#define EFUNC_SET_LEAD_ROUTE_CHECK ((UINT8)0x4B) /*办理引导进路检查*/
@@ -219,7 +223,8 @@
#define EFUNC_PARSE_LOCAL_RC2CI_DATA ((UINT8)0xD5U) /*函数:ParseRcToLocalCiDataFrame*/
#define EFUNC_PARSE_LOCAL_CI2CI_DATA ((UINT8)0xD6U) /*函数:ParseCiToCiDataFrame*/
#define EFUNC_PARSE_LOCAL_OC2CI_DATA ((UINT8)0xD7U) /*函数:ParseOcToCiDataFrame*/
#define EFUNC_CONNECT_ROUTE_RELEASE ((UINT8)0xD8U) /*函数:ConnectRouteReleaseManage*/
#define EFUNC_PARSE_GATEWAY2CI_DATA ((UINT8)0xD9U) /*函数:ParseGateWayToCiDataProc*/
/*************************************************分界线******************************************************************************/
/*************************************************分界线******************************************************************************/
@@ -242,6 +247,7 @@
#define ETYPE_GROUP_AUTO_ROUTE_STATE ((UINT8)0x16) /*组合自动进路*/
#define ETYPE_ROUTE_APPLY_SWITCH_MOVE ((UINT8)0xA4) /*进路道岔单操中*/
#define ETYPE_COUPLINK_ROUTE_IDLE ((UINT8)0xA5) /*联挂进路内无被联挂车*/
#define ETYPE_CONNECT_ROUTE_RELEASE ((UINT8)0xA6) /*联络线接车进路解锁条件不满足*/
#define ETYPE_COMM_WITH_VOBC ((UINT8)0x11) /*与VOBC通信*/
@@ -254,6 +260,7 @@
#define ETYPE_COMM_WITH_TMC ((UINT8)0x17) /*与TMC通信*/
#define ETYPE_COMM_WITH_RC ((UINT8)0x18U) /*与RC通信*/
#define ETYPE_COMM_WITH_OC ((UINT8)0x19U) /*与OC通信*/
#define ETYPE_COMM_WITH_GATEWAY ((UINT8)0x1AU) /*与网关通信*/
/* 信号机故障类型编码 (UINT8)0x21-(UINT8)0x3f */
/* 设备类型 CI_DEVICE_TYPE_SIGNAL */
File diff suppressed because it is too large Load Diff
+76 -10
View File
@@ -186,10 +186,9 @@ UINT8 PsdDeviceToRelayStateProc(void);
/*
* 功能描述: 更新洗车机继电器状态
* 参数说明: void
* 返回值 0: 更新失败
* 1: 更新成功
* 返回值 void
*/
UINT8 WashMachineDevToRelayStaProc(void);
void WashMachineDevToRelayStaProc(void);
/*
* 功能描述: 更新紧急停车按钮逻辑状态
@@ -226,10 +225,9 @@ void GaragedoorDevToRelayStaProc(void);
/*
* 功能描述: 更新洗车机的逻辑状态
* 参数说明: void
* 返回值 0: 更新失败
* 1: 更新成功
* 返回值 void
*/
UINT8 WashMachineToDeviceStateProc(void);
void WashMachineToDeviceStateProc(void);
/*
* 功能描述: 更新Spks按钮逻辑状态
* 参数说明: void
@@ -328,12 +326,17 @@ void OcSwitchDeviceOutput(void);
UINT8 GetOcSignalColor(UINT16 signalId);
/*
* 功能描述: 获取OC道岔设备颜色
* 功能描述: 获取OC道岔设备状态
* 参数说明:
UINT16 signalId:信号机id
* 返回值 void
UINT16 switchId:道岔id
UINT8 mainControlOCId 主控OCId
* 返回值
* ((UINT8)0x01) 道岔定位
* ((UINT8)0x02) 道岔反位
* ((UINT8)0x04) 道岔四开
* ((UINT8)0x08) 道岔移动
*/
UINT8 GetOcSwitchState(UINT16 switchId);
UINT8 GetOcSwitchState(UINT16 switchId, UINT8 mainControlOCId);
/*
* 功能描述: 间隙探测脉冲接口方式启动驱动处理
@@ -1136,6 +1139,69 @@ UINT8 PsdIbpRelToDevStaProc(const UINT16 wPsdId);
*/
void OnePlatEsbAndCutBtnProc(void);
/*
* 功能描述:取消当前未异常打开的站台门的异常状态
* 参数说明: const UINT16 doorId,屏蔽门ID
* 返回值 :无
*Create fan 2026.03.26
*/
void CancelPsdExceptState(UINT16 doorId);
/*
* 功能描述: 设置道岔的每一个OC的主控状态
* 参数说明:
UINT16 switchId:道岔id
* 返回值 void
* add by mpt 20260326
*/
void SetOcSwitchControlState(UINT16 switchId);
/*
* 功能描述: 仲裁当前道岔的主控OC
* 参数说明: UINT16 switchCurSum 道岔总数
* 返回值
* add by mpt 20260326
*/
void SetAllSwitchCurMainControlOC(UINT16 switchCurSum);
/*
* 功能描述: OC道岔主控命令生成处理
* 参数说明: UINT16 switchId 道岔ID
* 返回值 void
*/
void OutSwitchControlModeCmd(UINT16 switchId);
/*
* 功能描述: 道岔无主控时产生主备控命令处理
* 参数说明: UINT16 switchId
* 返回值 void
*/
void SwitchMainControlCmdOut(UINT16 switchId, UINT8 ocId);
/*
* 功能描述: OC道岔主控状态管理
* 参数说明: void
* 返回值 void
*/
void OcSwitchControlModeCmdOutput(void);
/*
* 功能描述: 双主防护模块
* 参数说明: UINT16 switchId 道岔ID
* 返回值 void
*/
void SwitchDoubleMainProtect(UINT16 switchId);
/*
* 功能描述:道岔寻表模块
* 参数说明: UINT16 switchId 道岔ID
* 返回值 void
* add by mpt 20260328
*/
void FindSwitchPostionCmdOut(UINT16 switchId);
/*
* 功能描述: 更新倒切柜状态
* 参数说明: void
* 返回值
* Create Fan 20260608
*/
void ReverseStateUpdateProc(void);
#ifdef __cplusplus
}
#endif
File diff suppressed because it is too large Load Diff
+7
View File
@@ -537,6 +537,13 @@ void SignalTrainCrossPro(void);
* 返回值 void
*/
void ProcessIvocToRCData(void);
/*
* 功能描述: Vobc点连式信息清除
* 参数说明: UINT16 wTrainIdVOBCid
* 返回值 void
* by lyj 20260316
*/
void VobcBlocLinkDataClear(const UINT16 wTrainId);
#ifdef __cplusplus
}
+351 -6
View File
@@ -81,10 +81,12 @@ void OutputDataProcess(void)
UINT8 CiPattern = 0u;
UINT8 chDsnLinSwitch = 0U;
UINT8 chTiocSysMode = 0U;
UINT8 chLocalCiOCSswitch = 0U;
chTiocSysMode = GetTiocSystemMode();
chDsnLinSwitch = GetCiFunctionSwitchConfig(FUNC_DSN_LINE_SWITCH);
CiPattern = GetLocalCiPattern();
chLocalCiOCSswitch = GetLocalCiOCSswitch();
if (REVERSE_MODE_MAIN != chTiocSysMode)
{
@@ -118,6 +120,12 @@ void OutputDataProcess(void)
/*道岔输出处理*/
OcSwitchDeviceOutput();
if (OC_S_ON == chLocalCiOCSswitch)
{/*OCS开关打开*/
/*道岔主控命令和寻表命令输出管理*/
OcSwitchControlModeCmdOutput();
}
/*信号机输出处理*/
OcSignalDeviceOutput();
}
@@ -152,7 +160,7 @@ void OutputDataProcess(void)
(void)PsdDeviceToRelayStateProc();
/*更新洗车机继电器状态*/
(void)WashMachineDevToRelayStaProc();
WashMachineDevToRelayStaProc();
/*更新计轴复位继电器状态*/
/*虚拟联锁兼容*/
@@ -217,6 +225,9 @@ void OutputDataProcess(void)
/*后备列车发送数据处理*/
VobcBackUpOutputProcess();
/*点连式列车发送数据处理*/
VobcBlocLinkOutputProcess();
/*资源对顶点数据计算*/
(void)ReqAlignmentInfoCalc();
@@ -389,6 +400,10 @@ UINT8 GetAtsBackInfoParam(const UINT8 functionId,const UINT8 deviceStateType, co
case ETYPE_COUPLINK_ROUTE_IDLE:
returnValue = CI_BACK_COUPLINK_ROUTE_IDLE; /*联挂进路内无被联挂车*/
break;
case ETYPE_CONNECT_ROUTE_RELEASE:
returnValue = CI_BACK_CONNECT_ROUTE_RELEASE; /*联络线接车进路解锁条件不满足*/
break;
/*信号机故障反馈*/
case ETYPE_SIG_START_OPEN_STATE:
@@ -441,11 +456,11 @@ UINT8 GetAtsBackInfoParam(const UINT8 functionId,const UINT8 deviceStateType, co
case ETYPE_SIG_CLOSE_OVER_TIME:
returnValue = CI_BACK_SIG_CLOSE_OT; /*信号机关闭超时*/
break;
#if 0
case ETYPE_SIG_RETURN_OPENED_STATE:
returnValue = CI_BACK_AS_RETR_ENDSIG_RT_SET;/*以该信号机为终端信号机的折返进路已经办理*/
break;
#endif
case ETYPE_SIG_LEAD_ALL_LOCK:
returnValue = CI_BACK_SIG_LEAD_OPEN_FAIL; /*引导信号开放条件不满足,全站已下发引导总锁*/
break;
@@ -1879,6 +1894,30 @@ void IndicatorStateProc(void)
}
}
else if (INDICATOR_TYPE_XDC_DCGDJ == devType)
{ /*蓄电池电池供电*/
devRelaySum = GetIndicatorRelaySum(devId); /*获取相关继电器总数*/
devRelayIdBuf = GetIndicatorRelayIdBuf(devId); /*获取相关继电器ID buf*/
if ((0U == devRelaySum) || (NULL == devRelayIdBuf))
{
SetIndicatorState(devId, INDICATOR_SHOW_YES); /*设置红灯报警*/
}
else
{
relayCollState = GetRelayCollState(devRelayIdBuf[0]);
if (RELAY_STATE_DOWN == relayCollState)
{ /*继电器落下*/
SetIndicatorState(devId, INDICATOR_SHOW_NO); /*设置绿灯*/
}
else
{
SetIndicatorState(devId, INDICATOR_SHOW_YES); /*设置红灯*/
}
}
}
else if (INDICATOR_TYPE_PORT_RONGSI == devType)
{
devRelaySum = GetIndicatorRelaySum(devId); /*获取相关继电器总数*/
@@ -3538,6 +3577,7 @@ void NonRouteRelayStateProc(void)
UINT8 interfaceType = FUNC_SWITCH_UNDEF;/*试车线与车辆段接口类型*/
UINT8 i = 0u;
UINT16 agreeTryTrainRelayId = 0u;/*同意试车继电器ID*/
UINT16 wColWaysideTryTrainIndRelayId = 0U;/*轨旁试车指示器继电器ID*/
NonRouteDataStruct* pNonRoute = NULL;
UINT8 localCiId = 0U; /*本联锁ID*/
UINT8 nonRouteBelongCiId = 0U; /*非进路所属联锁ID*/
@@ -3564,6 +3604,7 @@ void NonRouteRelayStateProc(void)
{ /*试信号模式且试车线与车辆段采用继电器接口*/
agreeTryTrainRelayId = GetNonRouteAgreeTryRelayIdById(pNonRoute->NonRouteId);
(void)SetRelayDriveState(agreeTryTrainRelayId, RELAY_DRIVE_STATE_UP); /*设置同意试车继电器吸起*/
}
else if ((NONROUTE_RUN_MODE_APPLY == pNonRoute->RunMode) && (SCX_CLD_INTERFACE_COMM == interfaceType))
{/*试信号模式且试车线与车辆段采用通信接口*/
@@ -3577,6 +3618,17 @@ void NonRouteRelayStateProc(void)
{
/*不处理*/
}
wColWaysideTryTrainIndRelayId = GetWaysideTryTrainIndRelayId(pNonRoute->NonRouteId);
if (0U != wColWaysideTryTrainIndRelayId)
{
/*设置轨旁试车指示器继电器吸起*/
(void)SetRelayDriveState(wColWaysideTryTrainIndRelayId, RELAY_DRIVE_STATE_UP);
}
else
{
/*不处理*/
}
}
else
{/*车辆段非进路不是开放状态时,发送试车线不同意试车(继电接口:驱同意试车继电器落下;串口和网口:发送同意试车无效状态)*/
@@ -3586,6 +3638,7 @@ void NonRouteRelayStateProc(void)
/*驱动非进路同意试车继电器落下 非进路同意试车继电器常态落下,相当于恢复默认态*/
agreeTryTrainRelayId = GetNonRouteAgreeTryRelayIdById(pNonRoute->NonRouteId);
(void)SetRelayDriveState(agreeTryTrainRelayId, RELAY_DRIVE_STATE_DOWN);
}
else if ((SCX_CLD_INTERFACE_COMM == interfaceType) || (SCX_CLD_SERIAL_PORT_COMM == interfaceType))
{
@@ -3595,6 +3648,16 @@ void NonRouteRelayStateProc(void)
{
; /*不处理*/
}
wColWaysideTryTrainIndRelayId = GetWaysideTryTrainIndRelayId(pNonRoute->NonRouteId);
if (0U != wColWaysideTryTrainIndRelayId)
{
/*设置轨旁试车指示器继电器落下*/
(void)SetRelayDriveState(wColWaysideTryTrainIndRelayId, RELAY_DRIVE_STATE_DOWN);
}
else
{
/*不处理*/
}
}
break;
@@ -4930,7 +4993,7 @@ UINT16 GetOverlapUnlockBackTime(const UINT16 overlapId, UINT16 OverlapUnLockCoun
/*自动解锁倒计时*/
deltCount = (INT32)(curCycleNum - startCycNum);
if((deltCount >= 0) && (deltCount <= (INT32)OverlapUnLockCount))/*倒计时数值在合理范围内*/
if((deltCount >= 0U) && (deltCount <= (INT32)OverlapUnLockCount))/*倒计时数值在合理范围内*/
{
autotimeData = (UINT16)(((OverlapUnLockCount + startCycNum - curCycleNum)* appCycTime)/1000U) ;
}
@@ -4944,7 +5007,7 @@ UINT16 GetOverlapUnlockBackTime(const UINT16 overlapId, UINT16 OverlapUnLockCoun
{
deltCount = (INT32)(curCycleNum - laborUnlockStartCycNum);
laborUnlockOverlapTimeCount =GetlabarUnlockOverlapTimeCount();
if((deltCount >= 0) && (deltCount <= (INT32)laborUnlockOverlapTimeCount))/*倒计时数值在合理范围内*/
if((deltCount >= 0U) && (deltCount <= (INT32)laborUnlockOverlapTimeCount))/*倒计时数值在合理范围内*/
{
labortimeData = (UINT16)(((laborUnlockOverlapTimeCount + laborUnlockStartCycNum- curCycleNum)* appCycTime)/1000U) ;
@@ -5722,6 +5785,8 @@ void VobcBackUpOutputProcess(void)
UINT8 chBackUpValid = 0U;/*备用通信有效标志*/
UINT8 cRcWorkMode = 0U;
cRcWorkMode = GetLocalRcWorkMode();
for (ii = 0U; ii < TRAIN_SUM_MAX; ii++)
{
wTrainId = GetTrainId(ii);
@@ -8217,7 +8282,6 @@ void SetSCApplyIndicator(const UINT16 wIndicatorId)
UINT8 chRtuCiType = 0U; /*虚拟联锁类型*/
UINT8 chIndicatorRtuId = 0U; /*虚拟联锁ID*/
UINT8 chinterfaceType = 0U; /*试车线与车辆段接口方式*/
UINT16 wApplyId = 0U; /*申请试车灯ID*/
UINT16 wApplyRelayId = 0U; /*申请试车继电器ID*/
UINT16 wAllowRelayId = 0U; /*允许试车灯ID*/
UINT8 chNonRouteState = 0U; /*非进路状态*/
@@ -8630,3 +8694,284 @@ void SetSCOverIndicator(const UINT16 wIndicatorId)
SetIndicatorState(wIndicatorId, INDICATOR_SHOW_SC_NO); /*设置申结束试车指示灯无效*/
}
}
/*
*
* void
*
* by lyj 20260314
*/
void VobcBlocLinkOutputProcess(void)
{
UINT16 wTrainId = 0U; /*列车ID*/
UINT8 chXiansuState = 0U; /*临时限速状态*/
UINT8 chlineIdentity = 0U; /*线路标识*/
UINT8 ii = 0U; /*循环变量*/
UINT8 chResult = 0U; /*临时承接变量*/
/*目前仅互联互通线路具备点连式接口*/
chlineIdentity = GetCiFunctionSwitchConfig(VOBC_INTERFACE_IDENTITY); /*获取线路标识*/
if (LINE_HLHT == chlineIdentity)
{
/*限速确认之后或者限速清除之后*/
chXiansuState = CheckLocalCiLSXSStata();
if (CI_SUCCESS == chXiansuState)
{
for (ii = 0U; ii < TRAIN_SUM_MAX; ii++)
{
wTrainId = GetTrainId(ii);
wTrainId = wTrainId & 0x00ffU;
/*先清除要发送列车的点连式信息,然后重新计算*/
ClearBlocLinkTrainInfo(wTrainId);
/*互联互通线路使用消息剩余有效期来判断CI与VOBC通信是否中断*/
chResult = GetHLHTHeadCtxValid(CI_SYSTEM_TYPE_VOBC, (UINT8)wTrainId);
if (CI_SUCCESS == chResult)
{
/*计算列车进路信息*/
chResult = BlocLinkTrainRouteMange(wTrainId);
/*计算列车逻辑区段信息*/
chResult &= BlocLinkTrainLogSecMange(wTrainId);
if (CI_SUCCESS != chResult)
{
/*清除要发送列车的点连式信息*/
ClearBlocLinkTrainInfo(wTrainId);
}
else
{
/*不做处理*/
}
}
else
{
/*不做处理*/
}
}
}
else
{
/*清除要发送列车的点连式信息*/
for (ii = 0U; ii < TRAIN_SUM_MAX; ii++)
{
wTrainId = GetTrainId(ii);
wTrainId = wTrainId & 0x00ffU;
ClearBlocLinkTrainInfo(wTrainId);
}
debug_infor_printf((const)"\nCheckLocalCiLSXSStata ERROR\n");
}
}
else
{
/*不做处理*/
}
}
/*
*
* const UINT16 wTrainId ID
*
* by lyj 20260316
*/
UINT8 BlocLinkTrainRouteMange(const UINT16 wTrainId)
{
UINT8 chRetVal = CI_ERROR;
struct_PathPoint end = { 0U }; /*列车逻辑终点*/
UINT16 wTempLogSecId = 0U; /*车头逻辑区段*/
UINT16 wLogSecRLockRouteId = 0U; /*逻辑区段锁闭所属进路*/
UINT8 chLocalCiId = 0U; /*本机联锁ID*/
UINT16 wRouteEndSigId = 0U; /*进路终端信号机ID*/
UINT8 chSigBelongCiId = 0U; /*信号机所属联锁ID*/
UINT8 chRouteType = 0U; /*进路类型*/
UINT16 wLastSectionId = 0U; /*进路最后一个物理区段*/
UINT16 wValidReturnSigId = 0U; /*有效折返信号机*/
UINT8 ii = 0U;
UINT16 wSigInFirstPhyId = 0U; /*信号机内方物理区段*/
UINT16 wTempRouteId = 0U;
UINT8 chTempRouteState = 0U;
UINT8 chRouteDir = 0U;
UINT8 chTrainDir = 0U;
UINT8 chLogSecLockState = 0U;
if ((0U < wTrainId) && (TRAIN_SUM_MAX > wTrainId))
{
/*车头位置*/
end.wLinkId = GetAblTrainMaxHeadLink(wTrainId);
end.dwOffset = GetAblTrainMaxHeadOffset(wTrainId);
/*判断车头所属逻辑区段是否锁闭*/
wTempLogSecId = GetPointBelongLogSec(end);
wLogSecRLockRouteId = GetLogSecLockBelongRoute(wTempLogSecId);
chLogSecLockState = GetLogSecLockState(wTempLogSecId);
chRouteType = GetRouteType(wLogSecRLockRouteId);
if ((LOG_SECTION_LOCK_NORMAL == chLogSecLockState) && (0U < wLogSecRLockRouteId) && (ROUTE_SUM_MAX > wLogSecRLockRouteId) && (ROUTE_TYPE_DIAOCHE != chRouteType))
{
chRetVal = CI_SUCCESS;
/*记录脚下进路*/
SetBlocLinkRouteData(wTrainId, wLogSecRLockRouteId);
chLocalCiId = GetSystemParaLocalCiId();
for (ii = 0U; ii < (CI_VOBC_ROUTE_MAX -1U); ii++)
{
wRouteEndSigId = GetRouteEndSignalId(wLogSecRLockRouteId);
chSigBelongCiId = GetSignalBelongCiId(wRouteEndSigId);
if (chLocalCiId == chSigBelongCiId)
{
/*进路终端信号机所属联锁是本联锁,继续匹配*/
chRouteType = GetRouteType(wLogSecRLockRouteId);
if (ROUTE_TYPE_RETURN == chRouteType)
{
wLastSectionId = GetRouteLastPhySectionId(wLogSecRLockRouteId); /*获取进路最后一个物理区段*/
wValidReturnSigId = GetValidReturnSinalId(wLogSecRLockRouteId, wLastSectionId); /*有效折返信号机*/
wRouteEndSigId = wValidReturnSigId;
}
else
{
/*直通进路-直接获取终端信号机*/
wRouteEndSigId = GetRouteEndSignalId(wLogSecRLockRouteId);
}
/*进路开放并且不是调车进路*/
wSigInFirstPhyId = GetSignalInFirstLockedPhySecId(wRouteEndSigId);
wTempRouteId = GetPhySecRLockBelongRouteId(wSigInFirstPhyId);
chTempRouteState = GetRouteState(wTempRouteId);
chRouteDir = GetRouteConfigDirection(wTempRouteId);
chTrainDir = GetAblTrainDir(wTrainId);
if (((ROUTE_STATE_YUXIAN_OPEN == chTempRouteState) || (ROUTE_STATE_NEAR_OPEN == chTempRouteState)) && (chRouteDir == chTrainDir) && (ROUTE_TYPE_DIAOCHE != chRouteType))
{
/*进路状态是接近开放或者预先开放(不匹配引导进路);列车换端之后再匹配折出进路*/
SetBlocLinkRouteData(wTrainId, wTempRouteId);
wLogSecRLockRouteId = wTempRouteId;
}
else
{
break;
}
}
else
{
break;
}
}
}
else
{
/*不匹配进路*/
}
}
else
{
/*不处理*/
}
return chRetVal;
}
/*
*
* const UINT16 wTrainId ID
*
* by lyj 20260316
*/
UINT8 BlocLinkTrainLogSecMange(const UINT16 wTrainId)
{
/*计算列车逻辑区段--车脚下以及车头所处进路(往终端信号机)剩下的全部逻辑区段*/
struct_PathPoint start = { 0U }; /*列车逻辑起点*/
struct_PathPoint end = { 0U }; /*列车逻辑终点*/
UINT8 chRetVal = CI_ERROR;
UINT16 wTrainLogSecSum = 0U; /*列车逻辑区段数量*/
UINT16 wTrainLogSecBuf[TRAIN_ABL_LOGSEC_SUM] = { 0U }; /*列车逻辑区段ID*/
UINT16 wTempLogSecId = 0U; /*车头逻辑区段*/
UINT16 wLogSecRLockRouteId = 0U; /*逻辑区段锁闭所属进路*/
UINT16 wRouteLogSectionSum = 0U; /*进路逻辑区段数量*/
UINT16* pRouteLogSectionIdBuf = NULL; /*进路逻辑区段数组*/
UINT16 ii = 0U;
UINT16 jj = 0U;
UINT8 chFlag = 0U; /*开始记录进路的标志*/
/*车尾位置*/
start.wLinkId = GetAblTrainMinTailLink(wTrainId);;
start.dwOffset = GetAblTrainMinTailOffset(wTrainId);
/*车头位置*/
end.wLinkId = GetAblTrainMaxHeadLink(wTrainId);
end.dwOffset = GetAblTrainMaxHeadOffset(wTrainId);
/*获取车脚下逻辑区段*/
chRetVal = GetLogSecBtwTwoPoints(start, end, &wTrainLogSecSum, wTrainLogSecBuf);
if (CI_SUCCESS == chRetVal)
{
/*查车头所在进路的所有逻辑区段*/
wTempLogSecId = GetPointBelongLogSec(end); /*车头逻辑区段*/
wLogSecRLockRouteId = GetLogSecLockBelongRoute(wTempLogSecId); /*逻辑区段锁闭所属进路*/
wRouteLogSectionSum = GetRouteLogSectionSum(wLogSecRLockRouteId); /*进路逻辑区段数量*/
pRouteLogSectionIdBuf = GetRouteLogSectionIdBuf(wLogSecRLockRouteId); /*进路逻辑区段数组*/
if (TRAIN_ABL_LOGSEC_SUM > (wTrainLogSecSum + wRouteLogSectionSum))
{
if (NULL != pRouteLogSectionIdBuf)
{
for (ii = 0U; ii < wRouteLogSectionSum; ii++)
{
/*查进路的所有逻辑区段,查到了车头所在逻辑区段位置,往后开始记录逻辑区段*/
if ((wTempLogSecId == pRouteLogSectionIdBuf[ii]) && (0U == chFlag))
{
chFlag = 1U;
for (jj = 0U; jj < wTrainLogSecSum; jj++)
{
if (wTempLogSecId == wTrainLogSecBuf[jj])
{
break; /*车头已存入,不再存*/
}
}
/*车头未存入,需要存一次*/
if ((jj == wTrainLogSecSum) && (TRAIN_ABL_LOGSEC_SUM > wTrainLogSecSum))
{
wTrainLogSecBuf[wTrainLogSecSum] = pRouteLogSectionIdBuf[ii];
wTrainLogSecSum++;
}
}
else
{
/*继续查找*/
}
/*找到了车头,开始存,车头所在逻辑区段已存入,不再存入*/
if ((1U == chFlag) && (TRAIN_ABL_LOGSEC_SUM > wTrainLogSecSum) && (wTempLogSecId != pRouteLogSectionIdBuf[ii]))
{
wTrainLogSecBuf[wTrainLogSecSum] = pRouteLogSectionIdBuf[ii];
wTrainLogSecSum++;
}
else
{
/*继续查找*/
}
}
SetBlocLinkOccLogSecData(wTrainId, wTrainLogSecSum, wTrainLogSecBuf);
}
else
{
chRetVal = CI_ERROR;
}
}
else
{
chRetVal = CI_ERROR;/*进路逻辑区段超标*/
}
}
else
{
/*不处理*/
}
return chRetVal;
}
+23
View File
@@ -524,6 +524,29 @@ void SetSCAllowIndicator(const UINT16 wIndicatorId);
* by lyj 20260106
*/
void SetSCOverIndicator(const UINT16 wIndicatorId);
/*
* 功能描述: 处理点连式列车发送数据信息
* 参数说明: void
* 返回值
* by lyj 20260314
*/
void VobcBlocLinkOutputProcess(void);
/*
* 功能描述: 处理点连式列车进路信息
* 参数说明: const UINT16 wTrainId 列车ID
* 返回值 计算结果
* by lyj 20260316
*/
UINT8 BlocLinkTrainRouteMange(const UINT16 wTrainId);
/*
* 功能描述: 处理点连式列车逻辑区段信息
* 参数说明: const UINT16 wTrainId 列车ID
* 返回值 计算结果
* by lyj 20260316
*/
UINT8 BlocLinkTrainLogSecMange(const UINT16 wTrainId);
#ifdef __cplusplus
}
@@ -67,6 +67,7 @@
#define INDICATOR_TYPE_DOWNWASH_ALLOW_PASS ((UINT8)0x29) /* 降级模式洗车同意通过指示灯 */
#define INDICATOR_TYPE_DOWNWASH_APPLY ((UINT8)0x63) /* 降级模式洗车请求指示灯 */
#define INDICATOR_TYPE_DOWNWASH_PASS_APPLY ((UINT8)0x64) /* 降级模式反向通过请求指示灯 */
#define INDICATOR_TYPE_XDC_DCGDJ ((UINT8)0x65) /* 蓄电池供电报警指示灯 */
#define INDICATOR_TYPE_ATS_CONFIRM_RELAY_INTERFACE ((UINT8)0x27) /*相邻联锁继电接口确认状态指示灯*/
@@ -531,7 +531,7 @@ UINT8 ReadConfigureData(void)
g_ret = ReadReverseCutConfigData(LocalCiId, gstReverseCutCfgData);
if (-1 == g_ret)
{
rtnVal = 28u;/*读保护区段配置数据失败*/
rtnVal = 28u;/*读倒切配置数据失败-OC配置数据表单30*/
debug_infor_printf((const)"ReadReverseCutConfigData fail.");
}
else if (0 < g_ret)
@@ -810,6 +810,25 @@ UINT8 ReadConfigureData(void)
; /*不处理*/
}
if (0u == rtnVal)
{
g_ret = ReadReverseSwitchConfigData(LocalCiId, &gLocalReverseData);
if (-1 == g_ret)
{
rtnVal = 39u;/*读板卡配置数据失败-OC配置数据表单40、41*/
debug_infor_printf((const)"ReadReverseSwitchConfigData fail.");
}
else
{
/*无操作*/
}
}
else
{
; /*不处理*/
}
if (0u == rtnVal)
{
/*读系统参数配置数据*/
@@ -1119,10 +1138,11 @@ UINT8 ReadConfigureData(void)
if (0u == rtnVal)
{
/*设置试车线与车辆段合设配置*/
g_ret = SetCldAndScxMergeConfig();
if (CI_ERROR == g_ret)
g_ret = (INT16)SetCldAndScxMergeConfig();
if (0 == g_ret)
{
debug_infor_printf((const)"SetCldAndScxMergeConfig fail.\r\n");
rtnVal = 44u;
}
}
@@ -2010,6 +2030,23 @@ INT8 OcConnectConfigDataToDevStruct(SignalConfigDataStruct* pSignalCfgData, Phys
pSignalCfgData[j].DxRelayId = pConnectCfgData[i].OcConnetRelayDataBuf[k].RelayId;
pSignalCfgData[j].DxDrvRelayId = pConnectCfgData[i].OcConnetRelayDataBuf[k].DrvRelayId;
}
else if (SIGNAL_DJ_TYPE == pConnectCfgData[i].OcConnetRelayDataBuf[k].RelayType)
{
pSignalCfgData[j].FirDsRelayId = pConnectCfgData[i].OcConnetRelayDataBuf[k].RelayId;
pSignalCfgData[j].wFirstDsDrvRelayId = pConnectCfgData[i].OcConnetRelayDataBuf[k].DrvRelayId;
}
else if (SIGNAL_MAINJ_TYPE == pConnectCfgData[i].OcConnetRelayDataBuf[k].RelayType)
{
pSignalCfgData[j].wMainDrvRelayId = pConnectCfgData[i].OcConnetRelayDataBuf[k].DrvRelayId;
}
else if (SIGNAL_ACKJ_TYPE == pConnectCfgData[i].OcConnetRelayDataBuf[k].RelayType)
{
pSignalCfgData[j].wAckDrvRelayId = pConnectCfgData[i].OcConnetRelayDataBuf[k].DrvRelayId;
}
else if (SINNAL_CMAINJ_TYPE == pConnectCfgData[i].OcConnetRelayDataBuf[k].RelayType)
{
pSignalCfgData[j].wCMainDrvRelayId = pConnectCfgData[i].OcConnetRelayDataBuf[k].DrvRelayId;
}
else
{
; /*不处理*/
+52 -13
View File
@@ -683,6 +683,7 @@ UINT8 InitialSignalData(void)
SignalDataStruCC[signalId].cSleepTrainLightUpFlag = SIGNAL_SLEEP_TRAIN_LIGHTUP_NO; /*初始化休眠车点亮信号机标志无效*/
SignalDataStruCC[signalId].LightExtinctState = SIGNAL_LIGHT_EXTICT_STATE_YES; /*信号机亮灭状态CC(0x55:灭灯,0xaa:亮灯)*/
SignalDataStruCC[signalId].SignalCrossState = SIGNAL_CROSS_STATE_NO; /*通信车跨压通过信号机状态CC(0x55:未跨压,0xaa:跨压)*/
SignalDataStruCC[signalId].wCrossTacsTrainId = 0u; /*通信车跨压通过信号机TACS主控列车ID*/
/*初始化ZC发送的信号机动态数据*/
gZcToCiDymDataStru.szSignalDataStruZc[signalId].SignalId = signalId;
@@ -733,9 +734,11 @@ UINT8 InitialWashMachineData(void)
WashMachineDataStru[washMachinelId].TrainEmergencyStopState = WASHMACHINE_COL_FALUT_YES;
WashMachineDataStru[washMachinelId].HeadWashAllowState = WASHMACHINE_COL_HEADWASH_NO;
WashMachineDataStru[washMachinelId].TailWashAllowState = WASHMACHINE_COL_TAILWASH_NO;
WashMachineDataStru[washMachinelId].chCoupingWashAllowState = WASHMACHINE_COL_COUPINGWASH_NO;
WashMachineDataStru[washMachinelId].WashTrainRequestDrvState = WASHMACHINE_DRVSTATE_REQ_FALSE;
WashMachineDataStru[washMachinelId].TrainHeadStopSteadyDrvState = WASHMACHINE_HEAD_STEADY_NO;
WashMachineDataStru[washMachinelId].TrainTailStopSteadyDrvState = WASHMACHINE_TAIL_STEADY_NO;
WashMachineDataStru[washMachinelId].chCoupingStopSteadyDrvState = WASHMACHINE_COUPING_STEADY_NO;
WashMachineDataStru[washMachinelId].TrainOutWashTrainPortAllowState = WASHMACHINE_COL_OUT_NO;
WashMachineDataStru[washMachinelId].PauseTrainWashRequestDrvState = WASHMACHINE_PAUSE_DRVREQ_FALSE;
WashMachineDataStru[washMachinelId].PaseWashMachineRequesDrvtState = PASS_WASHMACHINE_DRVREQ_FALSE;
@@ -787,6 +790,9 @@ UINT8 InitialSwitchData(void)
UINT16 ii = 0u; /*游标*/
UINT16 jj = 0u; /*游标*/
UINT8 reVal = CI_ERROR;
UINT8 chSwitchIncludeOcNum = 0U;
UINT8 ocId = 0u;
UINT8 kk = 0u;
switchDataSum = GetTotalSwitchCurNum(); /*本联锁和相邻联锁发送给本联锁的道岔总数目*/
/*数值大于SWITCH_SUM_MAX会返回0*/
@@ -847,6 +853,35 @@ UINT8 InitialSwitchData(void)
{
SwitchDataStru[switchId].szSwitchIncldeZzjState[jj] = OC_SWITCH_POSITION_SIKAI;
}
chSwitchIncludeOcNum = GetSwitchIncludeOcNum(switchId);
SwitchDataStru[switchId].chSwitchBelongOcNum = chSwitchIncludeOcNum;
for (jj = 0u; jj < chSwitchIncludeOcNum; jj++)
{/*从静态数据读取OCID赋值给动态数据*/
ocId = GetSwitchIncludeOCId(switchId, jj);
SwitchDataStru[switchId].belongOCData[jj].OcId = ocId;
SwitchDataStru[switchId].belongOCData[jj].OutControlCmd = STANDBY_CONTROL;
SwitchDataStru[switchId].belongOCData[jj].PlusBoxSate = SWITCH_BOX_FAULT;
for (kk = 0u; kk < MAX_OC_SWITCH_INCLUDE_BOARD_NUM; kk++)
{
SwitchDataStru[switchId].belongOCData[jj].BoardStateBuf[kk] = SWITCH_BOARD_FAULT;
}
SwitchDataStru[switchId].belongOCData[jj].controlMode = STANDBY_CONTROL;
SwitchDataStru[switchId].belongOCData[jj].FindCmdStartCycNum = 0u;
SwitchDataStru[switchId].belongOCData[jj].FindPostionCmd = NO_FIND_CMD;
SwitchDataStru[switchId].belongOCData[jj].OutMainControlCmdCycNum = 0u;
}
for (jj = 0u; jj < SWITCH_REDUN_COLL_MAX; jj++)
{
SwitchDataStru[switchId].RedunCollData[jj].dwRedunJudgHunXianStCyc = 0u;
SwitchDataStru[switchId].RedunCollData[jj].dwRedunRealHunXianStCyc = 0u;
SwitchDataStru[switchId].RedunCollData[jj].cHunXianRecovStt = REDUN_HX_RECOV_ALL;
SwitchDataStru[switchId].RedunCollData[jj].dwRedunFaultStCyc = 0u;
SwitchDataStru[switchId].RedunCollData[jj].cCollPos = SWITCH_POSITION_INVALID;
SwitchDataStru[switchId].RedunCollData[jj].cCombineStt = 0u;
SwitchDataStru[switchId].RedunCollData[jj].cCurrHunxianStt = RELAY_HUNXIAN_STATE_NO;
}
}
reVal = CI_SUCCESS;
return reVal;
@@ -1044,6 +1079,7 @@ UINT8 InitialLogicSectionData(void)
UINT16 ii = 0u; /*游标*/
UINT16 jj = 0u; /*游标*/
UINT8 kk = 0u; /*游标*/
UINT8 mm = 0u; /*游标*/
UINT16 zcToCiMaskSum = 0u; /*ZC-CI码位总数*/
UINT8 reVal = CI_ERROR;
UINT8 chTmcSwitch = 0u;
@@ -1088,7 +1124,8 @@ UINT8 InitialLogicSectionData(void)
LogicSectionDataStru[logicSectionId].chLogicSpksFLockState = LOGIC_SECTION_SPKS_FLOCK_NO;/*仅用于ATS显示;逻辑区段不一定关联SPKS,如果初始化成封锁,无法获取SPKS状态,此逻辑区段会一直为封锁状态*/
LogicSectionDataStru[logicSectionId].chLinShiXianSuSetSpeed = 0U; /*逻辑区段临时限速设置速度值*/
LogicSectionDataStru[logicSectionId].chLogSecEmergXianSu = LOGSEC_EMERG_XS_SET_NO; /*逻辑区段紧急临时限速*/
LogicSectionDataStru[logicSectionId].chLogSecCbtcArbState = LGC_SECTION_ARB_NO;
LogicSectionDataStru[logicSectionId].chLogSecPbTacsArbState = LGC_SECTION_ARB_NO;
/*初始化车车结构体成员*/
LogicSectionDataStruCC[logicSectionId].LogicSectionId = logicSectionId;
LogicSectionDataStruCC[logicSectionId].chResShareFlag = LOGIC_SECTION_RES_SHARE_NO;
@@ -1101,14 +1138,10 @@ UINT8 InitialLogicSectionData(void)
LogicSectionDataStruCC[logicSectionId].LogErrlockStartCycNum = 0U;
LogicSectionDataStruCC[logicSectionId].chAblRelLogSecUsableFlag = LOGIC_ABLNEAR_USE_FLAG_NO; /*初始化ABL接近逻辑区段可用标志*/
LogicSectionDataStruCC[logicSectionId].cRouteLeaveLogFlag = LOGSEC_LEAVE_LOGSEC_REPLY_NO; /*离去区段ABL列车检查不通过*/
for (jj = 0U; jj < LOGIC_SECTION_RES_SUM_MAX; jj++)
for (mm = 0U; mm < LOGIC_SECTION_RES_SUM_MAX; mm++)
{
LogicSectionDataStruCC[logicSectionId].szTrainResData[jj].wTrainId = 0U;
LogicSectionDataStruCC[logicSectionId].szTrainResData[jj].chLogicResUsable = LOGIC_SECTION_RES_UNUSABLE;
LogicSectionDataStruCC[logicSectionId].szTrainResData[jj].chLogicReturnState = LOGIC_SECTION_TRAIN_RETURN_NO;
LogicSectionDataStruCC[logicSectionId].szTrainResData[jj].chTrainApplyState = LOGIC_SECTION_TRAIN_APPLY_NO;
LogicSectionDataStruCC[logicSectionId].szTrainResData[jj].chLogicUnlockState = LOGIC_SECTION_TRAIN_UNLOCK_NO;
LogicSectionDataStruCC[logicSectionId].szTrainResData[jj].dwRcvUnlockCmdCyc = 0U;
/*重置资源信息结构体*/
ResetResInfoStruct(logicSectionId, mm);
}
LogicSectionDataStruCC[logicSectionId].chLogSecLockBelLogRouteSum = 0U;
for (jj = 0U; jj < LOGSEC_RELATE_ROUTE_SUM_MAX; jj++)
@@ -1472,7 +1505,7 @@ UINT8 InitialPsdData(void)
PsdDataStru[psdId].psdOpenErrState = PSD_OPEN_CLOSE_ERROR;
PsdDataStru[psdId].psdCloseErrState = PSD_OPEN_CLOSE_ERROR;
PsdDataStru[psdId].cPsdExceptOpenState = PSD_EXCEPT_OPEN_YES; /*初始化为PSD异常打开*/
PsdDataStru[psdId].cPsdExceptOpenState = PSD_EXCEPT_NO; /*初始化为PSD异常*/
PsdDataStru[psdId].dwPsdRelayDownCycNum = 0U; /*PSD门关继电器落下起始周期*/
PsdDataStru[psdId].JXTCMutualLockFaultState = JXTC_MUTUALLOCKFAULT_NO;
PsdDataStru[psdId].JXTCMutualLockStartCycNum = 0u;
@@ -1493,6 +1526,8 @@ UINT8 InitialPsdData(void)
{
PsdDataStru[psdId].ibpButtonState = PSD_RELATED_BUTTON_STATE_DEFAULT; /*IBP盘发车按钮状态初始化*/
}
/*初始化零速状态*/
PsdDataStru[psdId].chTrainZeroSpeedState = PSD_TRAIN_ZERO_SPEED_YES; /*零速*/
}
reVal = CI_SUCCESS;
return reVal;
@@ -1695,6 +1730,8 @@ UINT8 InitialRouteData(void)
RouteDataStru[routeId].chCouplinkSuccessFlag = ROUTE_COUPLINK_RESULT_NOT; /*初始化联挂成功标志为未收到*/
RouteDataStru[routeId].chCouplinkErrorFlag = ROUTE_COUPLINK_RESULT_NOT; /*初始化联挂失败标志为未收到*/
RouteDataStru[routeId].dwRouteIdleCycNum = 0U; /*进路空闲起始周期号*/
RouteDataStru[routeId].chRouteConnReleaseFlag = ROUTE_CONNECT_RELEASE_NO; /*进路联络线解锁标志*/
/*初始化车车结构体成员*/
RouteDataStruCC[routeId].RouteId = routeId;
@@ -2322,6 +2359,8 @@ void ResetDynamicState(const UINT8 ciId)
LogicSectionDataStruCC[logicSectionId].cRouteLeaveLogFlag = LOGSEC_LEAVE_LOGSEC_REPLY_NO; /*离去区段ABL列车检查不通过*/
LogicSectionDataStru[logicSectionId].chLogicProResUsable = LOGIC_SECTION_PRO_RES_UNUSABLE;
LogicSectionDataStru[logicSectionId].chLogSecEmergXianSu = LOGSEC_EMERG_XS_SET_YES; /*逻辑区段紧急临时限速设置状态*/
LogicSectionDataStru[logicSectionId].chLogSecCbtcArbState = LGC_SECTION_ARB_NO;
LogicSectionDataStru[logicSectionId].chLogSecPbTacsArbState = LGC_SECTION_ARB_NO;
}
else
{
@@ -2374,7 +2413,7 @@ void ResetDynamicState(const UINT8 ciId)
PsdDataStru[devId].PsdState = PSD_STATE_CLOSE;
}
PsdDataStru[devId].MutualLockRemoveState = PSD_MUTUALLOCK_REMOVE_NO;
PsdDataStru[devId].cPsdExceptOpenState = PSD_EXCEPT_OPEN_YES; /*重置为PSD异常打开*/
PsdDataStru[devId].cPsdExceptOpenState = PSD_EXCEPT_YES; /*重置为PSD异常*/
}
}
@@ -2565,7 +2604,7 @@ void ResetDynamicState(const UINT8 ciId)
devId = (ii);
devLen = (UINT16)sizeof(OverlapDataStruct);
chOverlapCiId = GetOverlapBelongCiId(devId);
if((chOverlapCiId == ciId) && (devId > 0u) && (devId < OVERLAP_SUM_MAX))
if((chOverlapCiId == ciId))
{
OverlapDataStru[devId].BelongRouteId = 0u;
OverlapDataStru[devId].UnlockStartCycNum = 0u;
@@ -2586,7 +2625,7 @@ void ResetDynamicState(const UINT8 ciId)
OverlapDataStru[devId].chPreLaborUnlockState = PRO_PRE_LABOR_UNLOCK_STATE_NO;
OverlapDataStru[devId].dwAtsLastTimeLockCyc = 0U;
}
else if ((chOverlapCiId == localCi) && (devId > 0U) && (devId < OVERLAP_SUM_MAX))
else if ((chOverlapCiId == localCi))
{
cOverlapRelProSwNum = GetOverlapRelatedProtSwitSum(devId); /*获取保护区段关联的防护道岔信息*/
pOverlapRelProSwStru = GetOverlapRelatedProtSwitStru(devId);
@@ -3411,7 +3450,7 @@ void ResetLocalRcDynamicState(void)
if (cBelongCiId == cLocalCiId)
{
SetSignalLightExtinctStateCC(wSignalId, SIGNAL_LIGHT_EXTICT_STATE_YES); /*设置RC信号机亮灭状态为亮灯*/
SetSignalCrossStateCC(wSignalId, SIGNAL_CROSS_STATE_NO); /*设置RC信号机跨压状态为未跨压*/
SetSignalCrossStateCC(wSignalId, SIGNAL_CROSS_STATE_NO, 0u); /*设置RC信号机跨压状态为未跨压*/
}
else
{
@@ -14,7 +14,7 @@
#ifndef __INVADESECTION_DEFINE_H_
#define __INVADESECTION_DEFINE_H_
#define INVA_SECT_N_COND_SWIT_SUM_MAX ((UINT16)400) /*侵限区段与相关条件道岔数据条目最大数量*/
#define INVA_SECT_N_COND_SWIT_SUM_MAX ((UINT16)800) /*侵限区段与相关条件道岔数据条目最大数量*/
#define COND_SWITCH_SUM_MAX ((UINT16)16) /*单一侵限区段与相关条件道岔数据条目内,条件道岔最大数量*/
@@ -20,7 +20,7 @@
#define LIGHTTESTBUTTON_LIGHT_MAX_NUM ((UINT8)13U)
/* 试灯表示灯支持最大数 */
#define LIGHTTESTBUTTON_LIGHT_SUPPORT_MAX_NUM ((UINT8)39U)
#define LIGHTTESTBUTTON_LIGHT_SUPPORT_MAX_NUM ((UINT8)208U)
/* 试灯按钮可配置最大数量 */
#define LIGHTTESTBUTTON_BUTTON_MAX_NUM ((UINT16)70U)
+111 -1
View File
@@ -13,6 +13,7 @@
#include "LogRecord.h"
#include "../ParsePack/ParsePackVobcData.h"
#include "../ParsePack/ParsePackZcData.h"
#include <stdarg.h>
@@ -497,6 +498,7 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
OCStationIndicDataStru* pNewOCStationIndicData = GetOCStationIndicDataStru();
EsbDataStruct* pNewEsbData = GetEsbData();
LogicalRouteDataStruct* pNewLogicalRouteDataStru = GetLogicalRouteStr();
CbtcCrossStructZC* pCbtcCrossStructZCStru = GetCbtcCrossStructZc();
UINT16 wCfpId = 0u;
UINT8 chEnIndex = 0u;
UINT8 chTrainIndex = 0u;
@@ -505,6 +507,7 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
UINT16 wNonAutoReturnCurSum = 0U;/*无人折返按钮当前总数*/
NonAutoReturnDataStruct* pNonAutoReturnData = NULL; /*无人折返数据结构体指针*/
NonAutoReturnDataStructCC* pNonReturnDataStruCC = NULL; /*无人折返数据结构体指针-CC*/
UINT8 chThisOCBoardState = 0U;
/*************************************打印物理区段数据********************************************/
/*打印区段数据*/
@@ -701,6 +704,7 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
outString[outStringLength++] = newSignalData[deviceId].DoubleGreenDsBreakFlag;/*双绿灯丝断丝标志状态*/
outString[outStringLength++] = newSignalData[deviceId].DoubleYellowDsBreakFlag;/*双黄灯丝断丝标志状态*/
outString[outStringLength++] = newSignalData[deviceId].MaintainLightState;/*信号机维修点灯状态*/
outString[outStringLength++] = pSignalDataCC[deviceId].wCrossTacsTrainId;/*TACS跨压列车ID*/
if (MAX_SIGNAL_LIGHTUPLINK_NUM < pSignalDataCC[deviceId].wSignalLightUpLinkIdSum)
{
@@ -955,6 +959,56 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
outString[outStringLength++] = newSwitchData[deviceId].chSwitchJichaState; /*道岔挤岔状态*/
LongToChar(newSwitchData[deviceId].SwitchCollTolerateCycNum, &outString[outStringLength]);/*容忍周期号*/
outStringLength += 4u;
LongToChar(newSwitchData[deviceId].SwitchOutputDrvCmdCycNum, &outString[outStringLength]);/*驱动起始周期*/
outStringLength += 4u;
outString[outStringLength++] = newSwitchData[deviceId].mainControlOcId;/*主控OC*/
outString[outStringLength++] = newSwitchData[deviceId].chSwitchBelongOcNum;/*道岔所属OC数*/
for (jj = 0U; jj < newSwitchData[deviceId].chSwitchBelongOcNum; jj++)
{
outString[outStringLength++] = newSwitchData[deviceId].belongOCData[jj].OcId;/*道岔所属OC*/
outString[outStringLength++] = newSwitchData[deviceId].belongOCData[jj].controlMode;/*OC当前主控状态*/
outString[outStringLength++] = newSwitchData[deviceId].belongOCData[jj].OutControlCmd;/*发送OC当前主控命令*/
outString[outStringLength++] = newSwitchData[deviceId].belongOCData[jj].PlusBoxSate;/*插箱状态*/
chThisOCBoardState = GetSwitchThisOCBoardState(deviceId, newSwitchData[deviceId].belongOCData[jj].OcId);
outString[outStringLength++] = chThisOCBoardState;/*双系板卡故障状态*/
LongToChar(newSwitchData[deviceId].belongOCData[jj].OutMainControlCmdCycNum, &outString[outStringLength]);/*升主控命令周期*/
outStringLength += 4u;
outString[outStringLength++] = newSwitchData[deviceId].belongOCData[jj].FindPostionCmd;/*寻表命令*/
LongToChar(newSwitchData[deviceId].belongOCData[jj].FindCmdStartCycNum, &outString[outStringLength]);/*寻表命令起始周期*/
outStringLength += 4u;
}
outString[outStringLength++] = newSwitchData[deviceId].PLockedAxisSecNum;/*被防护锁闭的计轴区段ID*/
for (jj = 0; jj < SWITCH_MAX_PROTECT_LOCKED_NUM; jj++)
{
ShortToChar(newSwitchData[deviceId].PLockedAxisSecIdArr[jj], &outString[outStringLength]);
outStringLength += 2u;
}
outString[outStringLength] = newSwitchData[deviceId].cMainOcCollPos;
outStringLength += 1u;
for (jj = 0u; jj < SWITCH_REDUN_COLL_MAX; jj++)
{
LongToChar(newSwitchData[deviceId].RedunCollData[jj].dwRedunJudgHunXianStCyc, &outString[outStringLength]);
outStringLength += 4u;
LongToChar(newSwitchData[deviceId].RedunCollData[jj].dwRedunRealHunXianStCyc, &outString[outStringLength]);
outStringLength += 4u;
outString[outStringLength] = newSwitchData[deviceId].RedunCollData[jj].cHunXianRecovStt;
outStringLength += 1u;
LongToChar(newSwitchData[deviceId].RedunCollData[jj].dwRedunFaultStCyc, &outString[outStringLength]);
outStringLength += 4u;
outString[outStringLength] = newSwitchData[deviceId].RedunCollData[jj].cCombineStt;
outStringLength += 1u;
outString[outStringLength] = newSwitchData[deviceId].RedunCollData[jj].cCollPos;
outStringLength += 1u;
outString[outStringLength] = newSwitchData[deviceId].RedunCollData[jj].cCurrHunxianStt;
outStringLength += 1u;
}
}
}
else
@@ -1173,6 +1227,7 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
outString[outStringLength++] = newRouteData[deviceId].chRoutCouplinkFlag; /*进路联挂标志*/
outString[outStringLength++] = newRouteData[deviceId].chCouplinkSuccessFlag; /*进路联挂成功*/
outString[outStringLength++] = newRouteData[deviceId].chCouplinkErrorFlag; /*进路联挂失败*/
outString[outStringLength++] = newRouteData[deviceId].chRouteConnReleaseFlag; /*进路联络线解锁标志*/
}
}
else
@@ -1344,6 +1399,9 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
outStringLength++;
outString[outStringLength] = pLogicSecDataCC[deviceId].TXOccupyState;/*逻辑区段通信车占用状态CC(0x55-无车或非通信车占用,0xAA-通信车占用)*/
outStringLength++;
outString[outStringLength++] = newLogicSecData[deviceId].chLogSecCbtcArbState;/*逻辑区段CBTC_ARB状态*/
outString[outStringLength++] = newLogicSecData[deviceId].chLogSecPbTacsArbState;/*逻辑区段PB_TACS_ARB状态*/
outString[outStringLength++] = newLogicSecData[deviceId].chArbState;/*逻辑区段ARB状态*/
outString[outStringLength++] = newLogicSecData[deviceId].LogLockState;/*逻辑区段锁闭状态*/
outString[outStringLength++] = newLogicSecData[deviceId].LogLockDir;/*逻辑区段锁闭方向*/
outString[outStringLength++] = pLogicSecDataCC[deviceId].chResShareFlag;/*逻辑区段共享标志 0x55共享 0xAA非共享*/
@@ -1485,9 +1543,12 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
outString[outStringLength++] = newWashMachineData[deviceId].TrainEmergencyStopState;/*列车紧急停车状态*/
outString[outStringLength++] = newWashMachineData[deviceId].HeadWashAllowState;/*允许车头清洗状态*/
outString[outStringLength++] = newWashMachineData[deviceId].TailWashAllowState;/*允许车尾清洗状态*/
outString[outStringLength++] = newWashMachineData[deviceId].chCoupingWashAllowState;/*允许联挂端清洗状态*/
outString[outStringLength++] = newWashMachineData[deviceId].WashTrainRequestDrvState;/*洗车请求驱动状态*/
outString[outStringLength++] = newWashMachineData[deviceId].TrainHeadStopSteadyDrvState;/*车头停稳驱动状态*/
outString[outStringLength++] = newWashMachineData[deviceId].TrainTailStopSteadyDrvState;/*车尾停稳驱动状态*/
outString[outStringLength++] = newWashMachineData[deviceId].chCoupingStopSteadyDrvState; /*联挂端停稳驱动状态*/
outString[outStringLength++] = newWashMachineData[deviceId].TrainOutWashTrainPortAllowState;/*允许出洗车库状态*/
ShortToChar(newWashMachineData[deviceId].CurVobcId, &outString[outStringLength]);/*当前洗车的VOBC ID*/
outStringLength += 2u;
@@ -1667,6 +1728,8 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
outString[outStringLength++] = newPsdData[deviceId].ibpButtonState;/*IBP盘发车按钮状态*/
LongToChar(newPsdData[deviceId].IBPPressCycNum, &outString[outStringLength]); /*IBP盘发车按钮按下周期*/
outStringLength += 4U;
outString[outStringLength] = newPsdData[deviceId].chTrainZeroSpeedState; /*非零速状态*/
outStringLength++;
}
}
else
@@ -2411,6 +2474,17 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
outString[outStringLength++] = pNewTrainInfoData[deviceId].chtrainControlMode;/*当前控车模式*/
outString[outStringLength++] = pNewTrainInfoData[deviceId].chTrainPostionMode; /*列车位置模式,0无位置,1使用IVOC位置,2使用VOBC位置*/
ShortToChar(pNewTrainInfoData[deviceId].wMinSafeHeadLink, &outString[outStringLength]);/*延时小前所处link*/
outStringLength += 2u;
LongToChar(pNewTrainInfoData[deviceId].dwMinSafeHeadOffset, &outString[outStringLength]);/*延时小前所处link偏移量*/
outStringLength += 4u;
outString[outStringLength++] = pNewTrainInfoData[deviceId].chMinSafeHeadDir;/* 延时小前方向 */
outString[outStringLength] = pNewTrainInfoData[deviceId].chPbtacsTransState; /*RC与PBTACS列车通信状态:0x55-通信正常,0xAA-通信中断,0xFF-未知*/
outStringLength++;
LongToChar(pNewTrainInfoData[deviceId].dwPbtacsTransBadCyc, &outString[outStringLength]); /*RC与PBTACS列车通信中断周期*/
outStringLength += 4U;
}
@@ -2879,10 +2953,46 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
else
{
#ifdef PLATFORM_2OO2
debug_infor_printf((const)"\nNonAutoReturnData:%d", (UINT16)sizeof(NonAutoReturnDataStruct), outStringLength);
debug_infor_printf((const)"\nNonAutoReturnData:%d, length:%d", (UINT16)sizeof(NonAutoReturnDataStruct), outStringLength);
debug_out_array(0xAA, outString, outStringLength);
#endif
/*清空打印数据*/
CleanString(outString);
outStringLength = 0u;
}
/*************************************打印CBTC跨压数据********************************************/
/*打印CBTC跨压数据*/
deviceNum = GetCbtcCrossNumZc();/* 获取边界点数量 */
for (ii = 0U; ii < deviceNum; ii++)
{
if ((CI_SUCCESS != returnValue) || (NULL == pCbtcCrossStructZCStru))
{
returnValue = CI_ERROR;
break;
}
ShortToChar(pCbtcCrossStructZCStru[ii].wSignalId, &outString[outStringLength]);/*CBTC跨压信号机ID*/
outStringLength += 2u;
outString[outStringLength] = pCbtcCrossStructZCStru[ii].wTrainId; /*CBTC跨压列车ID*/
outStringLength++;
}
if (0u == outStringLength)
{
/*nothing*/
debug_infor_printf((const)"\nCbtcCrossData:0u");
}
else
{
#ifdef PLATFORM_2OO2
debug_infor_printf((const)"\nCbtcCrossData:%d:", outStringLength);
debug_out_array(0xAA, outString, outStringLength);
#endif
/*清空打印数据*/
@@ -595,7 +595,7 @@ void SetRouteRelProSwitchLockSta(const UINT16 routeId, const UINT8 lockCommand)
cSwitchCurPos = GetSwitchCurPosition(protectSwitchId);
cFuncRet = checkSwtLastValDrvPosStayorNot(protectSwitchId, routeProtectSwitchStru[ii].ProtectPosition);
if ((SWITCH_LOCK_PROTECT_CANCEL == lockCommand)
|| ((SWITCH_LOCK_PROTECT_SET == lockCommand) && (cSwitchCurPos == routeProtectSwitchStru[ii].ProtectPosition) && (CI_SUCCESS == cFuncRet)))
|| ((cSwitchCurPos == routeProtectSwitchStru[ii].ProtectPosition) && (CI_SUCCESS == cFuncRet)))
{
SetSwitchLockStatus(SWITCH_PLOCKTYPE_ROUTE, routeId, protectSwitchId, lockCommand); /*设置道岔防护锁闭状态*/
/*RC 13.0.0 修:不检查防护道岔中双动道岔另一端*/
@@ -1875,8 +1875,9 @@ void SetRouteOvlpOtherCiShrFlg(const UINT16 wRouteId, const UINT16 wOverlapId,co
void ClearSomeFlagDependRouteState(const UINT16 routeId)
{
UINT8 routeState = GetRouteState(routeId);
UINT16 startSignalId = 0u;
UINT16 EnginVehicCroCloBelongRoute = 0u;
UINT16 startSignalId = 0U;
UINT16 EnginVehicCroCloBelongRoute = 0U;
UINT8 chZrenjieFlag = 0U;
/*清理工程车跨压关信号所属进路,清理工程车跨压状态*/
if ((ROUTE_STATE_YUXIAN_LOCK != routeState)
@@ -1925,6 +1926,17 @@ void ClearSomeFlagDependRouteState(const UINT16 routeId)
{
/*不处理*/
}
/*无总人解标志且不处于延时解锁状态,清除联络线解锁标志*/
chZrenjieFlag = GetRouteZongRenJieFlag(routeId);
if ((ROUTE_ZONGRENJIE_SET_NO == chZrenjieFlag) && (ROUTE_STATE_DELAY_UNLOCK != routeState))
{
SetRouteConnectReleaseFlag(routeId, ROUTE_CONNECT_RELEASE_NO); /*清除联络线解锁标志*/
}
else
{
/*不处理*/
}
}
/*
File diff suppressed because it is too large Load Diff
@@ -1161,6 +1161,130 @@ void SetCouplinkRouteLogicManage(const UINT16 wRouteId);
*
*/
void lockSwitchLogicManage(void);
/*
*
* const UINT16 axisSecId, ID
* void
* add by mpt 20260407
*/
void AxisJumpLockStateManage(const UINT16 axisSectionId);
/*
* 使
*
* CI_SUCCESS 线 CI_ERROR
*/
UINT8 GetLocalCiIsScx(void);
/*
* 线
* const UINT16 wRouteId ID
*
* Create:lyj 20260603
*/
void ConnectRouteReleaseManage(const UINT16 wRouteId);
/*
* :
*
* void
* BY fan 20260602
*/
void AtsFollowUpCmdProcess(void);
/*
* :
*
* void
* BY fan 20260602
*/
void FollowUpDansuoCanclMsgProc(void);
/*
* : ,
*
UINT16 wDevId命令中设备
UINT16 wMsgType,
*
1
2
3
5
* BY fan 20260603
*/
UINT8 FollowUpDansuoCancleCheck(UINT16 wDevId, UINT16 wMsgType);
/*
* :
*
* void
* BY fan 20260602
*/
void FollowUpSwitchUnFlockMsgProc(void);
/*
* : ,
*
UINT16 wDevId命令中设备
UINT16 wMsgType,
*
1
2
3
5
* BY fan 20260603
*/
UINT8 FollowUpSwitchUnFlockCheck(UINT16 wDevId, UINT16 wMsgType);
/*
* :
*
* void
* BY fan 20260604
*/
void FollowUpSecUnFlockMsgProc(void);
/*
* : ,
*
UINT16 wDevId命令中设备
UINT16 wMsgType,
*
1
2
3
* BY fan 20260604
*/
UINT8 FollowUpSecUnFlockCheck(UINT16 wDevId, UINT16 wMsgType);
/*
* :
*
* void
* BY fan 20260604
*/
void FollowUpSignalUnFlockMsgProc(void);
/*
* : ,
*
UINT16 wDevId命令中设备
UINT16 wMsgType,
*
1
2
3
5
* BY fan 20260604
*/
UINT8 FollowUpSignalUnFlockCheck(UINT16 wDevId, UINT16 wMsgType);
/*
*
*
*
* Created By LQ 2026.06.09
*/
void OpenedRouteShareResPro(void);
#ifdef __cplusplus
}
@@ -3161,14 +3161,14 @@ static UINT8 OtherCiValidErrCheck(UINT16 const routeId)
{
if (psdIdBuf[j] == tmpOtherCiDevInfo->DevId)
{
cPsdExceptOpenState = GePsdExceptOpenState(tmpOtherCiDevInfo->DevId);
if (PSD_EXCEPT_OPEN_NO == cPsdExceptOpenState)
cPsdExceptOpenState = GePsdExceptState(tmpOtherCiDevInfo->DevId);
if (PSD_EXCEPT_NO == cPsdExceptOpenState)
{
toOpenCheckFlag = 1U; /*PSD未异常打开,设置可自动重开*/
toOpenCheckFlag = 1U; /*PSD未异常,设置可自动重开*/
}
else
{
toOpenCheckFlag = 0U; /*存在PSD异常打开,停止遍历,设置不可自动重开*/
toOpenCheckFlag = 0U; /*存在PSD异常,停止遍历,设置不可自动重开*/
break;
}
}
@@ -3702,6 +3702,7 @@ static UINT8 OpenBlocRouteOverlapErrCheck(const UINT16 routeId)
else
{
/* zt 删除单轨相关代码 2022-02-15 */
reResult = CI_ERROR;
}
/*保护区段 内所有道岔【未封锁】*/
@@ -4171,12 +4172,15 @@ static UINT8 KeepCbtcRouteSectionErrCheck(const UINT16 routeId)
UINT8 preLogDevState = 0u; /*之前逻辑区段占用状态*/
UINT8 LogSecCurCtOrUtOcc = 0U; /*逻辑区段当前占用状态*/
UINT8 cLocalCiType = 0U; /*本控区类型*/
UINT8 chRouteBelongVirCiId = 0U;
rcWorkMode = GetLocalRcWorkMode();
/* 联锁逻辑检查 */
reResult = CI_SUCCESS;
cLocalCiType = GetLocalCiType();
chRouteBelongVirCiId = GetRouteBelongVirCiId(routeId);
cLocalCiType = GetLocalVirCiType(chRouteBelongVirCiId);
if (CI_TYPE_CLD != cLocalCiType)
{
/*非车辆段,按CBTC既有逻辑处理*/
@@ -4324,10 +4328,12 @@ static UINT8 OpenCbtcRouteSectionErrCheck(const UINT16 routeId)
UINT8 cLocalCiType = 0U; /*本控区类型*/
UINT8 chRouteCouplinkFlag = 0U;
UINT8 chSigCrossState = 0U;
UINT8 chRouteBelongVirCiId = 0U;
rcWorkMode = GetLocalRcWorkMode();
/* 联锁逻辑检查 */
cLocalCiType = GetLocalCiType();
chRouteBelongVirCiId = GetRouteBelongVirCiId(routeId);
cLocalCiType = GetLocalVirCiType(chRouteBelongVirCiId);
if (CI_TYPE_CLD != cLocalCiType)
{
/*非车辆段,按CBTC既有逻辑处理*/
@@ -229,6 +229,7 @@ void NonRouteLogicProcess(void)
{
NonRouteCancelDeal(pNonRoute->NonRouteId); /*非进路取消处理*/
}
}
}
@@ -240,19 +241,39 @@ void NonRouteLogicProcess(void)
*/
void NonRouteXuanPaiDeal(UINT8 nonRouteId)
{
UINT8 reResult = CI_ERROR;
NonRouteDataStruct *pNonRoute = GetNonRouteDataById(nonRouteId);
if (CI_SUCCESS == LockNonRouteP(nonRouteId))
reResult = LockNonRouteP(nonRouteId);
if (CI_SUCCESS == reResult)
{ /*锁闭成功*/
if (CI_SUCCESS == CheckNonRouteSwitchPosRight(nonRouteId,0u,0u))
{ /*进路道岔位置正确*/
reResult = CheckNonRouteSwitchPosRight(nonRouteId, 0U, 0U);
if (CI_SUCCESS == reResult)
{
/*进路道岔位置正确*/
/*侵限区段侵限条件不满足检查*/
reResult = NonRouteIntruSecVainCheck(nonRouteId, EFUNC_CLD_LOCK_NONROUTE, ESEND_LEVEL_ATS);
if (CI_SUCCESS == reResult)
{
SetNonRouteStateDeal(nonRouteId, NONROUTE_STATE_LOCK); /*设置非进路为锁闭*/
}
else
{
SetNonRouteStateDeal(nonRouteId, NONROUTE_STATE_IDLE); /*设置非进路为空闲*/
/* NonRouteIntruSecVainCheck函数已经有故障码,不再记录*/
}
}
else
{ /*道岔未动作到位*/
/*非进路锁闭驱动道岔*/
if (CI_ERROR == NonRouteLockDrvSwitchDeal(nonRouteId))
reResult = NonRouteLockDrvSwitchDeal(nonRouteId);
if (CI_SUCCESS == reResult)
{
/*继续驱动道岔*/
}
else
{
SetNonRouteStateDeal(nonRouteId, NONROUTE_STATE_IDLE); /*设置非进路为空闲*/
}
@@ -6026,6 +6047,8 @@ void DTrainReturnUnlockP(void)
UINT16 routeId = 0u; /*进路ID*/
UINT8 belongCiId = 0u; /*进路所属联锁ID*/
UINT16 ii = 0u; /*循环索引*/
UINT8 belongVirCIid = 0U;
UINT8 chLocalVirCiType = 0U;
routeCurSum = GetRouteCurSum(); /*获取进路总数*/
@@ -6047,10 +6070,14 @@ void DTrainReturnUnlockP(void)
{
continue;
}
belongVirCIid = GetRouteBelongVirCiId(routeId);
chLocalVirCiType = GetLocalVirCiType(belongVirCIid);
if (CI_TYPE_CLD == chLocalVirCiType)
{
/*调车中途折返进路完整锁闭处理*/
DTrainReturnUnlockRouteAllLockP(routeId);
}
}
/*处理调车中途折返*/
for (ii = 0u; ii < routeCurSum; ii++)
@@ -6068,11 +6095,15 @@ void DTrainReturnUnlockP(void)
{
continue;
}
belongVirCIid = GetRouteBelongVirCiId(routeId);
chLocalVirCiType = GetLocalVirCiType(belongVirCIid);
if (CI_TYPE_CLD == chLocalVirCiType)
{
/*调车中途折返进路部分锁闭处理*/
DTrainRtnUnlockRoutePartLockP(routeId);
}
}
}
/*
@@ -6089,6 +6120,11 @@ UINT16 GetReturnId(const UINT16 routeId)
UINT8 preRouteState = 0u; /* 之前进路状态 */
UINT16 ii = 0u;
UINT8 toGo = CI_SUCCESS;
UINT8 chRouteState = 0U;
UINT8 chRoutePhysicalType = 0U;
UINT8 chAllLockSecNoOccupyCheck = 0U;
UINT8 chTrainEnterRouteFlag = 0U;
routeState = GetRouteState(routeId); /*获取进路状态*/
preRouteState = GetRoutePreState(routeId);/*获取进路前一状态*/
@@ -6098,7 +6134,8 @@ UINT16 GetReturnId(const UINT16 routeId)
toGo = CI_ERROR;
}
if ((CI_ERROR == RouteAllLockSecNoOccupyCheck(routeId)) && (CI_SUCCESS == toGo))
chAllLockSecNoOccupyCheck = RouteAllLockSecNoOccupyCheck(routeId);
if ((CI_ERROR == chAllLockSecNoOccupyCheck) && (CI_SUCCESS == toGo))
{ /*进路区段不是都空闲*/
toGo = CI_ERROR;
@@ -6119,8 +6156,10 @@ UINT16 GetReturnId(const UINT16 routeId)
/*获取所有满足道岔条件的进路ID*/
for (ii = 0u; ii < starSigRouteSum; ii++)
{
chRouteState = GetRouteState(starSigRouteBuf[ii]);
chRoutePhysicalType = CheckRoutePhysicalType(starSigRouteBuf[ii]);
/*B库改为两条进路,当8编组车占压两条进路时,此时BG2进路解锁需要检查以差值信号机为始端的进路的状态*/
if ((ROUTE_STATE_IDLE == GetRouteState(starSigRouteBuf[ii])) &&(CI_SUCCESS == CheckRoutePhysicalType(starSigRouteBuf[ii])))
if ((ROUTE_STATE_IDLE == chRouteState) &&(CI_SUCCESS == chRoutePhysicalType))
{
/*以并置信号机为始端的进路均为空闲且进路包含的区段均为列检库区段,且并置信号机为虚拟信号机,
线(SIGNAL_VIRTUAL_YES == GetSignalVirtualAttr(returnSigId))*/
@@ -6148,7 +6187,8 @@ UINT16 GetReturnId(const UINT16 routeId)
/* 如果是差至,如果列车驶入过进路,同时之前状态必须为接近锁闭开放
*
*/
if((ROUTE_STATE_NEAR_OPEN == preRouteState) && (TRAIN_ENTER_ROUTE_FLAG_YES == GetTrainEnterRouteFlag(routeId)))
chTrainEnterRouteFlag = GetTrainEnterRouteFlag(routeId);
if((ROUTE_STATE_NEAR_OPEN == preRouteState) && (TRAIN_ENTER_ROUTE_FLAG_YES == chTrainEnterRouteFlag))
{
returnSigId = GetRouteChaZhiSignalId(routeId); /*获取差置信号机ID*/
}
@@ -6498,76 +6538,95 @@ UINT16 GetRouteBingZhiSignalId(const UINT16 routeId)
*/
UINT16 GetRouteChaZhiSignalId(const UINT16 routeId)
{
UINT16 startSigId = 0u; /*始端信号机ID*/
UINT16 signalSum = 0u; /*信号机总数*/
UINT16 signalId = 0u; /*信号机ID*/
UINT16 routeSecSum = 0u; /*进路区段总数*/
UINT16 startSigId = 0U; /*始端信号机ID*/
UINT16 signalSum = 0U; /*信号机总数*/
UINT16 signalId = 0U; /*信号机ID*/
UINT16 routeSecSum = 0U; /*进路区段总数*/
RoutePhysicalSectionStruct* pRoutePhySecStru = NULL; /*进路区段数据*/
UINT16 returnOutSecId = 0u; /*折返信号机外方区段ID*/
UINT16 returnInSecId = 0u; /*折返信号机内方区段ID*/
UINT16 lockBelongRouteId = 0u; /*锁闭所属进路ID*/
UINT16 outSecId = 0u; /*外方区段ID*/
UINT16 ii = 0u;
UINT16 tmpSigId = 0u;
UINT16 returnOutSecId = 0U; /*折返信号机外方区段ID*/
UINT16 returnInSecId = 0U; /*折返信号机内方区段ID*/
UINT16 lockBelongRouteId = 0U; /*锁闭所属进路ID*/
UINT16 outSecId = 0U; /*外方区段ID*/
UINT16 ii = 0U;
UINT16 tmpSigId = 0U;
UINT8 chPhySecType = 0U;
UINT16 wTempPhySecId = 0U;
UINT16 wReturnSignal = 0U;
UINT16 wTempSigId = 0U;
UINT8 chPhyLockState = 0U;
UINT16 wLockRouteId = 0U;
UINT16 wTempSigOutPhyId = 0U;
UINT16 wTempSigInPhyId = 0U;
startSigId = GetRouteStartSignalId(routeId); /*获取进路始端信号机ID*/
signalSum = GetSignalCurSum(); /*获取信号机总数*/
if (PHYSICAL_SEC_TYPE_NOSWITCH == GetPhySecType(GetSignalOutFirstPhySecId(startSigId)))
outSecId = GetSignalOutFirstPhySecId(startSigId);
chPhySecType = GetPhySecType(outSecId);
if (PHYSICAL_SEC_TYPE_NOSWITCH == chPhySecType)
{ /*无岔区段*/
for (ii = 0u; ii < signalSum; ii++)
{
signalId = GetSignalId(ii); /*获取信号机ID*/
wTempPhySecId = GetSignalOutFirstPhySecId(signalId);
if ((GetSignalOutFirstPhySecId(startSigId) == GetSignalOutFirstPhySecId(signalId)) &&
(startSigId != signalId))
if ((outSecId == wTempPhySecId) && (startSigId != signalId))
{
return signalId;
wReturnSignal = signalId;
break;
}
else
{
/*不处理*/
}
}
}
else
{ /*有岔*/
outSecId = GetSignalOutFirstPhySecId(startSigId); /*进路始端信号机外方区段ID*/
lockBelongRouteId = GetPhySecRLockBelongRouteId(outSecId); /*区段锁闭所属进路ID*/
routeSecSum = GetRoutePhysicalSectionSum(lockBelongRouteId); /*获取进路区段总数*/
pRoutePhySecStru = GetRouteSectionData(lockBelongRouteId); /*获取进路区段数据*/
if ((0u == routeSecSum) || (NULL == pRoutePhySecStru))
if ((0U == routeSecSum) || (NULL == pRoutePhySecStru))
{
return 0u;
/*不处理*/
}
if (routeSecSum == 1u)
else
{
/*if ((PHYSICAL_SECTION_LOCK_NORMAL == GetPhySecLockState(pRoutePhySecStru[0].PhysicalSectionId)) &&
(lockBelongRouteId == GetPhySecRLockBelongRouteId(pRoutePhySecStru[0].PhysicalSectionId)))*/
if (1U == routeSecSum)
{
returnOutSecId = pRoutePhySecStru[0].PhysicalSectionId;/*折返信号机外方区段ID*/
returnOutSecId = pRoutePhySecStru[0U].PhysicalSectionId;/*折返信号机外方区段ID*/
tmpSigId = GetRouteStartSignalId(lockBelongRouteId);/*折返信号机内方区段ID*/
returnInSecId = GetSignalOutFirstPhySecId(tmpSigId);
}
}
else if (routeSecSum > 1u)
else if (1U < routeSecSum)
{
for (ii = 0u; ii < routeSecSum; ii++)
for (ii = 0U; ii < routeSecSum; ii++)
{
if ((PHYSICAL_SECTION_LOCK_NORMAL == GetPhySecLockState(pRoutePhySecStru[ii].PhysicalSectionId)) &&
(lockBelongRouteId == GetPhySecRLockBelongRouteId(pRoutePhySecStru[ii].PhysicalSectionId)))
chPhyLockState = GetPhySecLockState(pRoutePhySecStru[ii].PhysicalSectionId);
wLockRouteId = GetPhySecRLockBelongRouteId(pRoutePhySecStru[ii].PhysicalSectionId);
if ((PHYSICAL_SECTION_LOCK_NORMAL == chPhyLockState) &&
(lockBelongRouteId == wLockRouteId))
{ /*本进路第一个锁闭的区段*/
returnOutSecId = pRoutePhySecStru[ii].PhysicalSectionId; /*折返信号机外方区段ID*/
if (ii > 0u)
if (0U < ii)
{
returnInSecId = pRoutePhySecStru[ii - 1U].PhysicalSectionId; /*折返信号机内方区段ID*/
}
else
{
wTempSigId = GetRouteStartSignalId(lockBelongRouteId);/*获取锁闭进路的外方第一区段*/
returnInSecId = GetSignalOutFirstPhySecId(wTempSigId);
}
break;
}
@@ -6577,24 +6636,36 @@ UINT16 GetRouteChaZhiSignalId(const UINT16 routeId)
{
/*无操作*/
}
if ((0u == returnOutSecId) || (0u == returnInSecId))
{
return 0u;
}
if ((0U == returnOutSecId) || (0U == returnInSecId))
{
/*无操作*/
}
else
{
for (ii = 0u; ii < signalSum; ii++)
{
signalId = GetSignalId(ii); /*获取信号机ID*/
if ((returnOutSecId == GetSignalOutFirstPhySecId(signalId)) &&
(returnInSecId == GetSignalInFirstPhySecId(signalId, routeId)))
wTempSigOutPhyId = GetSignalOutFirstPhySecId(signalId);
wTempSigInPhyId = GetSignalInFirstPhySecId(signalId, routeId);
if ((returnOutSecId == wTempSigOutPhyId) &&
(returnInSecId == wTempSigInPhyId))
{
return signalId;
wReturnSignal = signalId;
break;
}
else
{
/*无操作*/
}
}
}
return 0u;
}
return wReturnSignal;
}
File diff suppressed because it is too large Load Diff
@@ -2919,6 +2919,127 @@ UINT8 AutoReturnRouteCouplinkCheck(const UINT16 wAutoRouteId, const UINT8 chFunc
* by lyj 20250929
*/
UINT8 AllAutoReturnRCouplinkCheck(const UINT16 wAutoRouteId, const UINT8 chFunctionId);
/*
*
* const UINT16 axisSecId ID
* CI_ERROR
* CI_SUCCESS
* add by mpt 20260331
*/
UINT8 JumpPhySectionUseCheck(const UINT16 axisSecId);
/*
*
* const UINT16 axisSecId ID
* CI_ERROR
* CI_SUCCESS
* add by mpt 20260331
*/
UINT8 JumpPhySectionPortectUseCheck(const UINT16 axisSecId);
/*
*
* const UINT16 axisSecId ID
* CI_ERROR
* CI_SUCCESS
* add by mpt 20260331
*/
UINT8 JumpLogicSecPortectUseCheck(const UINT16 wLgcId);
/*
*
* const UINT16 axisSecId ID
* CI_ERROR
* CI_SUCCESS
* add by mpt 20260331
*/
UINT8 JumpPhySectionSwitchUseCheck(const UINT16 axisSecId);
/*
*
* const UINT16 axisSecId ID
* const UINT8 state
* void
* add by mpt 20260331
*/
void SetJumpPhySectionPortectSecUse(const UINT16 axisSecId, const UINT8 state);
/*
*
* const UINT16 axisSecId ID
* const UINT8 state
* void
* add by mpt 20260331
*/
void SetJumpLogicSecPortectUse(const UINT16 wLgcId, const UINT8 state);
/*
*
* const UINT16 routeId, ID
* UINT8
CI_SUCCESS:
CI_ERROR:
add by mpt 20260331
*/
UINT8 ChekJumpLockProtectSwitDrivOvtmStat(const UINT16 axisSecId);
/*
*
* UINT16 const axisSecId,
* UINT16 *pDevId, Id
* UINT8 *pDevState,
* CI_ERROR
* CI_SUCCESS
* Add by mpt 20260331
*/
UINT8 AxisSecProtSwitchFLockCheck(UINT16 const axisSecId, UINT16* pDevId, UINT8* pDevState);
/*
*
* UINT16 const axisSecId,
* UINT16 *pDevId, Id
* UINT8 *pDevState,
* CI_ERROR
* CI_SUCCESS
* add by mpt 20260331
*/
UINT8 AxisSecPorteSwitchPosMoveCheck(UINT16 const axisSecId, UINT16* pDevId, UINT8* pDevState, UINT8 funcId, UINT8 sendLevel);
/*
*
* UINT16 const axisSecId,
* UINT16 *pDevId, Id
* UINT8 *pDevState,
* CI_ERROR
* CI_SUCCESS
* add mpt 20260331
*/
UINT8 AxisSecAllProtSwitchPosCheck(UINT16 const axisSecId, UINT16* pDevId, UINT8* pDevState);
/*
*
* const UINT16 axisSecId, ID
* const UINT8 lockCommand,
* void
* add by mpt 20260331
*/
void SetAxisRelProSwitchLockSta(const UINT16 axisSecId, const UINT8 lockCommand);
/*
*
* UINT16 const routeId,
* UINT16 *pDevId, Id
* UINT8 *pDevState,
* CI_ERROR
* CI_SUCCESS
* add mpt 20260331
*/
UINT8 AxisRelatedProSwitchLockCheck(UINT16 const axisSecId, UINT16* pDevId, UINT8* pDevState);
/*
*
* 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);
#endif
@@ -454,8 +454,6 @@ UINT8 SetRevrLTrainRouteLogicProcess(UINT16 const routeId)
/* 联锁逻辑检查 */
/* 进路类型是【列车进路】*/
if(CI_SUCCESS == reResult)
{
devState = GetRouteType(routeId);
if (devState == ROUTE_TYPE_LIECHE)
{
@@ -470,9 +468,6 @@ UINT8 SetRevrLTrainRouteLogicProcess(UINT16 const routeId)
reResult = CI_ERROR;
}
}
if(CI_SUCCESS == reResult)
{
@@ -1053,8 +1048,6 @@ UINT8 SetReverseRtnRouteLogicProcess(UINT16 const routeId)
/* 联锁逻辑检查 */
/* 进路类型是【折返进路】*/
if(CI_SUCCESS == reResult)
{
devState = GetRouteType(routeId);
if (devState == ROUTE_TYPE_RETURN)
{
@@ -1068,7 +1061,6 @@ UINT8 SetReverseRtnRouteLogicProcess(UINT16 const routeId)
/* 失败返回 */
reResult = CI_ERROR;
}
}
if(CI_SUCCESS == reResult)
{
@@ -2895,12 +2887,6 @@ UINT8 LockRouteOverlapLogicProcess(UINT16 const routeId, UINT16 const overlapId,
if (CI_TRADITION_RAILWAY == lineIdentity)
{/*传统线路*/
checkResult = OverlapSwitchMoveValidCheck(overlapId,&devId,&devState);
}/* zt 删除单轨相关代码 2022-02-15 */
else
{/*线路类型错误*/
checkResult = CI_ERROR;
}
if (checkResult == CI_SUCCESS)
{
/* 通过检查,保持当前状态 */
@@ -2912,14 +2898,7 @@ UINT8 LockRouteOverlapLogicProcess(UINT16 const routeId, UINT16 const overlapId,
/* 失败返回 */
reResult = CI_ERROR;
}
}
/*线路类型检查*/
if ((CI_SUCCESS == reResult) || (RETURN_WAIT_SWITCH_USING == reResult))
{/* zt 删除单轨相关代码 2022-02-15 */
if (CI_TRADITION_RAILWAY == lineIdentity)
{/*传统线路*/
/* 通过检查,保持当前状态 */
}
}/* zt 删除单轨相关代码 2022-02-15 */
else
{/*线路类型错误*/
reResult = CI_ERROR;
@@ -2934,15 +2913,7 @@ UINT8 LockRouteOverlapLogicProcess(UINT16 const routeId, UINT16 const overlapId,
{
devId = 0u;
devState = 0u;
if(CI_TRADITION_RAILWAY == lineIdentity)
{/*传统线路*/
checkResult = OverlapSwitchPosCheck(overlapId, &devId, &devState);
}/* zt 删除单轨相关代码 2022-02-15 */
else
{/*线路类型错误*/
checkResult = CI_ERROR;
}
if (checkResult == CI_ERROR)
{
/* 道岔位置不正确 */
@@ -3631,8 +3602,6 @@ UINT8 OpenCbtcLTrainRouteLogicProcess(UINT16 const routeId)
/* 联锁逻辑检查 */
/* 进路监督模式为【CBTC】*/
if (CI_SUCCESS == reResult)
{
devState = GetRouteLevel(routeId);
if ((devState == ROUTE_LEVEL_CBTC))
{
@@ -3646,7 +3615,6 @@ UINT8 OpenCbtcLTrainRouteLogicProcess(UINT16 const routeId)
/* 失败返回 */
reResult = CI_ERROR;
}
}
/* 进路类型是列车进路*/
if (CI_SUCCESS == reResult)
@@ -3886,8 +3854,6 @@ UINT8 OpenCbtcLTrainRouteLogicProcess(UINT16 const routeId)
else
{
/*既不是反向进路,也不是风井进路*/
if (CI_SUCCESS == reResult)
{
/*防淹门联锁条件检查*/
checkResult = CBTCRouteFloodGateCheck(routeId, functionId, sendLevel);
if (CI_SUCCESS == checkResult)
@@ -3900,7 +3866,6 @@ UINT8 OpenCbtcLTrainRouteLogicProcess(UINT16 const routeId)
}
}
}
}
@@ -4851,8 +4816,6 @@ UINT8 OpenCbtcReturnRouteLogicProcess(UINT16 const routeId)
/* 联锁逻辑检查 */
/* 进路监督模式为【CBTC】*/
if (CI_SUCCESS == reResult)
{
devState = GetRouteLevel(routeId);
if ((devState == ROUTE_LEVEL_CBTC))
{
@@ -4866,7 +4829,6 @@ UINT8 OpenCbtcReturnRouteLogicProcess(UINT16 const routeId)
/* 失败返回 */
reResult = CI_ERROR;
}
}
/* 进路类型是【折返进路】*/
if (CI_SUCCESS == reResult)
@@ -6400,13 +6362,15 @@ UINT8 RouteOtherSecAutoUnlockProcess(UINT16 const routeId, UINT16* phySectionId)
UINT8 sendLevel = ESEND_LEVEL_ZERO; /*不发送ATS*/
UINT8 chPhySecCurMergeState = 0U;/*物理区段当前融合状态*/
UINT8 chPhySecPreMergeState = 0U;/*物理区段之前融合状态*/
UINT8 chPhyOtherLineFlag = 0U;
UINT16 wFrontPhyId = 0U;
/*联锁检查*/
if(CI_SUCCESS == reResult)
{
/*找到属于当前进路的第一个【正常锁闭】区段*/
if (nlockSectionId > 0u)
if (0U < nlockSectionId)
{
reResult = CI_SUCCESS;
}
@@ -6416,14 +6380,51 @@ UINT8 RouteOtherSecAutoUnlockProcess(UINT16 const routeId, UINT16* phySectionId)
reResult = CI_ERROR;
/*返回ID = 0*/
*phySectionId = 0u;
*phySectionId = 0U;
}
}
if (CI_SUCCESS == reResult)
{
/* 判断是否联络线对方区段 */
chPhyOtherLineFlag = GetPhyIsThisLineState(nlockSectionId);
if ((DEV_IS_THIS_LINE_NO == chPhyOtherLineFlag) && (UINT16_MAX == nextSecId) && (ROUTE_TYPE_RETURN != routeType))
{
/*区段不是本线路,且不存在下一个区段,且进路不为折返*/
wFrontPhyId = GetRoutePhySecFrontPhyId(routeId, nlockSectionId);
chPhySecPreMergeState = GetPhySecPreMergeState(wFrontPhyId);
chPhySecCurMergeState = GetPhySecCurMergeState(wFrontPhyId);
/* 前一区段当前空闲,之前占用 */
if ((SECTION_OCCUPY_YES == chPhySecPreMergeState) && (SECTION_OCCUPY_NO == chPhySecCurMergeState))
{
chPhySecPreMergeState = GetPhySecPreMergeState(nlockSectionId);
chPhySecCurMergeState = GetPhySecCurMergeState(nlockSectionId);
/* 待解锁区段当前空闲,之前占用 */
if ((SECTION_OCCUPY_YES == chPhySecPreMergeState) && (SECTION_OCCUPY_NO == chPhySecCurMergeState))
{
/*正常解锁区段*/
reResult = CI_SUCCESS;
*phySectionId = nlockSectionId;
}
else
{
/* 失败返回 */
reResult = CI_ERROR;
*phySectionId = nlockSectionId;
}
}
else
{
/* 失败返回 */
reResult = CI_ERROR;
*phySectionId = nlockSectionId;
}
}
else
{
/*进路为【折返进路】且解锁区段为折返区段*/
if ((routeType == ROUTE_TYPE_RETURN)
if ((ROUTE_TYPE_RETURN == routeType)
&& (nlockSectionId == returnSecId))
{
/*折返解锁*/
@@ -6515,7 +6516,7 @@ UINT8 RouteOtherSecAutoUnlockProcess(UINT16 const routeId, UINT16* phySectionId)
}
else
{
if (validReturnSigId > 0u)/*通过进路转折返进路*/
if (0U < validReturnSigId)/*通过进路转折返进路*/
{
/*折出进路第一个区段占用*/
chPhySecCurMergeState = GetPhySecCurMergeState(backSecId);
@@ -6537,8 +6538,8 @@ UINT8 RouteOtherSecAutoUnlockProcess(UINT16 const routeId, UINT16* phySectionId)
if (CI_SUCCESS == reResult)
{
/*折返进路锁闭时间早于折出进路 且 折出进路状态为【接近锁闭正常】*/
if ((((INT32)(backRouteLockTime- returnRouteLockTime)) > 0 )
&&(backRouteState == ROUTE_STATE_NEAR_LOCK))
if (0 < (((INT32)(backRouteLockTime - returnRouteLockTime)))
&& (ROUTE_STATE_NEAR_LOCK == backRouteState))
{
reResult = CI_SUCCESS;
*phySectionId = nlockSectionId;
@@ -6568,6 +6569,10 @@ UINT8 RouteOtherSecAutoUnlockProcess(UINT16 const routeId, UINT16* phySectionId)
}
}
}
}
return reResult;
}
@@ -7082,6 +7087,7 @@ UINT8 RouteCancelLogicProcess(UINT16 const routeId)
/*故障发送级别*/
UINT8 sendLevel = ESEND_LEVEL_ATS; /*发送ATS*/
UINT8 cRouteType = 0U; /*进路类型*/
UINT8 chRConnectReleaseFlag = 0U;
/*联锁条件检查*/
/* 进路内所有区段锁闭状态【正常锁闭】*/
@@ -7168,6 +7174,14 @@ UINT8 RouteCancelLogicProcess(UINT16 const routeId)
}
else
{
chRConnectReleaseFlag = GetRouteConnectReleaseFlag(routeId);
if (ROUTE_CONNECT_RELEASE_YES == chRConnectReleaseFlag)
{
/* 通过检查 */
reResult = CI_SUCCESS;
}
else
{
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, devId, ETYPE_CANCLE_ZHAOCHA, devState, sendLevel);
@@ -7176,6 +7190,8 @@ UINT8 RouteCancelLogicProcess(UINT16 const routeId)
}
}
}
else
{
}
@@ -7863,8 +7879,7 @@ UINT8 SetSwitchFLockLogicProcess(UINT16 const switchId)
{
if(FUNC_SWITCH_ON == CiFunctionLock)
{
if (CI_TRADITION_RAILWAY == lineIdentity)
{/*传统线路*/
/*传统线路*/
/*道岔2区段状态为【未锁闭】*/
checkResult = switch2ndSecLockState;
if (checkResult == PHYSICAL_SECTION_LOCK_NO)
@@ -7891,14 +7906,6 @@ UINT8 SetSwitchFLockLogicProcess(UINT16 const switchId)
SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, switch2ndSecId, ETYPE_PS_LOCK_STATE, checkResult, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
}
}/* zt 删除单轨相关代码 2022-02-15 */
else
{/*线路类型错误*/
reResult = CI_ERROR;
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,phySecId,ETYPE_PS_LOCK_STATE,devState,sendLevel);
}
}
else if(FUNC_SWITCH_OFF == CiFunctionLock)
@@ -9604,11 +9611,13 @@ UINT8 OpenBlocRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
UINT8 chDsnFuncSwitch = 0U; /* 无直轨计轴占用功能开关 */
UINT8 chXianSuFuncSwitch = 0U; /*后备模式信号开放是否检查区段临时限速开关*/
UINT8 cCrossState = 0U; /*信号机跨压状态*/
UINT8 chRouteBelongVirCiId = 0U;
chDsnFuncSwitch = GetCiFunctionSwitchConfig(FUNC_TOA_SWITCH);
chXianSuFuncSwitch = GetCiFunctionSwitchConfig(FUNC_XIANSU_SWITCH);
ciType = GetCiType(LocalCiId);
chRouteBelongVirCiId = GetRouteBelongVirCiId(routeId);
ciType = GetLocalVirCiType(chRouteBelongVirCiId);
/* 联锁逻辑检查 */
/* 进路内所有区段未被封锁 */
@@ -9635,6 +9644,8 @@ UINT8 OpenBlocRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
devState = 0u;
startSignalId = GetRouteStartSignalId(routeId);/*获取进路始端信号机ID*/
checkResult = RouteAllSecOccuClearCheck(routeId,&devId, &cPhySecCurMergeState);
routeState = GetRouteState(routeId);
if ((CI_TYPE_CLD == ciType) && ((ROUTE_STATE_YUXIAN_OPEN == routeState) ||(ROUTE_STATE_NEAR_OPEN == routeState)))
{/*车辆段进路预先开放或接近开放*/
@@ -9873,8 +9884,6 @@ UINT8 CLDKeepOpenSecCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLevel)
{
/*进路内区段,有UT占用,信号保持失败*/
/*进路内区段,有CT,且第一逻辑区段和外方第一物理区段最后一个逻辑区段CT占用,信号保持成功,其它失败*/
hasUtFlag = 0u;
hasCtFlag = 0u;
for (ii = 0u; ii < routePhyNum; ii++)
{
phyId = pRoutePhySecData[ii].PhysicalSectionId;
@@ -9908,7 +9917,7 @@ UINT8 CLDKeepOpenSecCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLevel)
ETYPE_PS_MERGY_OCU_STATE, devState,
sendLevel);
}
else if ((0u == hasUtFlag) && (1u == hasCtFlag))
else if (1u == hasCtFlag)
{
if (RC_WORK_MODE_TIOC == rcWorkMode)
{
@@ -9916,7 +9925,7 @@ UINT8 CLDKeepOpenSecCheck(UINT16 routeId, UINT8 functionId, UINT8 sendLevel)
chFunRet = GetRouteInOutFstLgcTrainInfo(routeId, &chReadyEnterRouteTrainSum, wszReadyEtRouteTrainId);
if (CI_SUCCESS == chFunRet)
{
chTrainEnterState = dsuTrainMinHeadCrossSignal(wszReadyEtRouteTrainId[0], routeId);
chTrainEnterState = dsuTrainMinHeadCrossSignal(wszReadyEtRouteTrainId[0], routeId, CI_ERROR);
if (TRAIN_ENTER_ROUTE_FULL == chTrainEnterState)
{
/*列车完全驶入进路,关灯 by cgh 20231128*/
@@ -10038,6 +10047,7 @@ UINT8 OpenCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
UINT16 startSignalId = 0u;
UINT8 signalCrossState = 0u;
UINT8 chRouteCouplinkFlag = 0U;
UINT8 chRouteBelongVirCiId = 0U;
/* 联锁逻辑检查 */
/* 进路内所有区段未被封锁 */
@@ -10060,7 +10070,8 @@ UINT8 OpenCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
/*CBTC进路内方第一逻辑区段条件检查,车辆段进路需内方区段空闲*/
if (CI_SUCCESS == reResult)
{
cLocalCiType = GetLocalCiType();
chRouteBelongVirCiId = GetRouteBelongVirCiId(routeId);
cLocalCiType = GetLocalVirCiType(chRouteBelongVirCiId);
if (CI_TYPE_CLD != cLocalCiType)
{
/*非车辆段,按CBTC既有逻辑处理*/
@@ -10138,6 +10149,8 @@ UINT8 OpenCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
}
else
{
devId = GetRouteInFirstLogSecId(routeId);
devState = GetLogSecCurOccupyState(devId);
reResult = CheckEngineerVehicleNear(routeId);/*检查是否是工程车接近的跨压*/
if (CI_SUCCESS == reResult)
{
@@ -10384,6 +10397,7 @@ UINT8 KeepCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
UINT8 outPhySecState = 0U;
UINT8 cLocalCiType = 0U; /*本控区类型*/
UINT8 chRouteCouplinkFlag = 0U;
UINT8 chRouteBelongVirCiId = 0U;
/* 联锁逻辑检查 */
/* 进路内所有区段未被封锁 */
@@ -10406,7 +10420,8 @@ UINT8 KeepCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
/*CBTC进路内方第一逻辑区段条件检查*/
if(CI_SUCCESS == reResult)
{
cLocalCiType = GetLocalCiType();
chRouteBelongVirCiId = GetRouteBelongVirCiId(routeId);
cLocalCiType = GetLocalVirCiType(chRouteBelongVirCiId);
if (CI_TYPE_CLD != cLocalCiType)
{
/*非车辆段,按CBTC既有逻辑处理*/
@@ -10443,7 +10458,12 @@ UINT8 KeepCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
if (ROUTE_COUPLINK_FLAG_YES == chRouteCouplinkFlag)
{
reResult = KeepCouplinkRouteSecOccCheck(routeId,&devId,&devState);
if (CI_ERROR == reResult)
if (CI_SUCCESS == reResult)
{
/* 通过检查 */
reResult = CI_SUCCESS;
}
else
{
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, devId, SECTION_OCCUPY_YES, devState, sendLevel);
@@ -10492,6 +10512,8 @@ UINT8 KeepCbtcRouteSectionCheck(UINT16 routeId,UINT8 functionId,UINT8 sendLevel)
}
else
{
devId = GetRouteInFirstLogSecId(routeId);
devState = GetLogSecCurOccupyState(devId);
reResult = CheckEngineerVehicleNear(routeId);/*检查是否是工程车接近的跨压以及列车的真实跨压*/
if (CI_SUCCESS == reResult)
{
@@ -11577,6 +11599,7 @@ void RouteLgcSecResReleaseProcess(const UINT16 wRouteId)
wUnlockLgcSecId = routeLogIdBuf[ii];
wBelongRouteId = GetLogSecLockBelongRoute(wUnlockLgcSecId);
wLgcBufIndex = GetlogSectionBufIndex(wUnlockLgcSecId);
chLgcResTrainSum = GetLogSecTrainInfoSum(wUnlockLgcSecId);
chLogSecLogLockState = GetLogSecLogLockState(wUnlockLgcSecId);
@@ -11594,7 +11617,6 @@ void RouteLgcSecResReleaseProcess(const UINT16 wRouteId)
/*锁闭所属进路等于本进路或逻辑区段已解锁*/
if (wBelongRouteId == wRouteId)
{
chLgcResTrainSum = GetLogSecTrainInfoSum(wUnlockLgcSecId);
if (LOGIC_SECTION_RES_SUM_MAX > chLgcResTrainSum)
{
; /*继续执行*/
@@ -11640,7 +11662,10 @@ void RouteLgcSecResReleaseProcess(const UINT16 wRouteId)
&& (NULL == pstTrainResInfo))
{/*上一区段已经解锁,本区段由列车申请资源释放或本区段已经解锁*/
/*删除该列车对应逻辑区段资源*/
(void)ComMemSet((void *)&pstLgcSecInfo[wLgcBufIndex].szTrainResData[jj], (UINT16)sizeof(LogicTrainResStruct), 0U);
/*重置资源信息结构体*/
ResetResInfoStruct(wLgcBufIndex, jj);
debug_infor_printf((const)"LogSecRes Release LgcId: %d TrainId:%d Cyc\n"
, wUnlockLgcSecId
, wTrainId
@@ -13135,3 +13160,83 @@ void UpdateRouteCouplinkFlag(const UINT16 wRouteId)
}
}
/*
* 线
* const UINT16 wRouteId ID
*
* Create: lyj 20260603
*/
void ConnectRouteReleaseProc(const UINT16 wRouteId)
{
UINT8 chRouteState = 0U; /*进路状态*/
UINT8 chResult = 0U;
UINT16 wFirstOccuSecId = 0U;/*进路内方第一个占用的物理区段ID*/
UINT8 chDevState = 0U;
UINT8 chTrainEnterSta = 0U;
UINT8 chZongRenJieResult = 0U;
if ((0U < wRouteId) && (ROUTE_SUM_MAX > wRouteId))
{
chRouteState = GetRouteState(wRouteId);
if ((ROUTE_STATE_FIRST_LOCK == chRouteState)
|| (ROUTE_STATE_FIRST_LOCKERR == chRouteState)
|| (ROUTE_STATE_YUXIAN_LOCK == chRouteState)
|| (ROUTE_STATE_NEAR_LOCKERR == chRouteState))
{
chZongRenJieResult = CheckRouteZongRenJieFeasibility(wRouteId);
chResult = RouteAllSecOccuClearCheck(wRouteId, &wFirstOccuSecId, &chDevState);
if (CI_SUCCESS == chZongRenJieResult)
{
SetRouteStateManage(wRouteId, ROUTE_STATE_DELAY_UNLOCK); /*-->设置进路延时解锁*/
if (CI_SUCCESS == chResult)
{
/*进路内无占压,延时后全部解锁*/
SetRouteZongRenJieDelayType(wRouteId, ROUTE_ZRJ_DELAY_TYPE_IDLE);
}
else
{
/*延时后部分绿光带,即一个占压的物理区段之前的物理区段变绿光带*/
SetRouteZongRenJieDelayType(wRouteId, ROUTE_ZRJ_DELAY_TYPE_EXP_TO_OCCUPY);
}
}
else
{
/*进路不能解锁*/
}
}
else if ((ROUTE_STATE_LEAD_LOCK == chRouteState) || (ROUTE_STATE_LEAD_LOCKERR == chRouteState))
{
chTrainEnterSta = GetRouteTrainEnterFlag(wRouteId);
chZongRenJieResult = RouteExceptLastSecOccuClrCheck(wRouteId);
if (CI_SUCCESS == chZongRenJieResult)
{
/*所有区段空闲或最后一个区段占用*/
SetRouteStateManage(wRouteId, ROUTE_STATE_DELAY_UNLOCK); /*-->设置进路延时解锁*/
/*延时后全部解锁*/
SetRouteZongRenJieDelayType(wRouteId, ROUTE_ZRJ_DELAY_TYPE_IDLE);/*延时结束后所有区段解锁*/
}
else if (ROUTE_TRAIN_ENTER_FLAG_NO == chTrainEnterSta)
{
SetRouteStateManage(wRouteId, ROUTE_STATE_DELAY_UNLOCK); /*-->设置进路延时解锁*/
/*延时后全部解锁*/
SetRouteZongRenJieDelayType(wRouteId, ROUTE_ZRJ_DELAY_TYPE_IDLE);/*延时结束后所有区段解锁*/
}
else
{
/*不解锁*/
}
}
else
{
/*记录进路状态不满足*/
SetErrorData(EFUNC_ROUTE_ZRJ_DEAL, CI_DEVICE_TYPE_ROUTE, wRouteId, ETYPE_ROUTE_STATE, chRouteState, ESEND_LEVEL_ATS);
}
}
else
{
/*不处理;进路ID异常,不做报警*/
}
}
@@ -841,6 +841,13 @@ UINT8 SetRouteCouplinkProcess(const UINT16 wRouteId, const UINT8 functionId, con
* Create: 20250919
*/
void UpdateRouteCouplinkFlag(const UINT16 wRouteId);
/*
* 线
* const UINT16 wRouteId ID
*
* Create: lyj 20260603
*/
void ConnectRouteReleaseProc(const UINT16 wRouteId);
#ifdef __cplusplus
}
@@ -1598,12 +1598,14 @@ UINT8 SetNonRouteP(UINT8 nonRouteId)
reResult = NonRouteRelProSwiPosMovValCheck(nonRouteId,functionId,sendLevel);
}
#if 0
/*修复缺陷YF0083-2105---LYJ--20260128*/
if (CI_SUCCESS == reResult)
{/*侵限区段侵限条件不满足检查*/
reResult = NonRouteIntruSecVainCheck(nonRouteId,functionId,sendLevel);
}
#endif
return reResult;
}
@@ -1721,14 +1723,6 @@ UINT8 LockNonRouteP(UINT8 nonRouteId)
reResult = NonRouteRelProSwiPosMovValCheck(nonRouteId,functionId,sendLevel);
}
if (CI_SUCCESS == reResult)
{/*侵限区段侵限条件不满足检查*/
reResult = NonRouteIntruSecVainCheck(nonRouteId,functionId,sendLevel);
}
return reResult;
}
+5 -2
View File
@@ -118,6 +118,8 @@
#define MASK_TYPE_PHYSECTION_HEAD_XTD ((UINT8)0x31) /*定义物理区段运行方向下行状态码位*/
#define MASK_TYPE_PHYSECTION_HEAD_STD ((UINT8)0x32) /*定义物理区段运行方向上行状态码位*/
#define MASK_TYPE_LIECHE_STOPSTATE ((UINT8)0x3a) /*定义列车停稳信息状态码位*/
#define MASK_TYPE_PHYSECTION_INTRUSION ((UINT8)0x5a) /*定义物理区段侵限状态码位(CI->ZC)*/
#define MASK_TYPE_PHYSECTION_ATS_FLOCK ((UINT8)0x5b) /*定义物理区段由ATS封锁状态码位(CI->ZC)*/
#define MASK_TYPE_PHYSEC_CENTERDETAIN_UP ((UINT8)0x3d) /*定义物理区段CI-ATS中心上行扣车状态状态码位 (兼容28.0.0.14使用)*/
#define MASK_TYPE_PHYSEC_CENTERDETAIN_DOWN ((UINT8)0x3e) /*定义物理区段CI-ATS中心下行扣车状态状态码位 (兼容28.0.0.14使用)*/
#define MASK_TYPE_PHYSEC_STATIONDETAIN_UP ((UINT8)0x3f) /*定义物理区段CI-ATS车站上行扣车状态状态码位 (兼容28.0.0.14使用)*/
@@ -139,9 +141,10 @@
#define MASK_TYPE_DOWNWARD_DIRECTION ((UINT8)0x94) /*定义逻辑区段下行锁闭码位*/
#define MASK_TYPE_LOGICSECTION_PROTECTLOCK ((UINT8)0x99) /*定义逻辑区段防护锁闭码位*/
#define MASK_TYPE_LOGICSECTION_JUMPLOCK ((UINT8)0x9A) /*定义逻辑区段跳跃锁闭码位*/
#define MASK_TYPE_LOGICSECTION_ARB ((UINT8)0x9B) /*定义逻辑区段ARB状态码位*/
#define MASK_TYPE_LOGSEC_CBTC_ARB ((UINT8)0x9B) /*定义逻辑区段CBTC_ARB状态码位*/
#define MASK_TYPE_LOGICSECTION_SPKS_FLOCK ((UINT8)0x9C) /*定义逻辑区段SPKS封锁状态码位*/
#define MASK_TYPE_LOGICSECTION_EMERG_XIANSU ((UINT8)0x9D) /*定义逻辑区段紧急临时限速码位*/
#define MASK_TYPE_LOGSEC_PB_TACS_ARB ((UINT8)0xB3) /*定义逻辑区段PB_TACS_ARB状态码位*/
/*保护区段相关码位*/
@@ -204,7 +207,7 @@
#define MASK_TYPE_PSD_PDB_FLASH_STATE ((UINT8)0xA0) /*定义清客确认箱PDB按钮指示灯闪灯状态码位*/
#define MASK_TYPE_PSD_VIDEO_QK_LU ((UINT8)0xA1) /*定义清客按钮箱视频清客表示灯(绿)状态码位*/
#define MASK_TYPE_PSD_VIDEO_QK_HONG ((UINT8)0xA2) /*定义清客按钮箱视频清客表示灯(红)状态码位*/
#define MASK_TYPE_PSD_EXCEPT_OPEN ((UINT8)0xA5) /*定义站台安全门异常打开码位*/
#define MASK_TYPE_PSD_EXCEPT ((UINT8)0xA5) /*定义站台安全门异常码位 CI-ATS、CI-ZC*/
#define MASK_TYPE_PSD_JXTCPANGLU_FAULT ((UINT8)0xAA) /*定义间隙探测旁路按钮故障码位*/
#define MASK_TYPE_PSD_IBP_STATE ((UINT8)0xAD) /*定义IBP盘按钮状态码位*/
#define MASK_TYPE_PSD_IBP_FAULT ((UINT8)0xAE) /*定义IBP盘按钮故障码位*/
@@ -365,6 +365,24 @@ UINT16 GetSCXColAgreeTryRelayIdById(UINT8 nonRouteId)
return collAgreeTryTrainRelayId;
}
/*
* 线ID
* UINT8 nonRouteId id
* 线ID
*/
UINT16 GetWaysideTryTrainIndRelayId(UINT8 nonRouteId)
{
UINT16 collAgreeTryTrainRelayId = 0u;
NonRouteConfigDataStruct* pNonRouteConfig = GetNonRouteConfigDataPtrById(nonRouteId);
if (pNonRouteConfig != NULL)
{
collAgreeTryTrainRelayId = pNonRouteConfig->ColWaysideTryTrainIndRelayId; /* 试车线采集的轨旁试车指示器继电器ID */
}
return collAgreeTryTrainRelayId;
}
/*
* id查找对应的非进路
* swId-id
@@ -82,6 +82,7 @@ typedef struct S_NonRouteConfigDataStruct
UINT16 AgreeTryTrainRelayId; /*同意试车继电器ID (配置字段)*/
UINT16 DrvApplyTryTrainRelayId; /* 试车线驱动的申请试车继电器ID */
UINT16 ColAgreeTryTrainRelayId; /* 试车线采集的同意试车继电器ID */
UINT16 ColWaysideTryTrainIndRelayId; /* 试车线采集的轨旁试车指示器继电器ID */
} NonRouteConfigDataStruct;
/*******************************全局变量声明*******************************/
@@ -268,6 +269,14 @@ UINT8 GetnonRouteIdbelongVirCIid(UINT8 nonRouteId);
*/
UINT8 GetnonRouteIdbelongCIid(UINT8 nonRouteId);
/*
* 线ID
* UINT8 nonRouteId id
* 线ID
*/
UINT16 GetWaysideTryTrainIndRelayId(UINT8 nonRouteId);
#ifdef __cplusplus
}
#endif
@@ -97,7 +97,7 @@ void SetOverlapRelateProtSwLockSta(const UINT16 overlapId, const UINT8 lockComma
overlapProtectSwitchSum = GetOverlapRelatedProtSwitSum(overlapId); /*获取防护道岔数目*/
overlapProtectSwitchStru = GetOverlapRelatedProtSwitStru(overlapId); /*获取防护道岔数据*/
if (0u == overlapProtectSwitchSum)
if ((0U == overlapProtectSwitchSum) || (NULL == overlapProtectSwitchStru))
{
retVal = CI_ERROR;
}
@@ -890,7 +890,10 @@ void CleanOverlapSpecificFlag(const UINT16 routeId, const UINT16 overlapId)
}
else
{
if ((dwAtsLastTimeLockCyc < dwUnlockStartCycNum) && (0U < dwAtsLastTimeLockCyc))
atsExpLockOverlapId = GetRouteAtsExpLkOverlapId(routeId);
if ((dwAtsLastTimeLockCyc <= dwUnlockStartCycNum) && (0U < dwAtsLastTimeLockCyc)
&& (overlapId == atsExpLockOverlapId))
{
/*ATS最后一次下发锁闭保护区段命令时保护区段未自动解锁*/
SetRouteAtsExpLkOverlapId(routeId, 0U);
@@ -1183,3 +1183,51 @@ UINT16 GetIbpConfmRelayId(const UINT16 doorId)
}
return retVal;
}
/*
*
* const UINT16 PsdId, IDUINT16 wBoardId Id
* CI_SUCCESS CI_ERROR
*/
UINT8 SetPsdRelateReverseRelay(const UINT16 PsdId, UINT16 wBoardId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 chRet = CI_ERROR;
bufIndex = GetPsdConfigBufIndex(PsdId); /*获取数组下标*/
if (bufIndex < PSD_SUM_MAX)
{
PsdConfigDataStru[bufIndex].wReverseBoardId = wBoardId;
chRet = CI_SUCCESS;
}
else
{
;
}
return chRet;
}
/*
*
* const UINT16 wPsdId, ID
* UINT16_MAX:
* 0:
* [1,65534]ID
*/
UINT16 GetPsdRelateReverseBoardId(const UINT16 wPsdId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 retVal = UINT16_MAX;
bufIndex = GetPsdConfigBufIndex(wPsdId); /*获取数组下标*/
if (bufIndex < PSD_SUM_MAX)
{
retVal = PsdConfigDataStru[bufIndex].wReverseBoardId;
}
else
{
retVal = UINT16_MAX;
}
return retVal;
}
@@ -73,6 +73,7 @@ typedef struct S_PsdConfigDataStruct
UINT16 IncloudeEsbIdBuf[PSD_INCLUDE_ESB_NUM]; /*屏蔽门包含ESB ID*/
UINT8 IncloudeEsbNum; /*包含ESB数量*/
UINT16 wIbpRelayId; /*IBP盘发车按钮继电器ID*/
UINT16 wReverseBoardId; /*所属倒切板卡Id*/
} PsdConfigDataStruct;
@@ -461,6 +462,23 @@ UINT16* GetPsdIncloudeEsbIdBuf(const UINT16 psdId);
*/
UINT16 GetIbpConfmRelayId(const UINT16 doorId);
/*
*
* const UINT16 PsdId, IDUINT16 wBoardId Id
* CI_SUCCESS CI_ERROR
*/
UINT8 SetPsdRelateReverseRelay(const UINT16 PsdId,UINT16 wBoardId);
/*
*
* const UINT16 wPsdId, ID
* UINT16_MAX:
* 0:
* [1,65534]ID
*/
UINT16 GetPsdRelateReverseBoardId(const UINT16 wPsdId);
#ifdef __cplusplus
}
#endif
+112 -17
View File
@@ -851,7 +851,7 @@ UINT32 GetStartDetectionCycNum(const UINT16 doorId)
*
*
*/
void SetStartDetectionState(const UINT16 doorId, const UINT32 detectionState)
void SetStartDetectionState(const UINT16 doorId, const UINT8 detectionState)
{
UINT16 bufIndex = 0u; /*数组下标*/
@@ -861,7 +861,7 @@ void SetStartDetectionState(const UINT16 doorId, const UINT32 detectionState)
{
if ((JXTC_START_DETECTION_NO == detectionState) || (JXTC_START_DETECTION_YES == detectionState) )
{
PsdDataStru[bufIndex].StartDetectionState = (UINT8)(detectionState);
PsdDataStru[bufIndex].StartDetectionState = detectionState;
}
else
{
@@ -906,7 +906,7 @@ UINT8 GetStartDetectionState(const UINT16 doorId)
*
*
*/
void SetStopDetectionState(const UINT16 doorId, const UINT32 detectionState)
void SetStopDetectionState(const UINT16 doorId, const UINT8 detectionState)
{
UINT16 bufIndex = 0u; /*数组下标*/
@@ -916,7 +916,7 @@ void SetStopDetectionState(const UINT16 doorId, const UINT32 detectionState)
{
if ((JXTC_STOP_DETECTION_NO == detectionState) || (JXTC_STOP_DETECTION_YES == detectionState) )
{
PsdDataStru[bufIndex].StopDetectionState = (UINT8)(detectionState);
PsdDataStru[bufIndex].StopDetectionState = detectionState;
}
else
{
@@ -1405,7 +1405,7 @@ UINT16 GetPsdEditGroupInfoFromPsdData(const UINT16 doorId)
*
*
*/
void SetVOBCDoorState(const UINT16 doorId, const UINT32 doorState)
void SetVOBCDoorState(const UINT16 doorId, const UINT8 doorState)
{
UINT16 bufIndex = 0u; /*数组下标*/
@@ -1415,7 +1415,7 @@ void SetVOBCDoorState(const UINT16 doorId, const UINT32 doorState)
{
if ((PSD_DOOR_CLOSEDANDLOCKED_VALID == doorState) || (PSD_DOOR_CLOSEDANDLOCKED_INVALID == doorState))
{
PsdDataStru[bufIndex].VOBCDoorState = (UINT8)(doorState);
PsdDataStru[bufIndex].VOBCDoorState = doorState;
}
else
{
@@ -1565,7 +1565,6 @@ UINT8 GetPsdPlFlag(const UINT16 doorId)
void SetNearCiPscPlFlag(const UINT16 psdId,const UINT16 pscId,const UINT8 setFlag)
{
/*变量初始化*/
UINT8 i = 0u;
UINT8 transmitState = 0u;
UINT8 localCiId = 0u;
UINT8 psdCiId = 0u;
@@ -2575,21 +2574,21 @@ UINT16 GePsdVideoQkRelateVobcId(const UINT16 wPsdId)
}
/*
* ID屏蔽门异常打开状态
* ID屏蔽门异常状态
* const UINT16 wPsdId ID
* const UINT8 cExceptOpenState
* const UINT8 cExceptOpenState
*
* Created By LQ 2025.05.22
*/
void SetPsdExceptOpenState(const UINT16 wPsdId, const UINT8 cExceptOpenState)
void SetPsdExceptState(const UINT16 wPsdId, const UINT8 cExceptOpenState)
{
UINT16 bufIndex = 0U;
bufIndex = GetPsdConfigBufIndex(wPsdId); /*获取屏蔽门数组下标*/
if ((PSD_SUM_MAX > bufIndex) && ((PSD_EXCEPT_OPEN_YES == cExceptOpenState) || (PSD_EXCEPT_OPEN_NO == cExceptOpenState)))
if ((PSD_SUM_MAX > bufIndex) && ((PSD_EXCEPT_YES == cExceptOpenState) || (PSD_EXCEPT_NO == cExceptOpenState)))
{
PsdDataStru[bufIndex].cPsdExceptOpenState = cExceptOpenState; /*设置屏蔽门异常打开状态*/
PsdDataStru[bufIndex].cPsdExceptOpenState = cExceptOpenState; /*设置屏蔽门异常状态*/
}
else
{
@@ -2598,16 +2597,16 @@ void SetPsdExceptOpenState(const UINT16 wPsdId, const UINT8 cExceptOpenState)
}
/*
* ID屏蔽门异常打开状态
* ID屏蔽门异常状态
* const UINT16 wPsdId ID
* 0x55
* 0xAA
* 0x55
* 0xAA
* Created By LQ 2025.05.22
*/
UINT8 GePsdExceptOpenState(const UINT16 wPsdId)
UINT8 GePsdExceptState(const UINT16 wPsdId)
{
UINT16 bufIndex = 0U;
UINT8 cRetVal = PSD_EXCEPT_OPEN_YES;
UINT8 cRetVal = PSD_EXCEPT_YES;
bufIndex = GetPsdConfigBufIndex(wPsdId); /*获取屏蔽门数组下标*/
@@ -3376,3 +3375,99 @@ UINT32 GetIBPPressCycNum(const UINT16 doorId)
}
return retVal;
}
/*
* ID屏蔽门状态给 VOBC
* const UINT16 doorIdID
*
*/
UINT8 GetPsdStateToVobc(const UINT16 doorId)
{
UINT8 chPsdState = 0U;
UINT8 chPsdPlState = 0U;
UINT8 chExceptOpenState = 0U;
UINT8 chRet = 0U;
chPsdPlState = GetPsdMutualLockRemoveState(doorId); /*屏蔽门互锁解除*/
if ((PSD_MUTUALLOCK_REMOVE_YES == chPsdPlState) || (PSD_ATS_MUTUALLOCK_REMOVE_YES == chPsdPlState) || (PSD_ATS_AND_JD_MUTUALLOCK_REMOVE_YES == chPsdPlState))
{
/*屏蔽门互锁解除*/
chRet = CI_IVOC_PSD_STATE_PANGLU;
}
else
{
chPsdState = GetPsdState(doorId);
if (PSD_STATE_CLOSE == chPsdState)
{/*屏蔽门关*/
chRet = CI_IVOC_PSD_STATE_CLOSE;
}
else
{
/*屏蔽门开, 判断是否异常*/
chExceptOpenState = GePsdExceptState(doorId);
if (PSD_EXCEPT_NO == chExceptOpenState)
{
chRet = CI_IVOC_PSD_STATE_OPEN;
}
else
{
/*屏蔽门异常打开*/
chRet = CI_IVOC_PSD_STATE_OPEN_EXCEPT;
}
}
}
return chRet;
}
/*
*
* const UINT16 doorId, ID
* const UINT32 detectionState,
*
*
*/
void SetTrainZeroSpeedState(const UINT16 doorId, const UINT8 detectionState)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/
if (bufIndex < PSD_SUM_MAX)
{
if ((PSD_TRAIN_ZERO_SPEED_NO == detectionState) || (PSD_TRAIN_ZERO_SPEED_YES == detectionState))
{
PsdDataStru[bufIndex].chTrainZeroSpeedState = detectionState;
}
else
{
/*不做处理*/
}
}
else
{
/*不做处理*/
}
}
/*
*
* const UINT16 doorId, ID
* 0:
* >0:
*/
UINT8 GetTrainZeroSpeedState(const UINT16 doorId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = CI_ERROR;
bufIndex = GetPsdConfigBufIndex(doorId); /*获取屏蔽门数组下标*/
if (bufIndex < PSD_SUM_MAX)
{
retVal = PsdDataStru[bufIndex].chTrainZeroSpeedState;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
+34 -10
View File
@@ -98,6 +98,7 @@ typedef struct S_PsdDataStruct
UINT32 JXTCMutualLockStartCycNum; /*间隙探测互锁解除起始时间*/
UINT8 ibpButtonState; /*IBP盘发车按钮状态(动态字段)*/
UINT32 IBPPressCycNum; /*IBP按下起始周期*/
UINT8 chTrainZeroSpeedState; /*列车非零速状态*/
} PsdDataStruct;
/*屏蔽门数据结构体*/
@@ -386,7 +387,7 @@ UINT32 GetStartDetectionCycNum(const UINT16 doorId);
*
*
*/
void SetStartDetectionState(const UINT16 doorId, const UINT32 detectionState);
void SetStartDetectionState(const UINT16 doorId, const UINT8 detectionState);
/*
*
* const UINT16 routeId, ID
@@ -402,7 +403,7 @@ UINT8 GetStartDetectionState(const UINT16 doorId);
*
*
*/
void SetStopDetectionState(const UINT16 doorId, const UINT32 detectionState);
void SetStopDetectionState(const UINT16 doorId, const UINT8 detectionState);
/*
*
@@ -541,7 +542,7 @@ UINT16 GetPsdEditGroupInfoFromPsdData(const UINT16 doorId);
*
*
*/
void SetVOBCDoorState(const UINT16 doorId, const UINT32 doorState);
void SetVOBCDoorState(const UINT16 doorId, const UINT8 doorState);
/*
* VOBC2CI车门状态信息
@@ -925,22 +926,22 @@ void SetPsdVideoQkRelateVobcId(const UINT16 wPsdId, const UINT16 wVobcId);
UINT16 GePsdVideoQkRelateVobcId(const UINT16 wPsdId);
/*
* ID屏蔽门异常打开状态
* ID屏蔽门异常状态
* const UINT16 wPsdId ID
* const UINT8 cExceptOpenState
* const UINT8 cExceptOpenState
*
* Created By LQ 2025.05.22
*/
void SetPsdExceptOpenState(const UINT16 wPsdId, const UINT8 cExceptOpenState);
void SetPsdExceptState(const UINT16 wPsdId, const UINT8 cExceptOpenState);
/*
* ID屏蔽门异常打开状态
* ID屏蔽门异常状态
* const UINT16 wPsdId ID
* 0x55
* 0xAA
* 0x55
* 0xAA
* Created By LQ 2025.05.22
*/
UINT8 GePsdExceptOpenState(const UINT16 wPsdId);
UINT8 GePsdExceptState(const UINT16 wPsdId);
/*
* ID屏蔽门故障隔离信息
@@ -1179,6 +1180,29 @@ UINT8 GetPsdButtonIbpState(const UINT16 doorId);
* >0:
*/
UINT8 SetIBPPressCycNum(const UINT16 doorId, const UINT32 startCycNum);
/*
* ID屏蔽门状态给 VOBC
* const UINT16 doorIdID
*
*/
UINT8 GetPsdStateToVobc(const UINT16 doorId);
/*
*
* const UINT16 doorId, ID
* const UINT32 detectionState,
*
*
*/
void SetTrainZeroSpeedState(const UINT16 doorId, const UINT8 detectionState);
/*
*
* const UINT16 doorId, ID
* 0:
* >0:
*/
UINT8 GetTrainZeroSpeedState(const UINT16 doorId);
#ifdef __cplusplus
}
#endif
+18 -4
View File
@@ -17,7 +17,7 @@
/*屏蔽门总数最大值*/
#define PSD_SUM_MAX ((UINT16)90U) /*定义屏蔽门数量最大值*/
#define PSD_SUM_MAX ((UINT16)200U) /*定义屏蔽门数量最大值*/
/*和屏蔽门关联的出站进路数目最大值*/
#define RALATED_OUT_STATION_ROUTE_SUM_MAX ((UINT16)10U) /*屏蔽门关联的出站进路数目最大值*/
@@ -198,9 +198,13 @@
#define VIDEO_QK_DRIVE_STATE_TESTING ((UINT8)0xccU) /*视频清客驱动状态—检测中*/
#define VIDEO_QK_DRIVE_STATE_INVALID ((UINT8)0xffU) /*视频清客驱动状态—无效*/
/*屏蔽门异常打开状态*/
#define PSD_EXCEPT_OPEN_NO ((UINT8)0xAAU) /*未异常打开*/
#define PSD_EXCEPT_OPEN_YES ((UINT8)0x55U) /*异常打开*/
/*屏蔽门异常状态*/
#define PSD_EXCEPT_NO ((UINT8)0xAAU) /*未异常*/
#define PSD_EXCEPT_YES ((UINT8)0x55U) /*异常(曾异常打开未取消)*/
/*屏蔽门异常取消方式*/
#define PSD_EXCEPT_CANCLE_ATS ((UINT8)0xAAU) /*ATS命令取消*/
#define PSD_EXCEPT_CANCLE_RCI ((UINT8)0x55U) /*未异常打开时联锁自动取消异常*/
/*OC-P旁路状态确认*/
#define OC_PSC_PL_CONFIRM_YES ((UINT8)0xaaU) /*OC-P旁路状态已确认*/
@@ -218,4 +222,14 @@
#define PSD_INCLUDE_ESB_NUM ((UINT8)10U) /*ESB个数*/
/*CI-VOBC屏蔽门状态*/
#define CI_IVOC_PSD_STATE_CLOSE ((UINT8)0xAAU) /*CI到IVOC屏蔽门关闭*/
#define CI_IVOC_PSD_STATE_OPEN ((UINT8)0x55U) /*CI到IVOC屏蔽门打开*/
#define CI_IVOC_PSD_STATE_PANGLU ((UINT8)0xCCU) /*CI到IVOC屏蔽门互锁解除*/
#define CI_IVOC_PSD_STATE_OPEN_EXCEPT ((UINT8)0x33U) /*CI到IVOC屏蔽门异常打开*/
#define PSD_TRAIN_ZERO_SPEED_YES ((UINT8)0x55U) /*列车零速*/
#define PSD_TRAIN_ZERO_SPEED_NO ((UINT8)0xAAU) /*列车非零速*/
#endif
@@ -163,6 +163,9 @@
#define ATS_CMD_APPLY_XICHE ((UINT8)0xB1) /*降级模式洗车请求*/
#define ATS_CMD_APPLY_PASSXICHE ((UINT8)0xB2) /*现地请求反向洗车命令-降级模式*/
#define ATS_CMD_CANCEL_PASSXICHE ((UINT8)0xB3) /*现地取消反向洗车命令-降级模式*/
#define ATS_CMD_CANCEL_PSD_EXCEPT ((UINT8)0xBA) /*现地取消站台门异常状态*/
#define ATS_CMD_CONNECT_ROUTE_RELEASE_ONE ((UINT8)0xBB) /*联络线接车进路解锁一次*/
#define ATS_CMD_CONNECT_ROUTE_RELEASE_TWO ((UINT8)0xBC) /*联络线接车进路解锁二次*/
/****联锁到其他联锁的命令宏定义****/
#define CI_CMD_PHYSEC_USING_APPLY ((UINT16)0x0001) /*物理区段征用申请*/
@@ -245,9 +248,10 @@
#define CI_BACK_GROUP_AUTO_ROUTE_SET_ERR ((UINT8)0x7e) /*组合自动进路自动属性设置失败*/
#define CI_BACK_AUTO_TRIGGER_SET_ERR (UINT8)0x85 /*进路的自动触发标志设置失败*/
#define CI_BACK_AUTO_TRIGGER_SET_ERR ((UINT8)0x85) /*进路的自动触发标志设置失败*/
#define CI_BACK_LEAD_ROUTE_CANCEL ((UINT8)0xA4) /*引导进路无法使用总取消解锁反馈*/
#define CI_BACK_COUPLINK_ROUTE_IDLE ((UINT8)0xAF) /*联挂进路内无被联挂车*/
#define CI_BACK_CONNECT_ROUTE_RELEASE ((UINT8)0xBB) /*联络线接车进路解锁条件不满足*/
/*信号机故障反馈*/
#define CI_BACK_SIG_START_OPEN ((UINT8)0x11) /*进路始端信号机开放*/
@@ -468,6 +472,48 @@
#define CI_BACK_ALLAUTO_RETURN_FLOOD_STATE_ERR ((UINT8)0x9C) /*全自动折返进路存在防淹门不满足*/
#define CI_BACK_ALLAUTO_RETURN_COUPROUTE_SET ((UINT8)0xB2) /*全自动折返联挂进路已办理*/
#define ATS_CI_INFO_TYPE_FIRST_LEN ((UINT16)11) /*ATS首次命令长度*/
#define ATS_CI_INFO_TYPE_SND_LEN ((UINT16)15) /*ATS再次命令长度*/
/* ATS二次命令帧首次消息结构体 */
typedef struct
{
UINT8 chFlag; /*首次消息接收状态*/
UINT32 dwCycle; /*首次消息接收周期号*/
UINT8 chAtsId; /*ATS编号:不为0时发送网关*/
UINT8 chRtuId; /*Rtu编号:不为0时发送现地,全0发ATS*/
UINT16 wIndex; /*操作站编号*/
UINT8 chTiocId; /*TIOC编号*/
UINT32 dwTime; /*请求时间*/
UINT16 wDevId; /*操作设备ID*/
}AtsFollowUpCmdFstStru;
/* ATS二次命令帧再次消息结构体 */
typedef struct
{
UINT8 chFlag; /*首次消息接收状态*/
UINT32 dwCycle; /*再次消息接收周期号*/
UINT8 chAtsId; /*ATS编号:不为0时发送网关*/
UINT8 chRtuId; /*Rtu编号:不为0时发送现地,全0发ATS*/
UINT16 wIndex; /*操作站编号*/
UINT8 chTiocId; /*TIOC编号*/
UINT32 dwTime; /*请求时间*/
UINT16 wDevId; /*操作设备ID*/
UINT32 dwCrc32; /*再次发送中Crc*/
}AtsFollowUpCmdSndStru;
/*二次命令帧反馈信息结构体 */
typedef struct
{
UINT8 chFlag; /*消息有效性*/
UINT8 chTiocId; /*TIOC编号*/
UINT8 chAtsId; /*Ats编号: 判断组包对象使用,不包含在组包内容中*/
UINT8 chRtuId; /*Rtu编号*/
UINT16 wIndex; /*操作站编号*/
UINT32 dwTime; /*时间*/
UINT8 chOpStatus; /*操作结果*/
UINT32 dwCrc32; /*CRC*/
}RCIFollowUpReplyStru;
#endif
+663 -8
View File
@@ -46,6 +46,36 @@ PSCToCiDataStruct* pscCiSendToAtsDataStru = NULL;
ReciveAtsCmdDataCycInfo szReciveAtsCmdDataCycInfo[ATS_SUM_MAX * 2U] = {0U}; /*收到ATS命令数据周期号信息数组*/
UINT16 gReciveAtsCmdDataDeviceSum = 0U; /*收到ATS命令数据设备数目*/
AtsFollowUpCmdFstStru gDansuoCancleMsgFst = { 0u }; /*取消单锁首次消息*/
RCIFollowUpReplyStru gDansuoCancleReplyFst = { 0u }; /*取消单锁首次确认*/
AtsFollowUpCmdSndStru gDansuoCancleMsgSnd = { 0u }; /*取消单锁二次消息*/
RCIFollowUpReplyStru gDansuoCancleReplySnd = { 0u }; /*取消单锁二次确认*/
AtsFollowUpCmdFstStru gSwitchUnflockMsgFst = { 0u }; /*道岔解封首次消息*/
RCIFollowUpReplyStru gSwitchUnflockReplyFst = { 0u }; /*道岔解封首次确认*/
AtsFollowUpCmdSndStru gSwitchUnflockMsgSnd = { 0u }; /*道岔解封二次消息*/
RCIFollowUpReplyStru gSwitchUnflockReplySnd = { 0u }; /*道岔解封二次确认*/
AtsFollowUpCmdFstStru gSecUnflockMsgFst = { 0u }; /*区段解封首次消息*/
RCIFollowUpReplyStru gSecUnflockReplyFst = { 0u }; /*区段解封首次确认*/
AtsFollowUpCmdSndStru gSecUnflockMsgSnd = { 0u }; /*区段解封二次消息*/
RCIFollowUpReplyStru gSecUnflockReplySnd = { 0u }; /*区段解封二次确认*/
AtsFollowUpCmdFstStru gSignalUnflockMsgFst = { 0u }; /*信号机解封首次消息*/
RCIFollowUpReplyStru gSignalUnflockReplyFst = { 0u }; /*信号机解封首次确认*/
AtsFollowUpCmdSndStru gSignalUnflockMsgSnd = { 0u }; /*信号机解封二次消息*/
RCIFollowUpReplyStru gSignalUnflockReplySnd = { 0u }; /*信号机解封二次确认*/
AtsFollowUpCmdFstStru gZRJMsgFst = { 0u }; /*总人解首次消息*/
RCIFollowUpReplyStru gZRJReplyFst = { 0u }; /*总人解首次确认*/
AtsFollowUpCmdSndStru gZRJMsgSnd = { 0u }; /*总人解二次消息*/
RCIFollowUpReplyStru gZRJReplySnd = { 0u }; /*总人解二次确认*/
AtsFollowUpCmdFstStru gCanclPsdExceptMsgFst = { 0u }; /*解除站台门异常首次消息*/
RCIFollowUpReplyStru gCanclPsdExceptReplyFst = { 0u }; /*解除站台门异常首次确认*/
AtsFollowUpCmdSndStru gCanclPsdExceptMsgSnd = { 0u }; /*解除站台门异常二次消息*/
RCIFollowUpReplyStru gCanclPsdExceptReplySnd = { 0u }; /*解除站台门异常二次确认*/
/*
* Ci到Ats逻辑区段已征用信息
* const UINT8* pDataBuf,
@@ -189,7 +219,6 @@ UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLengt
UINT32 dwCiAndAtsTimeOutTime = 0u; /*联锁与ATS通信中断时间*/
UINT32 dwCiCurappCycleTime = 0u; /*联锁当前周期*/
INT32 remainValidiy = 0; /*剩余时间是否有效*/
UINT16 wApplyDataLenth = 0U; /*应用层数据长度*/
UINT16 wTmpDataLen = 0U; /*数据长度临时记录变量*/
UINT16 wMsgLen = 0U; /*一条应用数据长度*/
UINT16 wMsgType = 0U; /*报文类型*/
@@ -198,7 +227,14 @@ UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLengt
UINT8 chCurSystemAreaState = 0U; /*当前系统区域状态*/
UINT32 dwReciveCmdDataAtsCycNum = 0U; /*收到ATS命令数据时ATS周期号*/
UINT32 dwSystemUpdateMainUseCycNum = 0U; /*系统主用起始周期号*/
UINT16 wPreCmdNum = 0U;/*上周期命令数:用于命令帧校验通过、二次信息校验失败时清除本次收到命令帧*/
UINT16 wCurCmdNum = 0U;/*命令帧解析后当前命令总数*/
AtsFollowUpCmdFstStru tempFstCmd[FOLLOWUP_MSGID_MAX] = { 0U };/*一次命令临时存储*/
AtsFollowUpCmdSndStru tempSndCmd[FOLLOWUP_MSGID_MAX] = { 0U };/*二次命令临时存储*/
UINT16 wIndex = 0U;/*临时信息存储索引*/
UINT16 wMsgTypeTmp = 0U;/*拷贝回全局变量的信息类型*/
AtsFollowUpCmdFstStru *pGlobalFst = NULL;
AtsFollowUpCmdSndStru *pGlobalSnd = NULL;
if ((NULL!= dataBuf) && (0u < dataLength))
{
chAtsInterfaceType = GetCiFunctionSwitchConfig(FUNC_ATS_INTERFACE_IDENTIFIER);
@@ -261,6 +297,8 @@ UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLengt
else
{
chRetVal = CI_SUCCESS;
/*先获取上一周期是存储进路办理命令数*/
wPreCmdNum = GetCiRevCmdStruCurSum();
while (wTmpDataLen < hlhtGalHead.totalDataLen)
{
@@ -321,6 +359,83 @@ UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLengt
debug_infor_printf((const)"\nATS/Xiandi %d Not Deal Cmd,Because chCurSystemAreaState %d\n", chDeciveId, chCurSystemAreaState);
}
break;
case ATS_CI_INFO_FST_DS_CANCEL:
case ATS_CI_INFO_FST_SWIUNFLOCK:
case ATS_CI_INFO_FST_FAULTUNLOCK:
case ATS_CI_INFO_FST_SECUNFLOCK:
case ATS_CI_INFO_FST_SIGUNFLOCK:
case ATS_CI_INFO_FST_ZONGRENJIE:
case ATS_CI_INFO_FST_PSD_UNEXCEPT:
chCurSystemAreaState = GetLocalCiBackUpPattern();
if (SYSTEM_WORK_MODE_MAIN == chCurSystemAreaState)
{
/*主用解析操作命令,必须检查当前该包数据是否已经处理过*/
dwReciveCmdDataAtsCycNum = GetReciveCmdDataAtsCycNum(chDevType, chDeciveId);
dwSystemUpdateMainUseCycNum = GetSystemUpdateMainUseCycNum();
if ((dwReciveCmdDataAtsCycNum < hlhtGalHead.crntOwnMsgSN) ||
(dwSystemUpdateMainUseCycNum <= hlhtGalHead.recvOppMsgSN))
{
/*当前ATS发送数据时的周期号大于接收到ATS数据时ATS周期号
ATS发送数据时的联锁周期号大于等于当前系统升级主用起始周期号*/
wIndex = (wMsgType - ATS_CI_INFO_FST_DS_CANCEL) / 4;
if ((FOLLOWUP_MSGID_MAX > wIndex)&&(ATS_CI_INFO_TYPE_FIRST_LEN == wMsgCheckLen))
{
chRetVal = ProcessCmdFirstMsgCheck(dataBuf, ii, &tempFstCmd[wIndex]);
ii += ATS_CI_INFO_TYPE_FIRST_LEN;
chExistCmdDataFlag = 1U; /*先设置存在命令数据标志有效,数据解析不过在下面置为无效*/
}
else
{
chRetVal = CI_ERROR;/*越界防护*/
}
}
else
{
ii += wMsgCheckLen;
/*已经被另外一机处理过了*/
debug_infor_printf((const)"\nATS/Xiandi %d Not Deal FstCmd%d,Because curCmd has been processed by another System,dwReciveCmdDataAtsCycNum %d dwSystemUpdateMainUseCycNum %d\n", chDeciveId, wMsgType, dwReciveCmdDataAtsCycNum, dwSystemUpdateMainUseCycNum);
}
}
break;
case ATS_CI_INFO_SND_DS_CANCEL:
case ATS_CI_INFO_SND_SWIUNFLOCK:
case ATS_CI_INFO_SND_FAULTUNLOCK:
case ATS_CI_INFO_SND_SECUNFLOCK:
case ATS_CI_INFO_SND_SIGUNFLOCK:
case ATS_CI_INFO_TYPE_SND_ZRJ:
case ATS_CI_INFO_SND_PSD_UNEXCEPT:
chCurSystemAreaState = GetLocalCiBackUpPattern();
if (SYSTEM_WORK_MODE_MAIN == chCurSystemAreaState)
{
/*主用解析操作命令,必须检查当前该包数据是否已经处理过*/
dwReciveCmdDataAtsCycNum = GetReciveCmdDataAtsCycNum(chDevType, chDeciveId);
dwSystemUpdateMainUseCycNum = GetSystemUpdateMainUseCycNum();
if ((dwReciveCmdDataAtsCycNum < hlhtGalHead.crntOwnMsgSN) ||
(dwSystemUpdateMainUseCycNum <= hlhtGalHead.recvOppMsgSN))
{
wIndex = (wMsgType - ATS_CI_INFO_SND_DS_CANCEL) / 4;
if ((FOLLOWUP_MSGID_MAX > wIndex) && (ATS_CI_INFO_TYPE_SND_LEN == wMsgCheckLen))
{
chRetVal = ProcessCmdSndMsgCheck(dataBuf, ii, &tempSndCmd[wIndex]);
ii += ATS_CI_INFO_TYPE_SND_LEN;
chExistCmdDataFlag = 1U; /*先设置存在命令数据标志有效,数据解析不过在下面置为无效*/
}
else
{
chRetVal = CI_ERROR;/*越界防护*/
}
}
else
{
ii += wMsgCheckLen;
/*已经被另外一机处理过了*/
debug_infor_printf((const)"\nATS/Xiandi %d Not Deal SndCmd%d,Because curCmd has been processed by another System,dwReciveCmdDataAtsCycNum %d dwSystemUpdateMainUseCycNum %d\n", chDeciveId, wMsgType, dwReciveCmdDataAtsCycNum, dwSystemUpdateMainUseCycNum);
}
}
break;
default:
chRetVal = CI_ERROR;
break;
@@ -340,20 +455,50 @@ UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLengt
}
if (CI_SUCCESS == chRetVal)
{
/*校验数据长度*/
if (hlhtGalHead.totalDataLen != ii - 31U)
if ((hlhtGalHead.totalDataLen != ii - (UINT16)31U) || (dataLength != hlhtGalHead.totalDataLen+ (UINT16)31U))
{
/* 31为应用数据帧头长度 */
chRetVal = CI_ERROR;
debug_infor_printf((char*)"Lenght Error \n");
}
if (CI_SUCCESS != chRetVal)
{
/*清除本次存储的命令信息*/
wCurCmdNum = GetCiRevCmdStruCurSum();/*当前命令信息数*/
ToaClearCmd();
for (wIndex = wPreCmdNum; wIndex <= wCurCmdNum; wIndex++)
{
(void)CommonMemSet(&CiRevCmdDataStru[wIndex], (UINT32)sizeof(CommandDataStruct), 0u, (UINT32)sizeof(CommandDataStruct));
}
}
else
{
;
/*将临时一二次信息拷贝到全局变量*/
for (wIndex = 0U; wIndex < FOLLOWUP_MSGID_MAX; wIndex++)
{
if (FLAG_SET == tempFstCmd[wIndex].chFlag)
{
wMsgTypeTmp = ATS_CI_INFO_FST_DS_CANCEL + wIndex*(UINT16)4U;
pGlobalFst = GetAtsFollowUpMsgFst(wMsgTypeTmp);
if (NULL != pGlobalFst)
{
(void)CommonMemCpy((void *)(pGlobalFst), (UINT32)sizeof(AtsFollowUpCmdFstStru), (const void *)(&tempFstCmd[wIndex]), (UINT32)sizeof(AtsFollowUpCmdFstStru));
}
}
if (FLAG_SET == tempSndCmd[wIndex].chFlag)
{
wMsgTypeTmp = ATS_CI_INFO_SND_DS_CANCEL + wIndex*(UINT16)4U;
pGlobalSnd = GetAtsFollowUpMsgSnd(wMsgTypeTmp);
if (NULL != pGlobalSnd)
{
(void)CommonMemCpy((void *)(pGlobalSnd), (UINT32)sizeof(AtsFollowUpCmdSndStru), (const void *)(&tempSndCmd[wIndex]), (UINT32)sizeof(AtsFollowUpCmdSndStru));
}
}
}
}
if (CI_SUCCESS == chRetVal)
{
@@ -578,6 +723,12 @@ UINT8 PackCiToAtsOrXianDiData(const UINT8 deviceId, const UINT8 targetDevType, c
; /*继续组包*/
}
}
if (CI_SUCCESS == chReval)
{
/*进行一次、二次回复单独信息帧组包*/
chReval = PackCiToAtsFollowUpMsg(ciToXianDiDataBuffer, &ii, targetDevType, PACK_ATS_TYPE_CENTER);
}
}
else
{
@@ -1297,6 +1448,9 @@ UINT8 FindFirstOrder(UINT8 SecondOrder)
case ATS_CMD_EMERG_XS_CANCEL_TWO:
reVal = ATS_CMD_EMERG_XS_CANCEL_ONE; /*取消紧急临时限速一次*/
break;
case ATS_CMD_CONNECT_ROUTE_RELEASE_TWO: /*联络线接车进路解锁二次*/
reVal = ATS_CMD_CONNECT_ROUTE_RELEASE_ONE; /*联络线接车进路解锁一次*/
break;
default:
reVal = 0u;
break;
@@ -2065,7 +2219,7 @@ UINT16 TransCiToAtsSwitchZzjInfo(OcToATSSwitchZzjData* ciSendAtsSwitchZzjData, U
}
else
{
/*道岔没被驱动四开,此转辙机状态设置为正常*/
/*道岔没被驱动四开,此转辙机状态设置为故障*/
ciSendAtsSwitchZzjData[wSwitchNum].szSwitchIncldeZzjState[jj] = OC_TO_ATS_SWITCH_ZZJ_ALARM;
}
}
@@ -3622,7 +3776,8 @@ UINT8 ReciveAtsCmdDeal(const UINT8* dataBuf, UINT16* dataIndex,const UINT16 wDat
}
if (CI_ERROR == chRetVal)
{/*包内有数据错误,丢包处理*/
{
/*包内有数据错误,丢包处理*/
/*清除这本包数据*/
ToaClearCmd();
commandTotalSum = 0u;
@@ -3931,3 +4086,503 @@ void PackRcOrCiDeciveCommonState(UINT8* ciToXianDiDataBuffer, UINT16* ii)
/*入参检查失败,不处理*/
}
}
/**
* @brief ATS对应的首次消息
* @param[in] const UINT16 wMsgType,
* @return ATS二次信息帧中的首次消息
* @note by fan 20260602
*/
AtsFollowUpCmdFstStru * GetAtsFollowUpMsgFst(UINT16 chMsgType)
{
AtsFollowUpCmdFstStru* rtnVal = NULL;
switch (chMsgType)
{
case ATS_CI_INFO_FST_DS_CANCEL:
rtnVal = &gDansuoCancleMsgFst;
break;
case ATS_CI_INFO_FST_SWIUNFLOCK:
rtnVal = &gSwitchUnflockMsgFst;
break;
case ATS_CI_INFO_FST_FAULTUNLOCK:
break;
case ATS_CI_INFO_FST_SECUNFLOCK:
rtnVal = &gSecUnflockMsgFst;
break;
case ATS_CI_INFO_FST_SIGUNFLOCK:
rtnVal = &gSignalUnflockMsgFst;
break;
case ATS_CI_INFO_FST_ZONGRENJIE:
break;
case ATS_CI_INFO_FST_PSD_UNEXCEPT:
break;
default:
break;
}
return rtnVal;
}
/**
* @brief ATS对应的二次消息
* @param[in] const UINT16 wMsgType,
* @return ATS二次信息帧中的再次消息
* @note by fan 20260602
*/
AtsFollowUpCmdSndStru * GetAtsFollowUpMsgSnd(UINT16 chMsgType)
{
AtsFollowUpCmdSndStru* rtnVal = NULL;
switch (chMsgType)
{
case ATS_CI_INFO_SND_DS_CANCEL:
rtnVal = &gDansuoCancleMsgSnd;
break;
case ATS_CI_INFO_SND_SWIUNFLOCK:
rtnVal = &gSwitchUnflockMsgSnd;
break;
case ATS_CI_INFO_SND_FAULTUNLOCK:
break;
case ATS_CI_INFO_SND_SECUNFLOCK:
rtnVal = &gSecUnflockMsgSnd;
break;
case ATS_CI_INFO_SND_SIGUNFLOCK:
rtnVal = &gSignalUnflockMsgSnd;
break;
case ATS_CI_INFO_TYPE_SND_ZRJ:
break;
case ATS_CI_INFO_SND_PSD_UNEXCEPT:
break;
default:
break;
}
return rtnVal;
}
/**
* @brief ATS对应的首次反馈消息
* @param[in] const UINT16 wMsgType,
* @return ATS二次信息帧中的首次反馈
* @note by fan 20260602
*/
RCIFollowUpReplyStru * GetAtsFollowUpReplyFst(UINT16 chMsgType)
{
RCIFollowUpReplyStru* rtnVal = NULL;
switch (chMsgType)
{
case RCI_ATS_INFO_FST_DS_CANCEL:
rtnVal = &gDansuoCancleReplyFst;
break;
case RCI_ATS_INFO_FST_SWIUNFLOCK:
rtnVal = &gSwitchUnflockReplyFst;
break;
case RCI_ATS_INFO_FST_FAULTUNLOCK:
break;
case RCI_ATS_INFO_FST_SECUNFLOCK:
rtnVal = &gSecUnflockReplyFst;
break;
case RCI_ATS_INFO_FST_SIGUNFLOCK:
rtnVal = &gSignalUnflockReplyFst;
break;
case RCI_ATS_INFO_FST_ZONGRENJIE:
break;
case RCI_ATS_INFO_FST_PSD_UNEXCEPT:
break;
default:
break;
}
return rtnVal;
}
/**
* @brief ATS对应的再次反馈消息
* @param[in] const UINT16 wMsgType,
* @return ATS二次信息帧中的再次反馈
* @note by fan 20260602
*/
RCIFollowUpReplyStru * GetAtsFollowUpReplySnd(UINT16 chMsgType)
{
RCIFollowUpReplyStru* rtnVal = NULL;
switch (chMsgType)
{
case RCI_ATS_INFO_SND_DS_CANCEL:
rtnVal = &gDansuoCancleReplySnd;
break;
case RCI_ATS_INFO_SND_SWIUNFLOCK:
rtnVal = &gSwitchUnflockReplySnd;
break;
case RCI_ATS_INFO_SND_FAULTUNLOCK:
break;
case RCI_ATS_INFO_SND_SECUNFLOCK:
rtnVal = &gSecUnflockReplySnd;
break;
case RCI_ATS_INFO_SND_SIGUNFLOCK:
rtnVal = &gSignalUnflockReplySnd;
break;
case RCI_ATS_INFO_SND_ZRJ:
break;
case RCI_ATS_INFO_SND_PSD_UNEXCEPT:
break;
default:
break;
}
return rtnVal;
}
/**
* @brief 1ATS命令信息
* @param[in] const UINT16 wMsgType,
* @return void
* @note by fan 20260603
*/
void ClearAtsCmdMsgFst(UINT16 chMsgType)
{
switch (chMsgType)
{
case ATS_CI_INFO_FST_DS_CANCEL:
(void)CommonMemSet((void*)&gDansuoCancleMsgFst, (UINT32)sizeof(gDansuoCancleMsgFst), (UINT8)0U, (UINT32)sizeof(gDansuoCancleMsgFst));
break;
case ATS_CI_INFO_FST_SWIUNFLOCK:
(void)CommonMemSet((void*)&gSwitchUnflockMsgFst, (UINT32)sizeof(gSwitchUnflockMsgFst), (UINT8)0U, (UINT32)sizeof(gSwitchUnflockMsgFst));
break;
case ATS_CI_INFO_FST_FAULTUNLOCK:
break;
case ATS_CI_INFO_FST_SECUNFLOCK:
(void)CommonMemSet((void*)&gSecUnflockMsgFst, (UINT32)sizeof(gSecUnflockMsgFst), (UINT8)0U, (UINT32)sizeof(gSecUnflockMsgFst));
break;
case ATS_CI_INFO_FST_SIGUNFLOCK:
(void)CommonMemSet((void*)&gSignalUnflockMsgFst, (UINT32)sizeof(gSignalUnflockMsgFst), (UINT8)0U, (UINT32)sizeof(gSignalUnflockMsgFst));
break;
case ATS_CI_INFO_FST_ZONGRENJIE:
break;
case ATS_CI_INFO_FST_PSD_UNEXCEPT:
break;
default:
break;
}
}
/**
* @brief
* @param[in] const UINT16 wMsgType,
* @return void
* @note by fan 20260603
*/
void ClearAtsCmdReplyFst(UINT16 chMsgType)
{
switch (chMsgType)
{
case RCI_ATS_INFO_FST_DS_CANCEL:
(void)CommonMemSet((void*)&gDansuoCancleReplyFst, (UINT32)sizeof(gDansuoCancleReplyFst), (UINT8)0U, (UINT32)sizeof(gDansuoCancleReplyFst));
break;
case RCI_ATS_INFO_FST_SWIUNFLOCK:
(void)CommonMemSet((void*)&gSwitchUnflockReplyFst, (UINT32)sizeof(gSwitchUnflockReplyFst), (UINT8)0U, (UINT32)sizeof(gSwitchUnflockReplyFst));
break;
case RCI_ATS_INFO_FST_FAULTUNLOCK:
break;
case RCI_ATS_INFO_FST_SECUNFLOCK:
(void)CommonMemSet((void*)&gSecUnflockReplyFst, (UINT32)sizeof(gSecUnflockReplyFst), (UINT8)0U, (UINT32)sizeof(gSecUnflockReplyFst));
break;
case RCI_ATS_INFO_FST_SIGUNFLOCK:
(void)CommonMemSet((void*)&gSignalUnflockReplyFst, (UINT32)sizeof(gSignalUnflockReplyFst), (UINT8)0U, (UINT32)sizeof(gSignalUnflockReplyFst));
break;
case RCI_ATS_INFO_FST_ZONGRENJIE:
break;
case RCI_ATS_INFO_FST_PSD_UNEXCEPT:
break;
default:
break;
}
}
/**
* @brief 2ATS命令信息
* @param[in] const UINT16 wMsgType,
* @return void
* @note by fan 20260603
*/
void ClearAtsCmdMsgSnd(UINT16 chMsgType)
{
switch (chMsgType)
{
case ATS_CI_INFO_SND_DS_CANCEL:
(void)CommonMemSet((void*)&gDansuoCancleMsgSnd, (UINT32)sizeof(gDansuoCancleMsgSnd), (UINT8)0U, (UINT32)sizeof(gDansuoCancleMsgSnd));
break;
case ATS_CI_INFO_SND_SWIUNFLOCK:
(void)CommonMemSet((void*)&gSwitchUnflockMsgSnd, (UINT32)sizeof(gSwitchUnflockMsgSnd), (UINT8)0U, (UINT32)sizeof(gSwitchUnflockMsgSnd));
break;
case ATS_CI_INFO_SND_FAULTUNLOCK:
break;
case ATS_CI_INFO_SND_SECUNFLOCK:
(void)CommonMemSet((void*)&gSecUnflockMsgSnd, (UINT32)sizeof(gSecUnflockMsgSnd), (UINT8)0U, (UINT32)sizeof(gSecUnflockMsgSnd));
break;
case ATS_CI_INFO_SND_SIGUNFLOCK:
(void)CommonMemSet((void*)&gSignalUnflockMsgSnd, (UINT32)sizeof(gSignalUnflockMsgSnd), (UINT8)0U, (UINT32)sizeof(gSignalUnflockMsgSnd));
break;
case ATS_CI_INFO_TYPE_SND_ZRJ:
break;
case ATS_CI_INFO_SND_PSD_UNEXCEPT:
break;
default:
break;
}
}
/**
* @brief
* @param[in] const UINT16 wMsgType,
* @return void
* @note by fan 20260603
*/
void ClearAtsCmdReplySnd(UINT16 chMsgType)
{
switch (chMsgType)
{
case RCI_ATS_INFO_SND_DS_CANCEL:
(void)CommonMemSet((void*)&gDansuoCancleReplySnd, (UINT32)sizeof(gDansuoCancleReplySnd), (UINT8)0U, (UINT32)sizeof(gDansuoCancleReplySnd));
break;
case RCI_ATS_INFO_SND_SWIUNFLOCK:
(void)CommonMemSet((void*)&gSwitchUnflockReplySnd, (UINT32)sizeof(gSwitchUnflockReplySnd), (UINT8)0U, (UINT32)sizeof(gSwitchUnflockReplySnd));
break;
case RCI_ATS_INFO_SND_FAULTUNLOCK:
break;
case RCI_ATS_INFO_SND_SECUNFLOCK:
(void)CommonMemSet((void*)&gSecUnflockReplySnd, (UINT32)sizeof(gSecUnflockReplySnd), (UINT8)0U, (UINT32)sizeof(gSecUnflockReplySnd));
break;
case RCI_ATS_INFO_SND_SIGUNFLOCK:
(void)CommonMemSet((void*)&gSignalUnflockReplySnd, (UINT32)sizeof(gSignalUnflockReplySnd), (UINT8)0U, (UINT32)sizeof(gSignalUnflockReplySnd));
break;
case RCI_ATS_INFO_SND_ZRJ:
break;
case RCI_ATS_INFO_SND_PSD_UNEXCEPT:
break;
default:
break;
}
}
/**
* @brief ATS/
* @param[in] const UINT8* dataBuf,
* @param[in] UINT16* dataIndex,
* @param[Out] AtsFollowUpCmdFstStru* pMsgFst
* @return CI_ERROR CI_SUCCESS
* @note by fan 20260602
*/
UINT8 ProcessCmdFirstMsgCheck(const UINT8* dataBuf, UINT16 dataIndex, AtsFollowUpCmdFstStru* pMsgFst)
{
UINT8 chRetVal = CI_ERROR;
UINT16 ii = 0U;
UINT32 dwCurCyc = Get2oo2CurCycleNum();
if ((NULL != dataBuf) && (0U != dataIndex)&&(NULL != pMsgFst))
{
chRetVal = CI_SUCCESS;
ii = dataIndex;
/*无条件更新最新一次命令*/
pMsgFst->chAtsId = dataBuf[ii++];
pMsgFst->chRtuId = dataBuf[ii++];
pMsgFst->wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */
ii += 2u;
pMsgFst->chTiocId = dataBuf[ii++];
pMsgFst->dwTime = LongFromChar(&dataBuf[ii]); /* 请求时间 */
ii += 4u;
pMsgFst->wDevId = ShortFromChar(&dataBuf[ii]); /* 设备编号 */
ii += 2u;
if (((0U == pMsgFst->chAtsId) || (0U == pMsgFst->chRtuId))
&&(0U<pMsgFst->wIndex)
&& (0U < pMsgFst->wDevId) && (UINT16_MAX > pMsgFst->wDevId)
&& (0U < pMsgFst->chTiocId) && (CI_SUM_MAX> pMsgFst->chTiocId))
{
pMsgFst->chFlag = FLAG_SET;
pMsgFst->dwCycle = dwCurCyc;
}
else
{
chRetVal = CI_ERROR;
}
}
return chRetVal;
}
/**
* @brief ATS/
* @param[in] const UINT8* dataBuf,
* @param[in] UINT16* dataIndex,
* @param[Out] AtsFollowUpCmdSndStru* pMsgSnd
* @return CI_ERROR CI_SUCCESS
* @note by fan 20260602
*/
UINT8 ProcessCmdSndMsgCheck(const UINT8* dataBuf, UINT16 dataIndex, AtsFollowUpCmdSndStru* pMsgSnd)
{
UINT8 chRetVal = CI_ERROR;
UINT16 ii = 0U;
UINT32 dwCurCyc = Get2oo2CurCycleNum();
if ((NULL != dataBuf) && (0U != dataIndex) && (NULL != pMsgSnd))
{
chRetVal = CI_SUCCESS;
ii = dataIndex;
pMsgSnd->chAtsId = dataBuf[ii++];
pMsgSnd->chRtuId = dataBuf[ii++];
pMsgSnd->wIndex = ShortFromChar(&dataBuf[ii]); /* 操作站编号 */
ii += 2u;
pMsgSnd->chTiocId = dataBuf[ii++];
pMsgSnd->dwTime = LongFromChar(&dataBuf[ii]); /* 请求时间 */
ii += 4u;
pMsgSnd->wDevId = ShortFromChar(&dataBuf[ii]); /* 设备编号 */
ii += 2u;
pMsgSnd->dwCrc32 = LongFromChar(&dataBuf[ii]); /* CRC32 */
ii += 4u;
if (((0U == pMsgSnd->chAtsId) || (0U == pMsgSnd->chRtuId))
&& (0U<pMsgSnd->wIndex)
&& (0U < pMsgSnd->wDevId) && (UINT16_MAX > pMsgSnd->wDevId)
&& (0U < pMsgSnd->chTiocId) && (CI_SUM_MAX> pMsgSnd->chTiocId))
{
pMsgSnd->chFlag = FLAG_SET;
pMsgSnd->dwCycle = dwCurCyc;
}
else
{
chRetVal = CI_ERROR;
}
}
return chRetVal;
}
/**
* @brief ATS//
* @brief ATS通用站场状态处理
* @param[in] UINT8* ciToXianDiDataBuffer CI组包给ATS或现地的数据数组
* @param[out] UINT16* wDataIndex CI组包给ATS或现地的数据索引
* @param[in] const UINT8 chTargetType,
* @param[in] const UINT8 chAtsType, ats(0x03)
* @return
* @note by fan 20260602
*/
UINT8 PackCiToAtsFollowUpMsg(UINT8* ciToXianDiDataBuffer, UINT16* wDataIndex, UINT8 chTargetType, UINT8 chAtsType)
{
UINT8 reVal = CI_ERROR;
UINT16 ii = 0U;/*游标*/
UINT16 j = 0U;
UINT16 wMsgIndex = 0u;/*命令帧类型 遍历使用*/
RCIFollowUpReplyStru * strCfmTemp = NULL;/*回复信息指针*/
UINT16 wMagDataLenIndex = 0U;
UINT16 wMagLen = 0U;/*单信息长度记录*/
UINT8 chPackCheck = CI_ERROR;/*检查组包设备是否与消息对应*/
UINT32 dwCurCyc = Get2oo2CurCycleNum();
if ((NULL != ciToXianDiDataBuffer) && (NULL != wDataIndex) &&
((CI_SYSTEM_TYPE_XIANDI == chTargetType)||(CI_SYSTEM_TYPE_ATS == chTargetType)))
{
ii = *wDataIndex;
for (j = 0U; j < FOLLOWUP_MSGID_MAX; j++)
{
wMsgIndex = (UINT16)0x0300U + j* (UINT16)4U + (UINT16)2U;
/*获取首次消息反馈*/
strCfmTemp = GetAtsFollowUpReplyFst(wMsgIndex);
/*校验内容:消息有效、消息属于对应设备*/
if ((NULL != strCfmTemp)&&(dwCurCyc == strCfmTemp->dwTime))
{
if ((0U < strCfmTemp->chAtsId) && (CI_SYSTEM_TYPE_ATS == chTargetType) && (PACK_ATS_TYPE_GATEWAY == chAtsType))
{
/*atsID不为0、对应设备为网关*/
chPackCheck = CI_SUCCESS;
}
else if ((0U < strCfmTemp->chRtuId) && (CI_SYSTEM_TYPE_XIANDI == chTargetType))
{
/*Rtu ID不为0、对应设备为现地*/
chPackCheck = CI_SUCCESS;
}
else if ((0U == strCfmTemp->chAtsId)&&(0U == strCfmTemp->chRtuId)&&(CI_SYSTEM_TYPE_ATS == chTargetType) && (PACK_ATS_TYPE_CENTER == chAtsType))
{
/*全0 给ATS组包*/
chPackCheck = CI_SUCCESS;
}
else
{
chPackCheck = CI_ERROR;/*非本设备*/
}
if(CI_SUCCESS == chPackCheck)
{
wMagDataLenIndex = ii;
ii += 2U;
ShortToChar(wMsgIndex, &ciToXianDiDataBuffer[ii]);/* 报文类型 */
ii += 2u;
/* 预留2字节 */
ii += 2u;
ciToXianDiDataBuffer[ii++] = strCfmTemp->chTiocId; /*RC/CI编号*/
ciToXianDiDataBuffer[ii++] = strCfmTemp->chRtuId; /*RTU id*/
ShortToChar(strCfmTemp->wIndex , &ciToXianDiDataBuffer[ii]);/* 操作站 */
ii += 2u;
LongToChar(strCfmTemp->dwTime, &ciToXianDiDataBuffer[ii]); /* 收到请求时间 */
ii += 4U;
ciToXianDiDataBuffer[ii++] = strCfmTemp->chOpStatus; /*反馈*/
LongToChar(strCfmTemp->dwCrc32, &ciToXianDiDataBuffer[ii]); /* CRC */
ii += 4U;
wMagLen = ii - wMagDataLenIndex - 2U;
/* 组数据长度 */
ShortToChar(wMagLen, &ciToXianDiDataBuffer[wMagDataLenIndex]);
/*修改反馈状态*/
}
}
if ((NULL != strCfmTemp)&& (dwCurCyc != strCfmTemp->dwTime))
{
/*非本周期*/
strCfmTemp->chFlag = FLAG_UNSET;
}
wMsgIndex = (UINT16)0x0300U + j* (UINT16)4U + (UINT16)4U;
/*获取再次次消息反馈*/
strCfmTemp = GetAtsFollowUpReplySnd(wMsgIndex);
if ((NULL != strCfmTemp) && (dwCurCyc == strCfmTemp->dwTime))
{
/*校验内容:本周期消息、消息属于对应设备*/
if ((0U < strCfmTemp->chAtsId) && (CI_SYSTEM_TYPE_ATS == chTargetType) && (PACK_ATS_TYPE_GATEWAY == chAtsType))
{
/*atsID不为0、对应设备为网关*/
chPackCheck = CI_SUCCESS;
}
else if ((0U < strCfmTemp->chRtuId) && (CI_SYSTEM_TYPE_XIANDI == chTargetType))
{
/*Rtu ID不为0、对应设备为现地*/
chPackCheck = CI_SUCCESS;
}
else if ((0U == strCfmTemp->chAtsId)&&(0U == strCfmTemp->chRtuId)&&(CI_SYSTEM_TYPE_ATS == chTargetType) && (PACK_ATS_TYPE_CENTER == chAtsType))
{
/*全0 给ATS组包*/
chPackCheck = CI_SUCCESS;
}
else
{
chPackCheck = CI_ERROR;/*非本设备*/
}
if (CI_SUCCESS == chPackCheck)
{
wMagDataLenIndex = ii;
ii += 2U;
ShortToChar(wMsgIndex, &ciToXianDiDataBuffer[ii]);/* 报文类型 */
ii += 2u;
/* 预留2字节 */
ii += 2u;
ciToXianDiDataBuffer[ii++] = strCfmTemp->chTiocId; /*RC/CI编号*/
ciToXianDiDataBuffer[ii++] = strCfmTemp->chRtuId; /*RTU id*/
ShortToChar(strCfmTemp->wIndex, &ciToXianDiDataBuffer[ii]);/* 操作站 */
ii += 2u;
LongToChar(strCfmTemp->dwTime, &ciToXianDiDataBuffer[ii]); /* 收到请求时间 */
ii += 4U;
ciToXianDiDataBuffer[ii++] = strCfmTemp->chOpStatus; /*反馈*/
LongToChar(strCfmTemp->dwCrc32, &ciToXianDiDataBuffer[ii]); /* CRC */
ii += 4U;
wMagLen = ii - wMagDataLenIndex - 2U;
/* 组数据长度 */
ShortToChar(wMagLen, &ciToXianDiDataBuffer[wMagDataLenIndex]);
/* 清零二次反馈*/
}
}
if ((NULL != strCfmTemp) && (dwCurCyc != strCfmTemp->dwTime))
{
/*非本周期*/
ClearAtsCmdReplySnd(wMsgIndex);
}
}
*wDataIndex = ii;
reVal = CI_SUCCESS;
}
else
{
;/*失败*/
}
return reVal;
}
@@ -75,11 +75,57 @@
#define RCI_ATS_INFO_TYPE_DEVICE_STATE ((UINT16)0x0203U) /*RCI->ATS设备状态信息,间隔1周期发送*/
#define ATS_CI_INFO_TYPE_HEART_STATE ((UINT16)0x0204U) /*ATS->CI心跳状态信息,周期发送*/
#define ATS_CI_INFO_TYPE_CMD_CONTROL ((UINT16)0x0205U) /*ATS->CI命令控制信息,ATS触发发送*/
#define ATS_CI_INFO_TYPE_GATEWAY_COMMON ((UINT16)0x0206U) /*网关->CI既有信息帧 ATS触发发送*/
#define RCI_ATS_INFO_TYPE_GATEWAY_COMMON ((UINT16)0x0207U) /*RC->网关既有信息汇报,周期发送*/
#define RCI_ATS_INFO_TYPE_GATEWAY_HEART ((UINT16)0x0208U) /*CI->网关周期心跳*/
#define ATS_CI_INFO_FST_DS_CANCEL ((UINT16)0x0301U) /*ATS->CI道岔单解一次命令,ATS触发发送*/
#define RCI_ATS_INFO_FST_DS_CANCEL ((UINT16)0x0302U) /*RCI->ATS道岔单解首次回复,触发单解一次后发送*/
#define ATS_CI_INFO_SND_DS_CANCEL ((UINT16)0x0303U) /*ATS->CI道岔单解二次命令,ATS触发发送*/
#define RCI_ATS_INFO_SND_DS_CANCEL ((UINT16)0x0304U) /*RCI->ATS道岔单解再次回复,触发单解二次后发送*/
#define ATS_CI_INFO_FST_SWIUNFLOCK ((UINT16)0x0305U) /*ATS->CI道岔解封一次命令,ATS触发发送*/
#define RCI_ATS_INFO_FST_SWIUNFLOCK ((UINT16)0x0306U) /*RCI->ATS道岔解封首次回复,触发解封一次后发送*/
#define ATS_CI_INFO_SND_SWIUNFLOCK ((UINT16)0x0307U) /*ATS->CI道岔解封二次命令,ATS触发发送*/
#define RCI_ATS_INFO_SND_SWIUNFLOCK ((UINT16)0x0308U) /*RCI->ATS道岔解封再次回复,触发解封二次后发送*/
#define ATS_CI_INFO_FST_FAULTUNLOCK ((UINT16)0x0309U) /*ATS->CI 区故解 预留*/
#define RCI_ATS_INFO_FST_FAULTUNLOCK ((UINT16)0x030AU) /*RCI->ATS区故解一次回复 预留*/
#define ATS_CI_INFO_SND_FAULTUNLOCK ((UINT16)0x030BU) /*ATS->CI区故解二次 预留*/
#define RCI_ATS_INFO_SND_FAULTUNLOCK ((UINT16)0x030CU) /*RCI->ATS区故解二次 预留*/
#define ATS_CI_INFO_FST_SECUNFLOCK ((UINT16)0x030DU) /*ATS->CI区段解封一次命令,ATS触发发送*/
#define RCI_ATS_INFO_FST_SECUNFLOCK ((UINT16)0x030EU) /*RCI->ATS区段解封首次回复,触发解封一次后发送*/
#define ATS_CI_INFO_SND_SECUNFLOCK ((UINT16)0x030FU) /*ATS->CI区段解封二次命令,ATS触发发送*/
#define RCI_ATS_INFO_SND_SECUNFLOCK ((UINT16)0x0310U) /*RCI->ATS区段解封再次回复,触发解封二次后发送*/
#define ATS_CI_INFO_FST_SIGUNFLOCK ((UINT16)0x0311U) /*ATS->CI信号机解封一次命令,ATS触发发送*/
#define RCI_ATS_INFO_FST_SIGUNFLOCK ((UINT16)0x0312U) /*RCI->ATS信号机解封首次回复,触发解封一次后发送*/
#define ATS_CI_INFO_SND_SIGUNFLOCK ((UINT16)0x0313U) /*ATS->CI信号机解封二次命令,ATS触发发送*/
#define RCI_ATS_INFO_SND_SIGUNFLOCK ((UINT16)0x0314U) /*RCI->ATS信号机解封再次回复,触发解封二次后发送*/
#define ATS_CI_INFO_FST_ZONGRENJIE ((UINT16)0x0315U) /*ATS->CI总人解一次命令,ATS触发发送*/
#define RCI_ATS_INFO_FST_ZONGRENJIE ((UINT16)0x0316U) /*RCI->ATS总人解首次回复,触发一次后发送*/
#define ATS_CI_INFO_TYPE_SND_ZRJ ((UINT16)0x0317U) /*ATS->CI总人解二次命令,ATS触发发送*/
#define RCI_ATS_INFO_SND_ZRJ ((UINT16)0x0318U) /*RCI->ATS总人解再次回复,触发二次后发送*/
#define ATS_CI_INFO_FST_PSD_UNEXCEPT ((UINT16)0x0319U) /*ATS->CI站台门异常解除一次命令,ATS触发发送*/
#define RCI_ATS_INFO_FST_PSD_UNEXCEPT ((UINT16)0x031AU) /*RCI->ATS站台门异常解除首次回复,触发一次后发送*/
#define ATS_CI_INFO_SND_PSD_UNEXCEPT ((UINT16)0x031BU) /*ATS->CI站台门异常解除二次命令,ATS触发发送*/
#define RCI_ATS_INFO_SND_PSD_UNEXCEPT ((UINT16)0x031CU) /*RCI->ATS站台门异常解除再次回复,触发二次后发送*/
#define SHOW_2OO2_STATE_MAIN ((UINT8)0x55U) /*显示主备系状态-主系*/
#define SHOW_2OO2_STATE_BACKUP ((UINT8)0xaaU) /*显示主备系状态-备系*/
#define SHOW_2OO2_STATE_UNKNOW ((UINT8)0xFFU) /*显示主备系状态-未知*/
#define CONFIRM_REPLY_SUCCESS ((UINT8)1u) /*确认成功*/
#define CONFIRM_FST_UNSET ((UINT8)2u) /*首次回复未设置该状态*/
#define CONFIRM_FST_BELONGERROR ((UINT8)3u) /*首次回复设备不属于本集中区*/
#define CONFIRM_DEVICE_NONROUTE_SET ((UINT8)5u) /*回复非进路调车已办理*/
#define CONFIRM_SND_DIFFCMD ((UINT8)2u) /*再次回复操作不一致*/
#define CONFIRM_SND_FIRST_NOTFIND ((UINT8)3u) /*再次回首次命令未执行*/
#define CONFIRM_SND_CRCFAIL ((UINT8)4u) /*再次回复CRC校验失败*/
#define FOLLOWUP_CONFIRM_TIMEOUT ((UINT16)400u) /*首次消息等待二次消息超时时间*/
#define PACK_ATS_TYPE_CENTER ((UINT8) 0xAAU)/*ATS二次信息回复组包中区分ATS与网关使用后,代表ATS*/
#define PACK_ATS_TYPE_GATEWAY ((UINT8) 0x55U) /*ATS二次信息回复组包中区分ATS与网关使用后,代表网关*/
#define FOLLOWUP_MSGID_MAX ((UINT16)7) /*暂定二次命令种类,遍历使用*/
/*执行电插箱相关信息*/
typedef struct s_PlusBoxDataSendATS
{
@@ -143,6 +189,36 @@ extern UINT32 FirstCmdId; /*
extern ReciveAtsCmdDataCycInfo szReciveAtsCmdDataCycInfo[ATS_SUM_MAX * 2U]; /*收到ATS命令数据周期号信息数组*/
extern UINT16 gReciveAtsCmdDataDeviceSum; /*收到ATS命令数据设备数目*/
extern AtsFollowUpCmdFstStru gDansuoCancleMsgFst;/*取消单锁首次消息*/
extern RCIFollowUpReplyStru gDansuoCancleReplyFst;/*取消单锁首次确认*/
extern AtsFollowUpCmdSndStru gDansuoCancleMsgSnd; /*取消单锁二次消息*/
extern RCIFollowUpReplyStru gDansuoCancleReplySnd; /*取消单锁二次确认*/
extern AtsFollowUpCmdFstStru gSwitchUnflockMsgFst; /*道岔解封首次消息*/
extern RCIFollowUpReplyStru gSwitchUnflockReplyFst; /*道岔解封首次确认*/
extern AtsFollowUpCmdSndStru gSwitchUnflockMsgSnd; /*道岔解封二次消息*/
extern RCIFollowUpReplyStru gSwitchUnflockReplySnd; /*道岔解封二次确认*/
extern AtsFollowUpCmdFstStru gSecUnflockMsgFst; /*区段解封首次消息*/
extern RCIFollowUpReplyStru gSecUnflockReplyFst; /*区段解封首次确认*/
extern AtsFollowUpCmdSndStru gSecUnflockMsgSnd; /*区段解封二次消息*/
extern RCIFollowUpReplyStru gSecUnflockReplySnd; /*区段解封二次确认*/
extern AtsFollowUpCmdFstStru gSignalUnflockMsgFst; /*信号机解封首次消息*/
extern RCIFollowUpReplyStru gSignalUnflockReplyFst; /*信号机解封首次确认*/
extern AtsFollowUpCmdSndStru gSignalUnflockMsgSnd; /*信号机解封二次消息*/
extern RCIFollowUpReplyStru gSignalUnflockReplySnd; /*信号机解封二次确认*/
extern AtsFollowUpCmdFstStru gZRJMsgFst; /*总人解首次消息*/
extern RCIFollowUpReplyStru gZRJReplyFst; /*总人解首次确认*/
extern AtsFollowUpCmdSndStru gZRJMsgSnd; /*总人解二次消息*/
extern RCIFollowUpReplyStru gZRJReplySnd; /*总人解二次确认*/
extern AtsFollowUpCmdFstStru gCanclPsdExceptMsgFst; /*解除站台门异常首次消息*/
extern RCIFollowUpReplyStru gCanclPsdExceptReplyFst; /*解除站台门异常首次确认*/
extern AtsFollowUpCmdSndStru gCanclPsdExceptMsgSnd; /*解除站台门异常二次消息*/
extern RCIFollowUpReplyStru gCanclPsdExceptReplySnd; /*解除站台门异常二次确认*/
/*
*
* const UINT8* dataBuf,
@@ -502,6 +578,30 @@ void SendAtsCommonStationStateDeal(UINT8* ciToXianDiDataBuffer, UINT16* wDataInd
*/
UINT8 ReciveAtsCmdDeal(const UINT8* dataBuf, UINT16* dataIndex, const UINT16 wDataLength);
/**
* @brief ATS二次命令帧中一次命令解析处理
* @param[in] const UINT8* dataBuf,
* @param[in] UINT16 dataIndex,
* @param[in] const UINT16 dataLength,
* @param[in] const UINT16 wMsgType,
* @param[in]AtsFollowUpCmdFstStru* pTempTotalFstMsg,
* @return CI_ERROR CI_SUCCESS
* @note by fan 20260602
*/
UINT8 ReciveAtsFollowUpFstCmd(const UINT8* dataBuf, UINT16 dataIndex, const UINT16 wDataLength, const UINT16 wMsgType, AtsFollowUpCmdFstStru* pTempTotalFstMsg);
/**
* @brief ATS二次命令帧中二次命令解析处理
* @param[in] const UINT8* dataBuf,
* @param[in] UINT16 dataIndex,
* @param[in] const UINT16 dataLength,
* @param[in] const UINT16 wMsgType,
* @param[in]AtsFollowUpCmdSndStru* pTempTotalSndMsg,
* @return CI_ERROR CI_SUCCESS
* @note by fan 20260602
*/
UINT8 ReciveAtsFollowUpSndCmd(const UINT8* dataBuf, UINT16 dataIndex, const UINT16 wDataLength, const UINT16 wMsgType, AtsFollowUpCmdSndStru* pTempTotalSndMsg);
/**
* @brief ATS命令数据周期号信息
* @param[in] UINT8 chDeviceType
@@ -529,6 +629,100 @@ UINT32 GetReciveCmdDataAtsCycNum(UINT8 chDeviceType, UINT8 chDeviceId);
*/
void PackRcOrCiDeciveCommonState(UINT8* ciToXianDiDataBuffer, UINT16* ii);
/**
* @brief ATS对应的首次消息
* @param[in] const UINT16 wMsgType,
* @return ATS二次信息帧中的首次消息
* @note by fan 20260602
*/
AtsFollowUpCmdFstStru * GetAtsFollowUpMsgFst(UINT16 chMsgType);
/**
* @brief ATS对应的二次消息
* @param[in] const UINT16 wMsgType,
* @return ATS二次信息帧中的再次消息
* @note by fan 20260602
*/
AtsFollowUpCmdSndStru * GetAtsFollowUpMsgSnd(UINT16 chMsgType);
/**
* @brief ATS对应的首次反馈消息
* @param[in] const UINT16 wMsgType,
* @return ATS二次信息帧中的首次反馈
* @note by fan 20260602
*/
RCIFollowUpReplyStru * GetAtsFollowUpReplyFst(UINT16 chMsgType);
/**
* @brief ATS对应的再次反馈消息
* @param[in] const UINT16 wMsgType,
* @return ATS二次信息帧中的再次反馈
* @note by fan 20260602
*/
RCIFollowUpReplyStru * GetAtsFollowUpReplySnd(UINT16 chMsgType);
/**
* @brief 1ATS命令信息
* @param[in] const UINT16 wMsgType,
* @return void
* @note by fan 20260603
*/
void ClearAtsCmdMsgFst(UINT16 chMsgType);
/**
* @brief 2ATS命令信息
* @param[in] const UINT16 wMsgType,
* @return void
* @note by fan 20260603
*/
void ClearAtsCmdMsgSnd(UINT16 chMsgType);
/**
* @brief
* @param[in] const UINT16 wMsgType,
* @return void
* @note by fan 20260603
*/
void ClearAtsCmdReplySnd(UINT16 chMsgType);
/**
* @brief
* @param[in] const UINT16 wMsgType,
* @return void
* @note by fan 20260603
*/
void ClearAtsCmdReplyFst(UINT16 chMsgType);
/**
* @brief ATS//
* @brief ATS通用站场状态处理
* @param[in] UINT8* ciToXianDiDataBuffer CI组包给ATS或现地的数据数组
* @param[out] UINT16* wDataIndex CI组包给ATS或现地的数据索引
* @param[in] const UINT8 chTargetType,
* @param[in] const UINT8 chAtsType, ats(0x03)
* @return
* @note by fan 20260602
*/
UINT8 PackCiToAtsFollowUpMsg(UINT8* ciToXianDiDataBuffer, UINT16* wDataIndex, UINT8 chTargetType, UINT8 chAtsType);
/**
* @brief ATS/
* @param[in] const UINT8* dataBuf,
* @param[in] UINT16* dataIndex,
* @param[Out] AtsFollowUpCmdFstStru* pMsgFst
* @return CI_ERROR CI_SUCCESS
* @note by fan 20260602
*/
UINT8 ProcessCmdFirstMsgCheck(const UINT8* dataBuf, UINT16 dataIndex, AtsFollowUpCmdFstStru* pMsgFst);
/**
* @brief ATS/
* @param[in] const UINT8* dataBuf,
* @param[in] UINT16* dataIndex,
* @param[Out] AtsFollowUpCmdSndStru* pMsgSnd
* @return CI_ERROR CI_SUCCESS
* @note by fan 20260602
*/
UINT8 ProcessCmdSndMsgCheck(const UINT8* dataBuf, UINT16 dataIndex, AtsFollowUpCmdSndStru* pMsgSnd);
#ifdef __cplusplus
}
#endif
File diff suppressed because it is too large Load Diff
+10 -3
View File
@@ -108,13 +108,13 @@
#define PHYSEC_LOCKDIRECTION_OPPST_YES ((UINT8)0xAA) /*取反*/
#define PHYSEC_LOCKDIRECTION_OPPST_DEFAULT ((UINT8)0xFF) /*默认值*/
#define CICI_VERSION ((UINT8)31) /*cici接口版本号,每次修改接口需要升级版本号——Last Modified On 2026.01.04*/
#define CICI_VERSION ((UINT8)32) /*cici接口版本号,每次修改接口需要升级版本号——Last Modified On 2026.03.10*/
#define CICI_BEGIN_TO_STATION_LEN ((UINT16)31) /*20251104更新为HLHT头长度+应用层保温内容前6字节*/
#define CICI_CICIVERINDEX (CICI_BEGIN_TO_STATION_LEN-3U) /*20251104更新后CI接口版本信息索引*/
#define CICI_ONE_SWITCH_LEN ((UINT16)13) /*一个道岔数据长度*/
#define CICI_ONE_PHYSEC_LEN ((UINT16)12U)/*一个物理区段数据长度*/
#define CICI_ONE_PHYSEC_UT_LEN ((UINT16)1U)/*一个物理区段坏车占用数据长度*/
#define CICI_ONE_LOGSEC_LEN ((UINT16)9)/*一个逻辑区段数据长度*/
#define CICI_ONE_LOGSEC_LEN ((UINT16)6)/*一个逻辑区段数据长度*/
#define CICI_ONE_SIGNAL_LEN ((UINT16)11)/*一个信号机数据长度*/
#define CICI_ONE_PSD_LEN ((UINT16)5)/*一个屏蔽门数据长度*/
#define CICI_ONE_ESB_LEN ((UINT16)4)/*一个ESB数据长度*/
@@ -231,6 +231,12 @@ extern "C" {
UINT16 szNeedCheckProSwtStateOlpIdBuf[OVERLAP_SUM_MAX]; /*需要检查防护道岔状态的保护区段ID数组*/
UINT16 wSwitchSumOfOtherCi; /*涉及到保护区段征用的其它控区道岔数量*/
UINT16 szSwitchIdBufOfOtherCi[SWITCH_SUM_MAX]; /*涉及到保护区段征用的其它控区道岔数量*/
/*互联互通增加分界数据类型*/
UINT16 wSwitchPhySecNum; /*道岔所在物理区段数量*/
UINT16 wSwitchPhySecBuf[PHYSICAL_SECTION_SUM_MAX]; /*道岔所在物理区段数组*/
UINT16 wXianSuLogSecNum; /*限速逻辑区段数量*/
UINT16 wXianSuLogSecBuf[LOGIC_SECTION_SUM_MAX]; /*限速逻辑区段数组*/
} CiTransmitStruct;
/* 相邻TIOC发来的通信车 */
@@ -1443,11 +1449,12 @@ UINT8 PackManufacDefPacket(UINT8* pInputBuf, UINT16* pItemLen, const UINT8 dstCi
* const UINT8 *pInputData
* UINT16 *pItemLen
* const UINT8 srcCiId ID
* const UINT16 packetLen
* CI_SUCCESS 1
* CI_ERROR 0
* Created By LQ 2025.05.26
*/
UINT8 ParseManufacDefPacket(const UINT8* pInputData, UINT16* pItemLen, const UINT8 srcCiId);
UINT8 ParseManufacDefPacket(const UINT8* pInputData, UINT16* pItemLen, const UINT8 srcCiId, const UINT16 packetLen);
/*
* CI到本控区RC单帧数据
+255 -24
View File
@@ -26,7 +26,7 @@
#include "../DataManage/PlatDataManage.h"
#include "dquCIInterFace.h"
#include "NonAutoReturnDataManage.h"
#include "ReverseCutDataManage.h"
#include "2oo2InterfaceDataManage.h"
PlatHeartDataStruct RecvHeartDataStru = { 0U }; /*平台心跳帧数据结构*/
@@ -524,7 +524,11 @@ UINT8 SwitchMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* da
UINT16 indexFind = 0U;
UINT8 devBelongThisLine = 0U;
UINT8 switchBoardNum = 0U;
UINT8 switchStateCheck = CI_ERROR;
UINT8 chLocalCiOCSswitch = 0U;
UINT8 chMainCotrolOCId = 0U;
chLocalCiOCSswitch = GetLocalCiOCSswitch();
switchLockStatus = GetSwitchLockStatus(DeviceId);
@@ -699,15 +703,19 @@ UINT8 SwitchMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* da
}
break;
case MASK_TYPE_SWITCH_OPEN_CAP:
chMainCotrolOCId = GetSwitchMainCotrolOCId(DeviceId);/*获取主控OC*/
for (i = 0u; i < m_SwitchNum; i++)
{
if (m_Switches[i].DeviceId == DeviceId)
{
if ((chMainCotrolOCId == m_Switches[i].OcId) || (OC_S_OFF == chLocalCiOCSswitch))
{/*当前有主控OC或OC-S功能关闭*/
flagFind = 1u;
indexFind = i;
break;
}
}
}
if (1u == flagFind)
{
/*板卡状态有一系是开盖状态*/
@@ -1178,6 +1186,42 @@ UINT8 PhySectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8
;
}
break;
case MASK_TYPE_PHYSECTION_INTRUSION:
/* 物理区段侵限状态码位 */
phyIntruSecVainCheck = PhysicalIntruSecVainCheck(DeviceId);
if (CI_SUCCESS == phyIntruSecVainCheck)
{
/*未侵限,发1*/
SetMaskValue(MaskId, dataBuf);
}
else
{
/*侵限,发0*/
}
break;
case MASK_TYPE_PHYSECTION_ATS_FLOCK:
/* 物理区段由ATS封锁状态码位 */
/*封锁状态码位(ATS设置) 封锁发0 未封锁以及SPKS命令封锁发1*/
phySecState = GetPhySecFLockState(DeviceId);
if (PHYSICAL_SECTION_FLOCK_NO != phySecState)
{
phySecLockType = GetPhySecFLockType(DeviceId);
if (PHY_SEC_FLOCK_TYPE_SPKS != phySecLockType)
{
/*除了SPKS封锁 都发0*/
}
else
{
/*SPKS命令的封锁 发1*/
SetMaskValue(MaskId, dataBuf);
}
}
else
{
/*未封锁 发1*/
SetMaskValue(MaskId, dataBuf);
}
break;
default:
returnValue = CI_ERROR;
@@ -1204,13 +1248,16 @@ UINT8 LogicSectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UIN
UINT16 logLockBelongRoute = 0U;/*逻辑区段锁闭所属进路*/
UINT16 logProtectLockRoute = 0U;/*逻辑区段防护锁闭所属进路*/
UINT8 chJumpLockState = 0U;/*逻辑区段锁闭状态*/
UINT8 cLogArbState = 0U; /* 逻辑区段ARB状态 */
UINT8 cLogCbtcArbState = 0U; /* 逻辑区段CBTC_ARB状态 */
UINT8 cLogPbTacsArbState = 0U; /* 逻辑区段PB_TACS_ARB状态 */
UINT8 chLogSecLockDirOpposedFlag = CI_ERROR;/*逻辑区段锁闭方向是否取反标志*/
UINT8 cLogSpksFlockState = 0U; /* 逻辑区段SPKS封锁状态 */
UINT8 cLogSecLogicLockState = LOG_SECTION_LOCK_NO; /*逻辑区段逻辑锁闭状态*/
UINT8 cLogSecLockDir = CI_SYSTEM_DIRECTION_NONE; /*逻辑区段锁闭方向*/
UINT8 chLogSecBelLogRouteSum = 0U;/*逻辑区段所属逻辑进路数目*/
UINT8 chLogSecEmergXianSu = 0U;/*逻辑区段紧急临时限速状态*/
UINT8 chRcWorkMode = 0U; /*RC工作模式*/
switch (MaskType)
{
case MASK_TYPE_LOGICSECTION_UTOCCUPY:
@@ -1364,15 +1411,33 @@ UINT8 LogicSectionMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UIN
SetMaskValue(MaskId, dataBuf);
}
break;
case MASK_TYPE_LOGICSECTION_ARB:
/* 逻辑区段ARB状态 */
cLogArbState = GetLgcArbState(DeviceId);
/*区段ARB*/
if (LGC_SECTION_ARB_YES == cLogArbState)
case MASK_TYPE_LOGSEC_CBTC_ARB:
/* 逻辑区段CBTC_ARB状态 */
cLogCbtcArbState = GetLogSecCbtcArbState(DeviceId);
/*当前系统为CI,获取逻辑区段ARB状态*/
if (LGC_SECTION_ARB_YES == cLogCbtcArbState)
{
/*设置码位为1*/
SetMaskValue(MaskId, dataBuf);
}
else
{
;
}
break;
case MASK_TYPE_LOGSEC_PB_TACS_ARB:
/* 逻辑区段PC_TACS_ARB状态 */
cLogPbTacsArbState = GetLogSecPbTacsArbState(DeviceId);
/*当前系统为RC,获取逻辑区段ARB状态*/
if (LGC_SECTION_ARB_YES == cLogPbTacsArbState)
{
/*设置码位为1*/
SetMaskValue(MaskId, dataBuf);
}
else
{
;
}
break;
case MASK_TYPE_LOGICSECTION_SPKS_FLOCK:
/* 逻辑区段SPKS封锁状态 */
@@ -1576,6 +1641,10 @@ UINT8 OverlapMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* d
UINT8 RouteMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dataBuf)
{
UINT8 returnValue = CI_SUCCESS; /*返回值默认成功*/
UINT8 chVirCiId = 0u;
UINT8 chVirCiType = 0u;
UINT8 ciTrainTestState = 0u; /*试车线联锁状态*/
UINT32 xuanpaiStartCycNum = 0u;/*进路选排开始周期数*/
UINT8 routeState = GetRouteState(DeviceId); /*获取进路状态*/
UINT8 routeLevel = GetRouteLevel(DeviceId);
UINT16 lastPhyLockId = GetRouteLastPhySectionId(DeviceId); /*获取指定ID进路最后一个物理区段ID*/
@@ -1584,12 +1653,11 @@ UINT8 RouteMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dat
UINT8 dcQState = GetRouteDCQState(DeviceId);/*进路调车请求状态*/
UINT8 dcTState = GetRouteDCTYState(DeviceId);/*进路调车同意状态*/
UINT8 chDCAgreeBtnErrState = GetRouteDcAgreeButtonErrState(DeviceId);/*进路调车同意按钮故障状态*/
UINT8 ciTrainTestState = 0u; /*试车线联锁状态*/
UINT8 routeAutoTriggerFlag = GetRouteAutoTriggerFlag(DeviceId); /*获取进路自动触发标志*/
UINT8 chVirCiId = 0u;
UINT8 chVirCiType = 0u;
xuanpaiStartCycNum = GetRouteXuanPaiStartCycNum(DeviceId);/*进路选排开始周期数*/
switch (MaskType)
{
case MASK_TYPE_ROUTE_IDLE:/*进路空闲码位*/
@@ -1603,7 +1671,8 @@ UINT8 RouteMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* dat
}
break;
case MASK_TYPE_ROUTE_XUANPAI:/*进路选排码位*/
if (ROUTE_STATE_XUANPAI == routeState)
/* 处于选排周期号有效即可发送码位*/
if (xuanpaiStartCycNum > 0u)
{
SetMaskValue(MaskId, dataBuf);
}
@@ -1906,11 +1975,10 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data
UINT16 wRtnIndicatorDevId = 0U;/*无人折返报警灯设备ID*/
UINT8 chNonRrnAdhesionState = 0U;/*无人折返按钮粘连状态*/
UINT8 cEsbCutErrFlag = ESB_ERROR_FLAG_NO; /*紧急关闭旁路按钮故障标志*/
UINT8 cPsdExceptOpenState = 0U; /*屏蔽门异常打开状态*/
UINT8 cPsdExceptState = 0U; /*屏蔽门异常状态*/
UINT8 chJXTCMutualLockFaultState = 0U; /*间隙探测按钮故障状态*/
UINT8 chIBPBtnState = 0U; /*IBP按钮状态*/
UINT8 chIBPBtnFaultState = 0U; /*IBP按钮故障状态*/
UINT8 chJXTCState = 0U; /*间隙探测状态*/
UINT8 cEsbCutBtnState = 0U; /*紧急关闭旁路按钮激活状态*/
UINT8 cOnePlatEsbState = 0U; /*同站紧急按钮激活状态*/
UINT8 cOnePlatEsbCutState = 0U; /*同站紧急旁路按钮激活状态*/
@@ -2308,15 +2376,15 @@ UINT8 PlatMaskManage(UINT8 MaskType, UINT16 DeviceId, UINT16 MaskId, UINT8* data
/*视频清客驱动状态为无人或者无效,红灯码位无效*/
}
break;
case MASK_TYPE_PSD_EXCEPT_OPEN: /*站台屏蔽门异常打开状态码位-给ZC/ATS用*/
cPsdExceptOpenState = GePsdExceptOpenState(DeviceId);
if (PSD_EXCEPT_OPEN_NO == cPsdExceptOpenState)
case MASK_TYPE_PSD_EXCEPT: /*站台屏蔽门异常状态码位-给ATS/ZC用*/
cPsdExceptState = GePsdExceptState(DeviceId);
if (PSD_EXCEPT_NO == cPsdExceptState)
{
SetMaskValue(MaskId, dataBuf); /*PSD未异常打开,码位组1*/
SetMaskValue(MaskId, dataBuf); /*PSD未异常,码位组1*/
}
else
{
/*PSD异常打开,码位组0*/
/*PSD异常,码位组0*/
}
break;
case MASK_TYPE_PSD_JXTCPANGLU_FAULT:
@@ -4270,6 +4338,8 @@ void PackCiToCimDeviceData(void)
UINT32 switchCollTolerateCycNum = 0U;
UINT8 chSwitchBDState = SEND_CIM_COLLTOLERATE_NO;
UINT8 chSignalDsState = 0xFFU;
UINT8 chReverseState = 0xFFU;
const ReverseSwitchCfgDataStru* pReverseCfg = NULL;
/*发送道岔数据*/
pSwitchData = GetSwitchData();
@@ -4589,9 +4659,35 @@ void PackCiToCimDeviceData(void)
ciToCimDataBuffer[ii++] = pFloodGateDataCC[deviceId].FloodGateCloseApplyIvocSum; /*防淹门关门申请列车数量*/
ciToCimDataBuffer[ii++] = pFloodGateDataCC[deviceId].FloodGateCloseAnsIvocSum; /*防淹门关门允许,列车回复数量*/
ciToCimDataBuffer[ii++] = pFloodGateDataCC[deviceId].FloodGateAccessUTFlag; /*防淹门接近区段是否有非通信车标志*/
}
/*打印倒切柜数据*/
pReverseCfg = GetReverseCfgData();
if (NULL != pReverseCfg)
{
if (0U == pReverseCfg->wId)
{
ciToCimDataBuffer[ii++] = 0U;/*倒切开关数量发0*/
}
else
{
ciToCimDataBuffer[ii++] = 1U;/*倒切开关数量发1*/
ShortToChar(pReverseCfg->wId, &ciToCimDataBuffer[ii]);/*倒切开关ID (初始化字段)*/
ii += 2u;
chReverseState = GetReverseSwitchState();
ciToCimDataBuffer[ii++] = chReverseState;/*倒切开关状态*/
ShortToChar(pReverseCfg->wRelateBoardNum, &ciToCimDataBuffer[ii]);/*倒切板卡数量*/
ii += 2u;
for (jj = 0u; jj <pReverseCfg->wRelateBoardNum; jj++)
{
ShortToChar(pReverseCfg->strRelateBoardBuf[jj].wReversBoardId, &ciToCimDataBuffer[ii]);/*倒切板卡ID*/
ii += 2u;
chReverseState = GetReverseBoardState(pReverseCfg->strRelateBoardBuf[jj].wReversBoardId);
ciToCimDataBuffer[ii++] = chReverseState;/*倒切板卡状态*/
}
}
}
/*发送CIM*/
debug_infor_printf((const)"\nCIM_SEND_DEVSTATE:%d", ii);
debug_out_array(0xAA, ciToCimDataBuffer, ii);
@@ -4833,6 +4929,7 @@ UINT8 ParasePlantCCUHeartFrame(UINT8* dataBuf)
UINT16 curCoup = 0U;
UINT32 tempera = 0U;
UINT8 flagEEPROM = 0U;
UINT32 ccuSyn = 0u;/*通控请求序列号*/
UINT32 crcRecv = 0U;
/*接收到平台心跳帧*/
@@ -4874,6 +4971,9 @@ UINT8 ParasePlantCCUHeartFrame(UINT8* dataBuf)
/*EEPROM存储检验*/
flagEEPROM = dataBuf[ii];
ii += 1u;
/*通控请求序列号*/
ccuSyn = LongFromChar(&dataBuf[ii]);
ii += 4u;
/*CRC校验码*/
crcRecv = LongFromChar(&dataBuf[ii]); /*获取CRC*/
ii += 4u;
@@ -4883,7 +4983,7 @@ UINT8 ParasePlantCCUHeartFrame(UINT8* dataBuf)
{
/*计算CRC校验码,除长度2和CRC4*/
crcCheck = Tioc_PlatCommonCrc32(&dataBuf[2], 22U);
crcCheck = Tioc_PlatCommonCrc32(&dataBuf[2], 26U);
if (crcCheck == crcRecv)
@@ -4974,6 +5074,7 @@ UINT8 ParasePlantSEBHeartFrame(UINT8* dataBuf)
UINT8 boardSEBId = 0U;/*扩展板ID */
UINT16 dataLengthRcv = 0U; /*帧长度*/
UINT32 sebSyn = 0u; /*串口请求序列号*/
UINT32 crcRecv = 0U; /*CRC校验码*/
UINT32 rcvCyc = 0U; /*周期号*/
/*接收到平台心跳帧*/
@@ -4997,17 +5098,20 @@ UINT8 ParasePlantSEBHeartFrame(UINT8* dataBuf)
/*数据内容 3字节*/
ii += 5U;
/*串口请求序列号*/
sebSyn = LongFromChar(&dataBuf[ii]);
ii += 4U;
/*CRC校验码*/
crcRecv = LongFromChar(&dataBuf[ii]); /*获取CRC*/
ii += 4u;
/*长度校验*/ /*总长度16字节*/
/*长度校验*/ /*总长度20字节*/
if (dataLengthRcv == ii - 2U)
{
/*计算CRC校验码,除长度2和CRC4*/
crcCheck = Tioc_PlatCommonCrc32(&dataBuf[2], 10U);
crcCheck = Tioc_PlatCommonCrc32(&dataBuf[2], 14U);
if (crcCheck == crcRecv)
@@ -5474,3 +5578,130 @@ void PackCiToCimCollDiffData(void)
/*发送维护机*/
(void)DarkInfoPack(CIM_INFO_IO_COLL_DIFF_ALARM, ciToCimDataBuffer, ii);
}
/*
* CIM双系IO采集不一致信息
* void
*
*/
void PackCiToCimSwitchRedunAlarmData(void)
{
UINT16 wSwitchCurSum = 0u;
UINT32 dwRedunHunXianAlarmCfg = 0u;
UINT16 i = 0u;
UINT16 wSwitchId = 0u;
UINT8 cRedunCollCfg = 0u;
UINT16 cAlarmCount = 0u;
UINT32 dwHunXianStCyc = 0u;
UINT8 cRedunHunXianStt = 0u;
UINT32 dwFaultStCyc = 0u;
UINT8 j = 0u;
UINT32 dwSwitchDrvStCyc = 0u;
UINT8 cTimeOut = 0u;
UINT16 wRelayId = 0u;
UINT16 wBelongOcId = 0u;
UINT16 wIndex = 1u; /*组包下标,跳过1字节道岔总数*/
UINT8 ciToCimDataBuffer[CI_TO_CIM_DATA_LEN_MAX] = { 0U }; /*数组长度5000字节,大于500个道岔*2个OC*4字节报警,暂无需越界防护*/
wSwitchCurSum = GetSwitchCurSum();
dwRedunHunXianAlarmCfg = GetSwitchRedunCollHunXianCycCfg();
for (i = 0u; i < wSwitchCurSum; i++)
{
wSwitchId = GetSwitchId(i);
cRedunCollCfg = GetSwitchRedunCollCfg(wSwitchId);
if (REDUN_COLL_YES == cRedunCollCfg)
{
for (j = 0u; j < SWITCH_REDUN_COLL_MAX; j++)
{
/*混线报警*/
cRedunHunXianStt = GetSwitchRedunHunXianRecovStt(wSwitchId, j);
if (REDUN_HX_RECOV_ALL != cRedunHunXianStt)
{
/*判断混线有效,如果道岔驱动中,容忍报警时间再报警,否则直接报警*/
dwHunXianStCyc = GetSwitchRedunJudgHunXianStCyc(wSwitchId, j);
dwSwitchDrvStCyc = GetSwitchDriveStartCycNum(wSwitchId);
cTimeOut = SystemOverTimeCheck(dwHunXianStCyc, dwRedunHunXianAlarmCfg);
if ((0u == dwSwitchDrvStCyc) || (CI_TIME_OUT == cTimeOut))
{
/*报警*/
cAlarmCount += 1u;
/*道岔ID*/
ShortToChar(wSwitchId, &ciToCimDataBuffer[wIndex]);
wIndex += 2u;
/*所属OC ID,任选一个冗余采集继电器查询*/
wRelayId = GetSwitchRedunDBJ1RelayId(wSwitchId, j);
wBelongOcId = GetRelayBelongOCId(wRelayId);
ciToCimDataBuffer[wIndex] = (UINT8)wBelongOcId;
wIndex += 1u;
/*混线报警*/
ciToCimDataBuffer[wIndex] = REDUN_ALARM_HUNXIAN;
wIndex += 1u;
/*报混线则不报采集故障*/
continue;
}
else
{
/*不报警*/
}
}
else
{
/*未混线,不报警*/
}
/*采集故障报警*/
dwFaultStCyc = GetSwitchRedunFaultStCyc(wSwitchId, j);
if (0u < dwFaultStCyc)
{
/*采集故障有效,如果道岔驱动中,容忍报警时间再报警,否则直接报警*/
dwSwitchDrvStCyc = GetSwitchDriveStartCycNum(wSwitchId);
cTimeOut = SystemOverTimeCheck(dwFaultStCyc, dwRedunHunXianAlarmCfg);
if ((0u == dwSwitchDrvStCyc) || (CI_TIME_OUT == cTimeOut))
{
/*报警*/
cAlarmCount += 1u;
/*道岔ID*/
ShortToChar(wSwitchId, &ciToCimDataBuffer[wIndex]);
wIndex += 2u;
/*所属OC ID,任选一个冗余采集继电器查询*/
wRelayId = GetSwitchRedunDBJ1RelayId(wSwitchId, j);
wBelongOcId = GetRelayBelongOCId(wRelayId);
ciToCimDataBuffer[wIndex] = (UINT8)wBelongOcId;
wIndex += 1u;
/*采集故障报警*/
ciToCimDataBuffer[wIndex] = REDUN_ALARM_FAULT;
wIndex += 1u;
}
else
{
/*不报警*/
}
}
else
{
/*未故障,不报警*/
}
}
}
else
{
/*道岔不具备冗余采集,不报警*/
}
}
if ((UINT16)UINT8_MAX < cAlarmCount)
{
/*报警数量非法,导向报警数量为0*/
ciToCimDataBuffer[0] = 0u;
(void)debug_infor_printf((const)"SwtRedunCollAlarm Err = %d\n", cAlarmCount);
(void)DarkInfoPack(CIM_INFO_SWT_REDUN_COLL_ALARM, ciToCimDataBuffer, 1u);
}
else
{
/*输出报警*/
ciToCimDataBuffer[0] = (UINT8)cAlarmCount;
(void)debug_infor_printf((const)"SwtRedunCollAlarm = %d:", cAlarmCount);
(void)debug_out_array(0xAA, ciToCimDataBuffer, wIndex);
(void)DarkInfoPack(CIM_INFO_SWT_REDUN_COLL_ALARM, ciToCimDataBuffer, wIndex);
}
}
@@ -388,6 +388,13 @@ void PackCiToCimFlyProtectData(void);
*/
void PackCiToCimCollDiffData(void);
/*
* CIM双系IO采集不一致信息
* void
*
*/
void PackCiToCimSwitchRedunAlarmData(void);
#ifdef __cplusplus
}
#endif
@@ -104,6 +104,7 @@
#define CIM_INFO_UNIT_ALARM ((UINT16)0x2011) /*发送CIM执行单元报警*/
#define CIM_INFO_FLYPROTECT_ALARM ((UINT16)0x2012) /*发送CIM飞车宕机报警*/
#define CIM_INFO_IO_COLL_DIFF_ALARM ((UINT16)0x2013) /*发送CIM IO双系采集不一致报警*/
#define CIM_INFO_SWT_REDUN_COLL_ALARM ((UINT16)0x2014) /*发送CIM道岔冗余采集报警*/
#define CI_AND_OTHER_TRANSMIT_GOOD ((UINT8)0x55) /*CI与其他系统双网通信正常*/
#define CI_AND_OTHER_TRANSMIT_LINK ((UINT8)0x5A) /*CI与其他系统单网通信正常*/
@@ -5,6 +5,9 @@
#include "dquCIInterFace.h"
#include "WLBrakeDataManage.h"
#include "RRMManageAPI.h"
#include "../ParsePack/ParsePackAtsData.h"
#include "../HLHTMsgHead/HLHTCommonDataPacketHead.h"
#include "../HLHTMsgHead/HLHTHeadContexManage.h"
AtsScreenMsgFstStru g_strAtsMsgFst = { 0u }; /*远程筛选首次消息*/
AtsMsgCfmStru g_strAtsCfmFst = { 0u }; /*远程筛选首次确认*/
@@ -32,14 +35,18 @@ AtsMsgCfmStru g_strSndAtsWlbCfmFst = { 0U }; /*
AtsMsgCfmStru g_strSndAtsDaCfmFst = { 0U }; /*第二个ATS的取消脱轨防护区首次确认*/
/**
* @brief
* @brief ---GAL部分消息反馈内容
* @param const UINT8* dataBuf,
* @param const UINT16 dataLength,
* @param[out] UINT16* dataIndex,
* @param[in] const UINT16 dataLength,
* @return CI_SUCCESS:CI_ERROR:
*/
UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, UINT16* dataIndex, const UINT16 dataLength)
{
UINT8 chRtn = CI_ERROR;
UINT8 chRtn1 = CI_SUCCESS;
UINT8 chRtn2 = CI_SUCCESS;
UINT8 chRtn3 = CI_SUCCESS;
UINT8 chMsgNum = 0u;
UINT32 dwDataVer = 0u;
UINT32 dwPrtclMsg = 0u;
@@ -67,10 +74,11 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
UINT16 wDevId = 0U;
UINT8 szCrcTmp[1024] = { 0U };
if ((NULL != dataBuf) && (0u < dataLength))
{
chLocalId = GetSystemParaLocalCiId();
if ((NULL != dataBuf) && (0u < dataLength)&&(NULL !=dataIndex))
{
ii = *dataIndex;
chLocalId = GetSystemParaLocalCiId();
/* 消息数量 */
chMsgNum = dataBuf[ii++];
/* 数据版本号 */
@@ -89,6 +97,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
else
{
chRtn = CI_ERROR;
chRtn3 = CI_ERROR;
}
}
else
@@ -105,6 +114,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
else
{
chRtn = CI_ERROR;
chRtn3 = CI_ERROR;
}
}
else
@@ -236,6 +246,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
{
; /*DO NOTHING*/
}
chRtn1 = chRtn;
}
else
{
@@ -355,6 +366,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
{
; /*DO NOTHING*/
}
chRtn2 = chRtn;
}
break;
}
@@ -469,6 +481,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
{
; /*DO NOTHING*/
}
chRtn3 = chRtn;
break;
}
case MSG_TYPE_EA_CANCLE_FIRST:/* 区间疏散取消首次消息 */
@@ -580,6 +593,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
{
;
}
chRtn1 = chRtn;
}
else
{
@@ -682,6 +696,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
{
;
}
chRtn2 = chRtn;
}
break;
}
@@ -801,7 +816,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
{
;
}
chRtn3 = chRtn;
break;
}
case MSG_TYPE_WLB_SET_FIRST: /* 全线列车紧急制动一次命令 */
@@ -923,6 +938,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
{
;
}
chRtn1 = chRtn;
}
else
{
@@ -1039,6 +1055,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
{
;
}
chRtn2 = chRtn;
}
break;
}
@@ -1169,7 +1186,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
{
;
}
chRtn3 = chRtn;
break;
}
case MSG_TYPE_DA_CANCLE_FIRST:/* 脱轨防护区取消首次消息 */
@@ -1281,6 +1298,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
{
;
}
chRtn1 = chRtn;
}
else
{
@@ -1383,6 +1401,7 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
{
;
}
chRtn2 = chRtn;
}
break;
}
@@ -1502,12 +1521,13 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
{
;
}
chRtn3 = chRtn;
break;
}
default:
{
chRtn = CI_ERROR;
chRtn3 = CI_ERROR;
break;
}
}
@@ -1541,24 +1561,44 @@ UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength)
if (CI_SUCCESS == chRtn)
{
; /*不处理*/
*dataIndex = ii;
}
else
{
/*命令校验非法后,清除对应相关的命令存储*/
if (CI_ERROR == chRtn1)
{
ClearAtsMsgFirst();
ClearAtsMsgSecond();
ClearAtsEaMsgFirst();
ClearAtsEaMsgSecond();
ClearAtsWlbMsgFirst();
ClearAtsWlbMsgSecond();
ClearAtsDaMsgFirst();
ClearAtsDaMsgSecond();
}
if (CI_ERROR == chRtn2)
{
ClearSndAtsScreenFstCfmMsg();
ClearSndAtsEaFstCfmMsg();
ClearSndAtsWlbFstCfmMsg();
ClearSndAtsDaFstCfmMsg();
}
if (CI_ERROR == chRtn3)
{
ClearAtsMsgFirst();
ClearAtsEaMsgFirst();
ClearAtsWlbMsgFirst();
ClearAtsDaMsgFirst();
ClearSndAtsScreenFstCfmMsg();
ClearSndAtsEaFstCfmMsg();
ClearSndAtsWlbFstCfmMsg();
ClearSndAtsDaFstCfmMsg();
ClearAtsMsgSecond();
ClearAtsEaMsgSecond();
ClearAtsWlbMsgSecond();
ClearAtsDaMsgSecond();
}
}
return chRtn;
}
@@ -1803,13 +1843,12 @@ void ClearAtsDaMsgSecond(void)
}
/**
* @brief TIOC到网关数据
* @brief TIOC到网关数据--
* @param
* @return CI_ERROR失败CI_SUCCESS成功
*/
UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType)
UINT8 PackTiocToGateWayData(UINT8* szToGateWayDataBuf, const UINT8 targetDevType, UINT16* wDataIndex)
{
UINT8 szToGateWayDataBuf[CI_TO_ATS_DATA_LEN_MAX] = { 0u };
UINT16 ii = 0u;
UINT16 jj = 0U;
UINT16 wMsgNumIndex = 0u;
@@ -1825,7 +1864,6 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType)
UINT8 chTrainIndex = 0u;
UINT32 dwTrainId = 0u;
UINT16 wMsgLen = 0u;
UINT16 wDstDevId = 0u;
UINT16 wTrainLgcId = 0u;
UINT8 chEaNum = 0u;
UINT16 wEaTrainid = 0u;
@@ -1858,7 +1896,10 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType)
TrainFlyProtectStru * pFlyData = NULL;
wRcId = (UINT16)chLocalId; /* RC编号,不带类型 */
if ((NULL != szToGateWayDataBuf) && (NULL != wDataIndex))
{
ii = *wDataIndex;
wMsgNumIndex = ii;
/* 留出消息条数填充位置 */
ii++;
@@ -2653,7 +2694,7 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType)
if (CI_SUCCESS == chRtn)
{
debug_infor_printf((const)"\n GATEWAY_FLY_SHUT_DOWN \n");
debug_infor_printf((char*)"\n GATEWAY_FLY_SHUT_DOWN \n");
chMsgNum = 1U;
}
}
@@ -2661,16 +2702,7 @@ UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType)
{
/* 组包成功,填入消息数量 */
szToGateWayDataBuf[wMsgNumIndex] = chMsgNum;
wDstDevId = (UINT16)(((UINT16)targetDevType << 8U) | (UINT16)deviceId);
chRtn = OutnetSafeSend(wDstDevId, 0u, &szToGateWayDataBuf[0], ii);
if (CI_SUCCESS == chRtn)
{
debug_infor_printf((const)"\nGATEWAY_SEND:%d", ii);
debug_out_array(0xAA, szToGateWayDataBuf, ii);
}
else
{
;
*wDataIndex = ii;
}
}
else
@@ -2778,3 +2810,579 @@ void ClearSndAtsDaFstCfmMsg(void)
{
(void)CommonMemSet((void*)&g_strSndAtsDaCfmFst, (UINT32)sizeof(AtsMsgCfmStru), (UINT8)0U, (UINT32)sizeof(AtsMsgCfmStru));
}
/**
* @brief --GAL
* @param const UINT8* dataBuf,
* @param const UINT16 dataLength,
* @return CI_SUCCESS:CI_ERROR:
* @note Created By fan 20260604
*/
UINT8 ParseGateWayToCiDataProc(const UINT8* dataBuf, const UINT16 dataLength)
{
UINT8 chAtsInterfaceType = 0U; /*ATS接口类型*/
UINT8 chGalHeadSaved = 0u; /*通用头是否已保存标志,1保存;0未保存*/
UINT16 ii = 0U; /*数据索引*/
UINT8 chRetVal = CI_ERROR;
HLHTGALInfoStruct hlhtGalHead = { 0U }; /*互联互通报文头*/
UINT8 chHeadReval = CI_ERROR; /*互联互通报文头检查结果*/
UINT16 wTiocRcvAtsGtwyDevTypeId = 0U;
UINT8 chLocalCiId = GetSystemParaLocalCiId();/*联锁ID*/
UINT16 wRemoteDevName = 0U; /*对方设备信息*/
UINT32 dwErrCode = 0U; /*通用报文头错误码记录*/
UINT32 dwCurCycNum = Get2oo2CurCycleNum(); /*当前周期号*/
UINT32 dwCiAndAtsTimeOutTime = 0u; /*联锁与ATS通信中断时间*/
INT32 remainValidiy = 0; /*剩余时间是否有效*/
UINT32 dwCiCurappCycleTime = 0u; /*联锁当前周期*/
UINT16 wMsgLen = 0U; /*一条应用数据长度*/
UINT16 wTmpDataLen = 0U; /*数据长度临时记录变量*/
UINT16 wMsgType = 0U; /*报文类型*/
UINT16 wMsgCheckLen = 0U; /* 单帧数据长度*/
UINT8 chCurSystemAreaState = 0U; /*当前系统区域状态*/
UINT32 dwReciveCmdDataAtsCycNum = 0U; /*收到ATS命令数据时ATS周期号*/
UINT32 dwSystemUpdateMainUseCycNum = 0U; /*系统主用起始周期号*/
UINT8 chExistCmdDataFlag = 0U; /*存在命令数据标志*/
UINT8 chDeciveId = 0U; /*网关ID*/
AtsFollowUpCmdFstStru tempFstCmd[FOLLOWUP_MSGID_MAX] = { 0U };/*一次命令临时存储*/
AtsFollowUpCmdSndStru tempSndCmd[FOLLOWUP_MSGID_MAX] = { 0U };/*二次命令临时存储*/
UINT16 wIndex = 0U;/*临时信息存储索引*/
UINT16 wMsgTypeTmp = 0U;/*拷贝回全局变量的信息类型*/
AtsFollowUpCmdFstStru *pGlobalFst = NULL;
AtsFollowUpCmdSndStru *pGlobalSnd = NULL;
wTiocRcvAtsGtwyDevTypeId = GetTiocTrnsmtGtwyDevTypeId();
chDeciveId =(UINT8)(wTiocRcvAtsGtwyDevTypeId & 0x00FFU);
if ((NULL != dataBuf) && (0u < dataLength))
{
chAtsInterfaceType = GetCiFunctionSwitchConfig(FUNC_GATEWAY_INTERFACE_IDENTIFIER);
if (ATS_INTERFACE_EXIST_GAL != chAtsInterfaceType)
{
/*旧数据结构只有命令信息*/
chRetVal = ParseGateWayToCiDataFrame(dataBuf, &ii, dataLength);
}
else
{
/*新数据结构存在GAL报文头,且存在心跳帧或命令信息帧*/
/*解析通用消息包头*/
hlhtGalHead.devInterInfoType = ShortFromChar(&dataBuf[ii]);
ii += 2U;
hlhtGalHead.sourceId = LongFromChar(&dataBuf[ii]);
ii += 4U;
hlhtGalHead.destId = LongFromChar(&dataBuf[ii]);
ii += 4U;
hlhtGalHead.emapVerCrc = LongFromChar(&dataBuf[ii]);
ii += 4U;
hlhtGalHead.crntOwnMsgSN = LongFromChar(&dataBuf[ii]);
ii += 4U;
hlhtGalHead.comPeriod = ShortFromChar(&dataBuf[ii]);
ii += 2U;
hlhtGalHead.recvOppMsgSN = LongFromChar(&dataBuf[ii]);
ii += 4U;
hlhtGalHead.preOwnMsgSN = LongFromChar(&dataBuf[ii]);
ii += 4U;
hlhtGalHead.prtclVer = dataBuf[ii++];
hlhtGalHead.totalDataLen = ShortFromChar(&dataBuf[ii]);
ii += 2U;
wRemoteDevName = (CI_SYSTEM_TYPE_RCI)* 256U + chLocalCiId;
chHeadReval = HLHTRecvCommonPacketHeadCheck(wTiocRcvAtsGtwyDevTypeId, wRemoteDevName, ATS_CI_INTERFACE_INFOTYPE, 1U, &hlhtGalHead, &dwErrCode, 0U, CI_SYSTEM_TYPE_ATS);
debug_infor_printf((char*)"\nGateWay%#x GAL Check Result:%d errCode:%d\n", wTiocRcvAtsGtwyDevTypeId, chHeadReval, dwErrCode); /*0x55正确,0xaa错误,0x33初始通信帧*/
if (HLHT_HEAD_SUCCESS == chHeadReval)
{
dwCiAndAtsTimeOutTime = GetCiAndAtsTransBadEnsureTime();
dwCiCurappCycleTime = GetSystemParaAppCycleTime();
/*计算消息的时效性*/
remainValidiy = HLHTCommonMsgRemainingValidity(dwCiAndAtsTimeOutTime, dwCurCycNum, dwCiCurappCycleTime, hlhtGalHead.recvOppMsgSN, hlhtGalHead.crntOwnMsgSN, hlhtGalHead.preOwnMsgSN, hlhtGalHead.comPeriod);
if (remainValidiy > 0)
{
/*解析应用数据*/
if (0u == hlhtGalHead.totalDataLen)
{
/* 仅有GAL头信息 */
chRetVal = CI_ERROR;
}
else if (6u > hlhtGalHead.totalDataLen)
{
/* 数据长度错误,返回失败 */
chRetVal = CI_ERROR;
}
else
{
chRetVal = CI_SUCCESS;
/*先获取上一周期是存储进路办理命令数*/
while (wTmpDataLen < hlhtGalHead.totalDataLen)
{
/* 一条应用数据长度 */
wMsgLen = ShortFromChar(&dataBuf[ii]);
ii += 2u;
wTmpDataLen += 2U;
wTmpDataLen += wMsgLen;
if (0u == wMsgLen)
{
; /* 无处理,继续解析下一包 */
}
else
{
/* 获取报文类型 */
wMsgType = ShortFromChar(&dataBuf[ii]);
ii += 2u;
/* 跳过预留 */
ii += 2u;
wMsgCheckLen = wMsgLen - 4u;
switch (wMsgType)
{
case ATS_CI_INFO_TYPE_HEART_STATE:
/* 解析心跳信息 */
ii += wMsgCheckLen;
break;
case ATS_CI_INFO_TYPE_GATEWAY_COMMON:
/* 解析既有信息 */
chRetVal = ParseGateWayToCiDataFrame(dataBuf, &ii, wMsgCheckLen);
chExistCmdDataFlag = 1U; /*先设置存在命令数据标志有效,数据解析不过在下面置为无效*/
break;
case ATS_CI_INFO_FST_DS_CANCEL:
case ATS_CI_INFO_FST_SWIUNFLOCK:
case ATS_CI_INFO_FST_FAULTUNLOCK:
case ATS_CI_INFO_FST_SECUNFLOCK:
case ATS_CI_INFO_FST_SIGUNFLOCK:
case ATS_CI_INFO_FST_ZONGRENJIE:
case ATS_CI_INFO_FST_PSD_UNEXCEPT:
chCurSystemAreaState = GetLocalCiBackUpPattern();
if (SYSTEM_WORK_MODE_MAIN == chCurSystemAreaState)
{
/*主用解析操作命令,必须检查当前该包数据是否已经处理过*/
dwReciveCmdDataAtsCycNum = GetReciveCmdDataAtsCycNum(CI_SYSTEM_TYPE_ATS, chDeciveId);
dwSystemUpdateMainUseCycNum = GetSystemUpdateMainUseCycNum();
if ((dwReciveCmdDataAtsCycNum < hlhtGalHead.crntOwnMsgSN) ||
(dwSystemUpdateMainUseCycNum <= hlhtGalHead.recvOppMsgSN))
{
/*当前ATS发送数据时的周期号大于接收到ATS数据时ATS周期号
ATS发送数据时的联锁周期号大于等于当前系统升级主用起始周期号*/
wIndex = (wMsgType - ATS_CI_INFO_FST_DS_CANCEL) / 4;
if ((FOLLOWUP_MSGID_MAX > wIndex) && (ATS_CI_INFO_TYPE_FIRST_LEN == wMsgCheckLen))
{
chRetVal = ProcessCmdFirstMsgCheck(dataBuf, ii, &tempFstCmd[wIndex]);
ii += ATS_CI_INFO_TYPE_FIRST_LEN;
chExistCmdDataFlag = 1U; /*先设置存在命令数据标志有效,数据解析不过在下面置为无效*/
}
else
{
chRetVal = CI_ERROR;/*越界防护*/
}
}
else
{
ii += wMsgCheckLen;
/*已经被另外一机处理过了*/
debug_infor_printf((char*)"\nATS/Xiandi %d Not Deal FstCmd%d,Because curCmd has been processed by another System,dwReciveCmdDataAtsCycNum %d dwSystemUpdateMainUseCycNum %d\n", chDeciveId, wMsgType, dwReciveCmdDataAtsCycNum, dwSystemUpdateMainUseCycNum);
}
}
break;
case ATS_CI_INFO_SND_DS_CANCEL:
case ATS_CI_INFO_SND_SWIUNFLOCK:
case ATS_CI_INFO_SND_FAULTUNLOCK:
case ATS_CI_INFO_SND_SECUNFLOCK:
case ATS_CI_INFO_SND_SIGUNFLOCK:
case ATS_CI_INFO_TYPE_SND_ZRJ:
case ATS_CI_INFO_SND_PSD_UNEXCEPT:
chCurSystemAreaState = GetLocalCiBackUpPattern();
if (SYSTEM_WORK_MODE_MAIN == chCurSystemAreaState)
{
/*主用解析操作命令,必须检查当前该包数据是否已经处理过*/
dwReciveCmdDataAtsCycNum = GetReciveCmdDataAtsCycNum(CI_SYSTEM_TYPE_ATS, chDeciveId);
dwSystemUpdateMainUseCycNum = GetSystemUpdateMainUseCycNum();
if ((dwReciveCmdDataAtsCycNum < hlhtGalHead.crntOwnMsgSN) ||
(dwSystemUpdateMainUseCycNum <= hlhtGalHead.recvOppMsgSN))
{
wIndex = (wMsgType - ATS_CI_INFO_SND_DS_CANCEL) / 4;
if ((FOLLOWUP_MSGID_MAX > wIndex) && (ATS_CI_INFO_TYPE_SND_LEN == wMsgCheckLen))
{
chRetVal = ProcessCmdSndMsgCheck(dataBuf, ii, &tempSndCmd[wIndex]);
ii += ATS_CI_INFO_TYPE_SND_LEN;
chExistCmdDataFlag = 1U; /*先设置存在命令数据标志有效,数据解析不过在下面置为无效*/
}
else
{
chRetVal = CI_ERROR;/*越界防护*/
}
}
else
{
ii += wMsgCheckLen;
/*已经被另外一机处理过了*/
debug_infor_printf((char*)"\nATS/Xiandi %d Not Deal SndCmd%d,Because curCmd has been processed by another System,dwReciveCmdDataAtsCycNum %d dwSystemUpdateMainUseCycNum %d\n", chDeciveId, wMsgType, dwReciveCmdDataAtsCycNum, dwSystemUpdateMainUseCycNum);
}
}
break;
default:
chRetVal = CI_ERROR;
break;
}
}
if (CI_ERROR == chRetVal)
{
chExistCmdDataFlag = 0U;
break;
}
else
{
; /*do nothing*/
}
}
}
/*校验数据长度*/
if ((hlhtGalHead.totalDataLen != ii - (UINT16)31U) || (dataLength != hlhtGalHead.totalDataLen + (UINT16)31U))
{
/* 31为应用数据帧头长度 */
chRetVal = CI_ERROR;
debug_infor_printf((char*)"ParseGateWayToCiDataProc HlhtGal Length Error\n");
}
if (CI_SUCCESS != chRetVal)
{
/*清除本次存储的命令信息*/
ClearCurGateWayMsg();
}
else
{
/*将临时一二次信息拷贝到全局变量*/
for (wIndex = 0U; wIndex < FOLLOWUP_MSGID_MAX; wIndex++)
{
if (FLAG_SET == tempFstCmd[wIndex].chFlag)
{
wMsgTypeTmp = ATS_CI_INFO_FST_DS_CANCEL + wIndex*(UINT16)4U;
pGlobalFst = GetAtsFollowUpMsgFst(wMsgTypeTmp);
if (NULL != pGlobalFst)
{
(void)CommonMemCpy((void *)(pGlobalFst), (UINT32)sizeof(AtsFollowUpCmdFstStru), (const void *)(&tempFstCmd[wIndex]), (UINT32)sizeof(AtsFollowUpCmdFstStru));
}
}
if (FLAG_SET == tempSndCmd[wIndex].chFlag)
{
wMsgTypeTmp = ATS_CI_INFO_SND_DS_CANCEL + wIndex*(UINT16)4U;
pGlobalSnd = GetAtsFollowUpMsgSnd(wMsgTypeTmp);
if (NULL != pGlobalSnd)
{
(void)CommonMemCpy((void *)(pGlobalSnd), (UINT32)sizeof(AtsFollowUpCmdSndStru), (const void *)(&tempSndCmd[wIndex]), (UINT32)sizeof(AtsFollowUpCmdSndStru));
}
}
}
}
if (CI_SUCCESS == chRetVal)
{
/*数据经过校验,需要存储通用报文上下文*/
SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_ATS, chDeciveId, hlhtGalHead.comPeriod);
SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_ATS, chDeciveId, hlhtGalHead.crntOwnMsgSN);
SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_ATS, chDeciveId, hlhtGalHead.recvOppMsgSN);
SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_ATS, chDeciveId, hlhtGalHead.preOwnMsgSN);
SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_ATS, chDeciveId, dwCurCycNum);
SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_ATS, chDeciveId, 0U);
chGalHeadSaved = 1U;
if (1U == chExistCmdDataFlag)
{
UpdateAtsCmdDataCycInfo(CI_SYSTEM_TYPE_ATS, chDeciveId);
}
else
{
; /*不更新最近一次收到ATS命令数据周期号*/
}
}
else
{
;
}
}
else
{
chRetVal = CI_ERROR;
}
}
else if (HLHT_HEAD_INIT == chHeadReval)
{
if (dwCurCycNum > 0U)/*判断序号大于0,因为把0当做无效序号*/
{
SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_ATS, chDeciveId, hlhtGalHead.comPeriod);
SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_ATS, chDeciveId, hlhtGalHead.crntOwnMsgSN);
SetHLHTHeadCtxSrcOppSN(CI_SYSTEM_TYPE_ATS, chDeciveId, hlhtGalHead.recvOppMsgSN);
SetHLHTHeadCtxSrcOwnSN(CI_SYSTEM_TYPE_ATS, chDeciveId, hlhtGalHead.preOwnMsgSN);
SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_ATS, chDeciveId, dwCurCycNum);
SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_ATS, chDeciveId, 0U);
chGalHeadSaved = 1U;
}
chRetVal = CI_ERROR;
}
else
{
/*记录校验失败信息*/
if (GAL_COMPARE_INFO_TYPE_ERR == (dwErrCode & GAL_COMPARE_INFO_TYPE_ERR))
{
/*记录接口信息类型错误*/
SetErrorData(EFUNC_PARSE_GATEWAY2CI_DATA, CI_SYSTEM_TYPE_ATS, wTiocRcvAtsGtwyDevTypeId, ETYPE_COMM_WITH_GATEWAY, CI_BACK_DATA_INFO_TYPE_ERR, ESEND_LEVEL_ZERO);
}
else if (GAL_COMPARE_SEND_FLAG_ERR == (dwErrCode & GAL_COMPARE_SEND_FLAG_ERR))
{
/*发送方标识信息错误*/
SetErrorData(EFUNC_PARSE_GATEWAY2CI_DATA, CI_SYSTEM_TYPE_ATS, wTiocRcvAtsGtwyDevTypeId, ETYPE_COMM_WITH_GATEWAY, CI_BACK_DATA_SEND_FLAG_ERR, ESEND_LEVEL_ZERO);
}
else if (GAL_COMPARE_RECV_FLAG_ERR == (dwErrCode & GAL_COMPARE_RECV_FLAG_ERR))
{
/*数据接收方标志信息错误*/
SetErrorData(EFUNC_PARSE_GATEWAY2CI_DATA, CI_SYSTEM_TYPE_ATS, wTiocRcvAtsGtwyDevTypeId, ETYPE_COMM_WITH_GATEWAY, CI_BACK_DATA_RECV_FLAG_ERR, ESEND_LEVEL_ZERO);
}
else if (GAL_COMPARE_EMAP_VER_COMP_ERR == (dwErrCode & GAL_COMPARE_EMAP_VER_COMP_ERR))
{
/*数据版本校验失败信息*/
SetErrorData(EFUNC_PARSE_GATEWAY2CI_DATA, CI_SYSTEM_TYPE_ATS, wTiocRcvAtsGtwyDevTypeId, ETYPE_COMM_WITH_GATEWAY, CI_BACK_DATA_VER_CHECK_FAIL, ESEND_LEVEL_ATS);
}
else if (GAL_COMPARE_PROTOCOL_VER_ERR == (dwErrCode & GAL_COMPARE_PROTOCOL_VER_ERR))
{
/*数据协议版本号错误*/
SetErrorData(EFUNC_PARSE_GATEWAY2CI_DATA, CI_SYSTEM_TYPE_ATS, wTiocRcvAtsGtwyDevTypeId, ETYPE_COMM_WITH_GATEWAY, CI_BACK_DATA_PROTOCOL_VER_ERR, ESEND_LEVEL_ZERO);
}
else if (GAL_COMPARE_MSG_BDS_SN_ERR == (dwErrCode & GAL_COMPARE_MSG_BDS_SN_ERR))
{
/*双方序列号错误*/
SetErrorData(EFUNC_PARSE_GATEWAY2CI_DATA, CI_SYSTEM_TYPE_ATS, wTiocRcvAtsGtwyDevTypeId, ETYPE_COMM_WITH_GATEWAY, CI_BACK_DATA_MSG_BDS_SN_ERR, ESEND_LEVEL_ZERO);
}
else if (GAL_COMPARE_APP_LEN_ERR == (dwErrCode & GAL_COMPARE_APP_LEN_ERR))
{
/*应用层数据长度无效*/
SetErrorData(EFUNC_PARSE_GATEWAY2CI_DATA, CI_SYSTEM_TYPE_ATS, wTiocRcvAtsGtwyDevTypeId, ETYPE_COMM_WITH_GATEWAY, CI_BACK_DATA_APP_LEN_ERR, ESEND_LEVEL_ZERO);
}
else
{
/*记录通信故障码*/
SetErrorData(EFUNC_PARSE_GATEWAY2CI_DATA, CI_SYSTEM_TYPE_ATS, wTiocRcvAtsGtwyDevTypeId, ETYPE_COMM_WITH_GATEWAY, CI_ERROR, ESEND_LEVEL_ZERO);
}
chRetVal = CI_ERROR;
}
}
if ((CI_ERROR == chRetVal) && (0u == chGalHeadSaved))
{
/*如果通用头已经保存了,则不执行清除通用头操作,否则,出错后也将清除通用头*/
ClearHlhtHeadCtx(CI_SYSTEM_TYPE_ATS, chDeciveId);
}
else
{
; /*do nothing*/
}
}
else
{
/*数据无效*/
chRetVal = CI_ERROR;
}
return chRetVal;
}
/*
* -GAL
* QueueStruct* ciToAtsDataQueue,
* const UINT8 deviceId, ID
* const UINT8 targetDevType,
* const UINT8 frame,
* UINT8* chSendXiandiorAtsBuf
* 0:
* 1:
* fan 20260604
*/
UINT8 PackCiToGateWayDataProc(const UINT8 deviceId, const UINT8 targetDevType)
{
UINT8 ciToGateWayBuffer[CI_TO_ATS_DATA_LEN_MAX] = { 0u };
UINT16 ii = 0u;
UINT8 chReval = CI_ERROR;
UINT8 chAtsInterfaceType = 0U; /*ATS接口类型*/
UINT8 chLocalCiId = GetSystemParaLocalCiId(); /*本地联锁ID*/
UINT32 dwCiEtcsId = 0U; /*联锁互联互通ID*/
UINT32 dwAtsEtcsId = 0U; /*ATS互联互通ID*/
UINT32 dwEmapCheckVer = 0U; /*电子地图校验版本号*/
UINT32 dwHlhtHSrcSN = 0U; /*向CI发送数据的一方发送报文时当前的SN*/
UINT32 dwHlhtHRcvSN = 0U; /*CI接收到数据时本身的SN*/
UINT32 dwCurCycleNum = Get2oo2CurCycleNum(); /*联锁应用周期号*/
UINT32 dwAppCycleTime = GetSystemParaAppCycleTime(); /*联锁应用周期*/
UINT16 wAppDataLenIndex = 0U; /* 应用数据长度位置 */
UINT16 wAppDataLen = 0u; /* 应用数据长度 */
UINT16 wMagLen = 0u; /* 单包数据长度 */
UINT16 wMagDataLenIndex = 0U; /* 消息数据长度位置 */
UINT16 dstDevId = 0u;
UINT8 chCurSystemAreaState = GetLocalCiBackUpPattern(); /*当前系统区域状态*/
UINT32 dwFlyProtectOverCyc = GetFlyProtectOverCyc(); /*飞车*/
chAtsInterfaceType = GetCiFunctionSwitchConfig(FUNC_GATEWAY_INTERFACE_IDENTIFIER);
if (ATS_INTERFACE_EXIST_GAL != chAtsInterfaceType)
{
/*旧数据结构运行无需GAL报文头*/
chReval = PackTiocToGateWayData(ciToGateWayBuffer, targetDevType, &ii);
}
else
{
/*新数据结构运行需要GAL报文头*/
/*首先获取组包时所需的信息,获取成功才继续组包*/
/*先用设备ID,后续可能用互联互通ID*/
dwCiEtcsId = (UINT32)(CI_SYSTEM_TYPE_RCI * 256U + chLocalCiId);
dwAtsEtcsId = (UINT32)(targetDevType * 256U + deviceId);
chReval = GetCiEmapCheckVer(chLocalCiId, &dwEmapCheckVer, targetDevType);
dwHlhtHSrcSN = GetHLHTHeadCtxSrcCrntSN(targetDevType, deviceId);
dwHlhtHRcvSN = GetHLHTHeadCtxCiRcvSN(targetDevType, deviceId);
if (CI_SUCCESS == chReval)
{
/*组GAL包头*/
ShortToChar(ATS_CI_INTERFACE_INFOTYPE, &ciToGateWayBuffer[ii]);/*接口信息类型*/
ii += 2u;
LongToChar(dwCiEtcsId, &ciToGateWayBuffer[ii]);/*发送方标识信息*/
ii += 4u;
LongToChar(dwAtsEtcsId, &ciToGateWayBuffer[ii]);/*接收方标识信息*/
ii += 4u;
LongToChar(dwEmapCheckVer, &ciToGateWayBuffer[ii]);/*电子地图版本校验信息*/
ii += 4u;
LongToChar(dwCurCycleNum, &ciToGateWayBuffer[ii]);/*本方消息序列号*/
ii += 4u;
ShortToChar((UINT16)dwAppCycleTime, &ciToGateWayBuffer[ii]);/*设备通讯周期*/
ii += 2u;
LongToChar(dwHlhtHSrcSN, &ciToGateWayBuffer[ii]);/*对方消息序列号:recvOppMsgSN记录收到对方上一条消息中的对方消息序列号*/
ii += 4u;
LongToChar(dwHlhtHRcvSN, &ciToGateWayBuffer[ii]);/*收到上一条消息时本方序列号*/
ii += 4u;
ciToGateWayBuffer[ii++] = 1U; /*CI_ATS接口协议版本号*/
/*应用层数据长度*/
wAppDataLenIndex = ii;
ii += 2u;
wMagDataLenIndex = ii;
ii += 2U;
if (RC_WORK_MODE_CI == CI_SYSTEM_TYPE_RCI)
{
ShortToChar(RCI_ATS_INFO_TYPE_GATEWAY_HEART, &ciToGateWayBuffer[ii]);/* 报文类型 */
ii += 2u;
/* 预留2字节 */
ii += 2u;
}
else
{
ShortToChar(ATS_CI_INFO_TYPE_GATEWAY_COMMON, &ciToGateWayBuffer[ii]);/* 报文类型 */
ii += 2u;
/* 预留2字节 */
ii += 2u;
chReval = PackTiocToGateWayData(ciToGateWayBuffer, targetDevType, &ii);
}
wMagLen = ii - wMagDataLenIndex - 2U;
/* 组数据长度 */
ShortToChar(wMagLen, &ciToGateWayBuffer[wMagDataLenIndex]);
/*进行一次、二次回复单独信息帧组包*/
/*主用模式、未飞车*/
if ((CI_SUCCESS == chReval)&& (SYSTEM_WORK_MODE_MAIN == chCurSystemAreaState)&& ( 0U == dwFlyProtectOverCyc))
{
chReval = PackCiToAtsFollowUpMsg(ciToGateWayBuffer, &ii, targetDevType, PACK_ATS_TYPE_GATEWAY);
}
}
/* 填充数据长度 */
if (CI_SUCCESS == chReval)
{
wAppDataLen = ii - wAppDataLenIndex - 2U;
ShortToChar(wAppDataLen, &ciToGateWayBuffer[wAppDataLenIndex]);
}
else
{
;
}
}
if ((ii > CI_TO_ATS_DATA_LEN_MAX) || (CI_ERROR == chReval))
{
chReval = CI_ERROR;
}
else
{
/* 向外发送 */
dstDevId = ((UINT16)((UINT16)targetDevType << 8u) | ((UINT16)deviceId));
chReval = OutnetSafeSend(dstDevId, 0u, &ciToGateWayBuffer[0], ii);
if (CI_SUCCESS == chReval)
{
debug_infor_printf((char*)"\nGATEWAY_SEND:%d", ii);
debug_out_array(0xAA, ciToGateWayBuffer, ii);
}
else
{
;
}
}
return chReval;
}
/*
*
*
*
* fan 20260604
*/
void ClearCurGateWayMsg(void)
{
/*远程筛选消息*/
UINT32 dwCurCycNum = Get2oo2CurCycleNum(); /*当前周期号*/
if (dwCurCycNum == g_strAtsMsgFst.dwCycle)
{
ClearAtsMsgFirst();
}
if (dwCurCycNum == g_strAtsMsgSnd.dwCycle)
{
ClearAtsMsgSecond();
}
if (FLAG_SET == g_strSndAtsCfmFst.chFlag)/*第二个反馈信息解析时直接存储至反馈并设置标志*/
{
ClearSndAtsScreenFstCfmMsg();
}
if (dwCurCycNum == g_strAtsEaMsgFst.dwCycle)
{
ClearAtsEaMsgFirst();
}
if (dwCurCycNum == g_strAtsEaMsgSnd.dwCycle)
{
ClearAtsEaMsgSecond();
}
if (FLAG_SET == g_strSndAtsEaCfmFst.chFlag)/*第二个反馈信息解析时直接存储至反馈并设置标志*/
{
ClearSndAtsEaFstCfmMsg();
}
if (dwCurCycNum == g_strAtsWlbMsgFst.dwCycle)
{
ClearAtsWlbMsgFirst();
}
if (dwCurCycNum == g_strAtsWlbMsgSnd.dwCycle)
{
ClearAtsWlbMsgSecond();
}
if (FLAG_SET == g_strSndAtsWlbCfmFst.chFlag)/*第二个反馈信息解析时直接存储至反馈并设置标志*/
{
ClearSndAtsWlbFstCfmMsg();
}
if (dwCurCycNum == g_strAtsDaMsgFst.dwCycle)
{
ClearAtsDaMsgFirst();
}
if (dwCurCycNum == g_strAtsDaMsgSnd.dwCycle)
{
ClearAtsDaMsgSecond();
}
if (FLAG_SET == g_strSndAtsDaCfmFst.chFlag)/*第二个反馈信息解析时直接存储至反馈并设置标志*/
{
ClearSndAtsDaFstCfmMsg();
}
}
@@ -253,20 +253,21 @@ extern AtsMsgCfmStru * GetAtsCfmFst(void);
extern AtsMsgCfmStru * GetAtsCfmSnd(void);
/**
* @brief
* @brief TIOC到网关数据--
* @param
* @return
* @return CI_ERROR失败CI_SUCCESS成功
*/
extern UINT8 PackTiocToGateWayData(const UINT8 deviceId, const UINT8 targetDevType);
UINT8 PackTiocToGateWayData(UINT8* szToGateWayDataBuf, const UINT8 targetDevType, UINT16* wDataIndex);
/**
* @brief
* @brief ---GAL部分消息反馈内容
* @param const UINT8* dataBuf,
* @param const UINT16 dataLength,
* @param[out] UINT16* dataIndex,
* @param[in] const UINT16 dataLength,
* @return CI_SUCCESS:CI_ERROR:
*/
extern UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength);
UINT8 ParseGateWayToCiDataFrame(const UINT8* dataBuf, UINT16* dataIndex, const UINT16 dataLength);
/**
* @brief 1ATS筛选信息
@@ -449,4 +450,34 @@ void ClearSndAtsWlbFstCfmMsg(void);
*/
void ClearSndAtsDaFstCfmMsg(void);
/**
* @brief --GAL
* @param const UINT8* dataBuf,
* @param const UINT16 dataLength,
* @note Created By fan 20260604
* @return CI_SUCCESS:CI_ERROR:
*/
UINT8 ParseGateWayToCiDataProc(const UINT8* dataBuf, const UINT16 dataLength);
/*
* -GAL
* QueueStruct* ciToAtsDataQueue,
* const UINT8 deviceId, ID
* const UINT8 targetDevType,
* const UINT8 frame,
* UINT8* chSendXiandiorAtsBuf
* 0:
* 1:
* fan 20260604
*/
UINT8 PackCiToGateWayDataProc(const UINT8 deviceId, const UINT8 targetDevType);
/*
*
*
*
* fan 20260604
*/
void ClearCurGateWayMsg(void);
#endif
+10 -8
View File
@@ -290,7 +290,7 @@ UINT8 ParseOtherSysToCiData(void)
debug_infor_printf((const)"\nGATEWAY_RECV:%d", dataLen);
debug_out_array(0xAA, data, (UINT16)dataLen);
checkResult = ParseGateWayToCiDataFrame(data, (UINT16)dataLen);
checkResult = ParseGateWayToCiDataProc(data, (UINT16)dataLen);
}
if (CI_ERROR == checkResult)
@@ -881,7 +881,7 @@ UINT8 PackCiToOtherSysData(void)
if (chTiocRcvAtsGtwyDevTypeId == deviceIdBuf[ii])
{
/*组ATS站场帧数据*/
reVal = PackTiocToGateWayData(deviceIdBuf[ii], CI_SYSTEM_TYPE_ATS);
reVal = PackCiToGateWayDataProc(deviceIdBuf[ii], CI_SYSTEM_TYPE_ATS);
if (CI_ERROR == reVal)
{
@@ -989,7 +989,7 @@ UINT8 PackCiToOtherSysData(void)
reVal = PackCiToCiData(cLocalDevType, deviceIdBuf[ii]);
if (CI_ERROR == reVal)
{
debug_infor_printf((const)"\nPackCiToCiData Error: DstDev[0x%x]", (UINT16)(cLocalDevType) +(UINT16)(deviceIdBuf[ii])); /*组包错误*/
debug_infor_printf((const)"\nPackCiToCiData Error: DstDev[0x%x]", (UINT16)(cLocalDevType * 256U) + (UINT16)(deviceIdBuf[ii])); /*组包错误*/
}
else
{
@@ -1002,7 +1002,7 @@ UINT8 PackCiToOtherSysData(void)
reVal = PackHLHTCiToCiData(deviceIdBuf[ii]);
if (CI_ERROR == reVal)
{
debug_infor_printf((const)"\nPackHLHTCiToCiData Error: DstDev[0x%x]", (UINT16)(cLocalDevType)+(UINT16)(deviceIdBuf[ii]));/*组包错误*/
debug_infor_printf((const)"\nPackHLHTCiToCiData Error: DstDev[0x%x]", (UINT16)(cLocalDevType * 256U) +(UINT16)(deviceIdBuf[ii]));/*组包错误*/
}
else
{
@@ -1019,9 +1019,9 @@ UINT8 PackCiToOtherSysData(void)
cSysType = GetSystemWorkType();
cLocalCiType = GetLocalCiType();
if ((SYSTEM_WORK_MODE_ALL == cSysType) && ((CI_TYPE_ZX == cLocalCiType) || (CI_TYPE_SCX == cLocalCiType)))
if (SYSTEM_WORK_MODE_ALL == cSysType)
{
/*****双系统正线或试车线,组相邻控区另一个设备数据*****/
/*****双系统,组相邻控区另一个设备数据*****/
if (CI_SYSTEM_TYPE_CI == cLocalDevType)
{
cNearOtherDevType = CI_SYSTEM_TYPE_RC;
@@ -1048,7 +1048,7 @@ UINT8 PackCiToOtherSysData(void)
reVal = PackCiToCiData(cNearOtherDevType, deviceIdBuf[ii]);
if (CI_ERROR == reVal)
{
debug_infor_printf((const)"\nPackCiToCiData Error: DstDev[0x%x]", (UINT16)(cNearOtherDevType) +(UINT16)(deviceIdBuf[ii])); /*组包错误*/
debug_infor_printf((const)"\nPackCiToCiData Error: DstDev[0x%x]", (UINT16)(cNearOtherDevType * 256U) +(UINT16)(deviceIdBuf[ii])); /*组包错误*/
}
else
{
@@ -1068,7 +1068,7 @@ UINT8 PackCiToOtherSysData(void)
/*组本控区CI-RC数据*/
cStartLockFlag = GetStartLockFlag();
if (CI_START_LOCK_NO == cStartLockFlag)
if ((CI_START_LOCK_NO == cStartLockFlag) && ((CI_TYPE_ZX == cLocalCiType) || (CI_TYPE_SCX == cLocalCiType)))
{
/*双系统下的正线和试车线才进行本控区CI-RC的组包*/
if (CI_SYSTEM_TYPE_CI == cLocalDevType)
@@ -1256,6 +1256,8 @@ UINT8 PackCiToOtherSysData(void)
PackCiToCimFlyProtectData();
/*发送维护机IO双系采集不一致报警*/
PackCiToCimCollDiffData();
/*发送道岔冗余采集报警*/
PackCiToCimSwitchRedunAlarmData();
/*发送给AIM退出运营信息*/
AIMOutput();
/*发送给维护机执行单元报警信息*/
+197 -14
View File
@@ -94,7 +94,10 @@ UINT16 ConvertSigDrvColorToSigDrvCmd(const UINT16 signalId, const UINT8 drvColor
UINT8 ocHasBlue = 0u;
UINT8 funSwitchGreenYellow = GetCiFunctionSwitchConfig(CI_FUNCTION_SWITCH_SHOW_SIGNAL_GreenYellow);/*显示绿黄功能开关是否打开*/
UINT8 funSwitchALLCloseUseBlue = GetCiFunctionSwitchConfig(FUNC_SWITCH_ZX_ALLCLOSE_USEBLUE);/*杭德正线灭灯均转蓝灯功能开关*/
UINT8 ciType = GetLocalCiType();
UINT8 ciType = 0U;
UINT8 chSigBelongRtuId = 0U;
chSigBelongRtuId = GetSignalBelongVirCiId(signalId);
ciType = GetLocalVirCiType(chSigBelongRtuId);
switch (drvColor)
{
case SIGNAL_DRIVECOLOUR_RED:/*红*/
@@ -247,6 +250,15 @@ UINT8 PackCiToOcData( UINT8 deviceId)
UINT16 deviceSum = 0u;
UINT16 kqChangeCommand = 0u;/*控权切换命令*/
UINT8 chCurSystemAreaState = 0u; /*主备用模式*/
UINT8 chMainCotrolOCId = 0U;
UINT8 chControlCmd = 0U;
UINT8 chControlCmdNum = 0u;
UINT32 cmdIndex = 0u;
UINT8 chOcOutControlCmd = 0u;
UINT8 chOcFindPostionCmd = 0u;
UINT8 chLocalCiOCSswitch = 0u;
chLocalCiOCSswitch = GetLocalCiOCSswitch();
#if 0
QueueClear(CiToOcDataQueue); /*清队列*/
#endif
@@ -325,7 +337,25 @@ UINT8 PackCiToOcData( UINT8 deviceId)
ShortToChar(pOcData->OcDevices[kk].DeviceId, &Ci2OcDataBuffer[ii]);
ii += 2u;
drvPos = GetSwitchDrivePostion(pOcData->OcDevices[kk].DeviceId);
chMainCotrolOCId = GetSwitchMainCotrolOCId(pOcData->OcDevices[kk].DeviceId);
if ((chMainCotrolOCId == pOcData->OcId)||(OC_S_OFF == chLocalCiOCSswitch))
{/*当前有主控OC或OC-S功能关闭*/
drvCmd = ConvertSwitchDrvPosToSwDrvCmd(drvPos);
}
else
{/*有OC-S且当前无主控,需寻表*/
drvCmd = OC_SWITCH_DRIVE_POS_KEEP;/*保持*/
chOcOutControlCmd = GetSwitchThisOcOutControlCmd(pOcData->OcDevices[kk].DeviceId, (UINT8)pOcData->OcId);
if (MAIN_CONTROL == chOcOutControlCmd)
{
chOcFindPostionCmd = GetSwitchThisOcFindPostionCmd(pOcData->OcDevices[kk].DeviceId, (UINT8)pOcData->OcId);
drvCmd = ConvertSwitchFindPosToSwFindCmd(chOcFindPostionCmd);
}
}
ShortToChar(drvCmd, &Ci2OcDataBuffer[ii]);
ii += 2u;
break;
@@ -636,6 +666,51 @@ UINT8 PackCiToOcData( UINT8 deviceId)
ii += ciSorToOcIdx;
}
if (CI_SUCCESS == retVal)
{
cmdIndex = ii;
ii += 1u;
for (kk = 0u; kk < pOcData->OcDeviceNum; kk++)/*遍历设备*/
{
switch (pOcData->OcDevices[kk].DeviceType)
{
case CI_DEVICE_TYPE_SWITCH:/*道岔设备*/
{
ShortToChar(pOcData->OcDevices[kk].DeviceId, &Ci2OcDataBuffer[ii]);
ii += 2u;
if (OC_S_ON == chLocalCiOCSswitch)
{/*OS-S开关打开*/
chControlCmd = GetSwitchThisOcOutControlCmd(pOcData->OcDevices[kk].DeviceId, (UINT8)pOcData->OcId);
if ((MAIN_CONTROL == chControlCmd) || (STANDBY_CONTROL == chControlCmd))
{
Ci2OcDataBuffer[ii] = chControlCmd;
}
else
{
Ci2OcDataBuffer[ii] = STANDBY_CONTROL;
}
}
else
{/*OC-S开关关闭*/
Ci2OcDataBuffer[ii] = NO_CONTROL_FUN;
}
ii += 1u;
chControlCmdNum++;
break;
}
default:
{/*无执行*/
break;
}
}
}
Ci2OcDataBuffer[cmdIndex]= chControlCmdNum;/*设备数量*/
}
#if 0 /*屏蔽型式实验,以后有需要再打开*/
if (curCycleNum == xingshiTestStartCycle && 1 == xingshiTestStart)
{
@@ -1124,6 +1199,10 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
UINT32 dwUpToMainCyc = 0U;/*本机升主机周期号*/
UINT32 CiRecvOcSN = 0U;/*同步的CI数据中OC周期号*/
HLHTHeadContextStru* pstrHlhtHeadCtx = NULL; /*CI同步的互联互通报文头上下文数据*/
UINT8 dwMainStandbyState = 0U;
UINT8 chSwitchBelongOThisOCRet = 0U;
(void)CommonMemSet(pTmpOcToCiData, (UINT32)sizeof(OcToCiOriginDataStruct),0U, (UINT32)sizeof(OcToCiOriginDataStruct));/*清内存,防止脏数据*/
chMainWorckMode = GetLocalCiBackUpPattern();
dwUpToMainCyc = GetSystemUpdateMainUseCycNum();
@@ -1184,7 +1263,7 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
localCiId = GetSystemParaLocalCiId(); /*获取联锁ID*/
wCiName = (CI_SYSTEM_TYPE_RCI)* 256U + localCiId;
headRet = HLHTRecvCommonPacketHeadCheck(ocName, wCiName, CI_OC_INTERFACE_INFOTYPE, CI_OC_PRTCL_VER, &hlhtGalHead, &errCode, 0u, CI_SYSTEM_TYPE_OC);
headRet = HLHTRecvCommonPacketHeadCheck(ocName, wCiName, CI_OC_INTERFACE_INFOTYPE, (UINT8)CI_OC_PRTCL_VER, &hlhtGalHead, &errCode, 0u, CI_SYSTEM_TYPE_OC);
transmitBadEnsureTime = GetCiAndOcTransmitBadEnsureTime();
debug_infor_printf((const)"\nOC %d GAL Check Result:%d errCode:%d\n", systemId, headRet, errCode); /*0x55正确,0xaa错误,0x33初始通信帧*/
@@ -1224,7 +1303,7 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
{
chUsableCycCheck = CI_SUCCESS;
}
if (0U < ocInfoRemainValidity)
if (0 < ocInfoRemainValidity)
{
/*解析应用数据*/
wApplyDataLenth = ShortFromChar(&dataBuf[ii]);/*应用层数据长度*/
@@ -1253,9 +1332,9 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
{
tmpDeviceId = ShortFromChar(&dataBuf[ii]); /*设备Id 2B*/
ii += 2u;
chDevBelongOC = (UINT8)GetSwitchBelongOcId(tmpDeviceId);
chSwitchBelongOThisOCRet = (UINT8)GetSwitchWhetherBelongThisOc(tmpDeviceId, systemId);
chDevBelongCI = GetSwitchBelongCiId(tmpDeviceId);
if ((chDevBelongOC != systemId)||(chDevBelongCI != localCiId))
if ((CI_SUCCESS != chSwitchBelongOThisOCRet)||(chDevBelongCI != localCiId))
{
retVal = CI_ERROR;
debug_infor_printf((const)"Swicth devId:%d Belong OC/CI Error\n", tmpDeviceId);
@@ -1319,7 +1398,22 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
{
switchBoardCheck = CI_SUCCESS; /*存在正常板卡*/
}
dwMainStandbyState = dataBuf[ii++];/*板卡主控状态*/
if ((MAIN_CONTROL == dwMainStandbyState) || (STANDBY_CONTROL == dwMainStandbyState) || (NO_CONTROL_FUN == dwMainStandbyState))
{
pTmpOcToCiData->OcDevices[j].MainStandbyState[k] = dwMainStandbyState;
}
else
{
retVal = CI_ERROR;
debug_infor_printf((const)"Swicth devId %d Board ControlMode ill, mode: %d\n", tmpDeviceId, dwMainStandbyState);
break;
}
}
if (CI_SUCCESS == retVal)
{
pTmpOcToCiData->OcDevices[j].DeviceType = tmpDeviceType; /*设备类型 1B*/
pTmpOcToCiData->OcDevices[j].DeviceId = tmpDeviceId; /*设备Id 2B*/
pTmpOcToCiData->OcDevices[j].DeviceState = tmpDeviceState; /*设备状态 1B*/
@@ -1334,6 +1428,10 @@ UINT8 ParseOcToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLength,const U
}
}
}
else
{
/*设备(信号机、道岔)超出索引,给出调试警告信息*/
@@ -2072,10 +2170,10 @@ INT16 GetIndexBySignalId(UINT16 sigId)
/*
* id获取索引
* ²ÎÊý˵Ã÷£º void
* ·µ»ØÖµ £º void
* UINT16 swId ID,UINT8 ocId OCID
*
*/
INT16 GetIndexBySwitchId(UINT16 swId)
INT16 GetIndexBySwitchId(UINT16 swId,UINT8 ocId)
{
INT16 retIndex = -1;
@@ -2083,7 +2181,7 @@ INT16 GetIndexBySwitchId(UINT16 swId)
for (i=0u;i<m_SwitchNum;i++)
{
if (m_Switches[i].DeviceId == swId)
if ((m_Switches[i].DeviceId == swId)&&(ocId == (UINT8)m_Switches[i].OcId))
{
retIndex = (INT16)i;
break;
@@ -2162,17 +2260,22 @@ void InitOcSignals(void)
*/
void InitOcSwitchs(void)
{
UINT16 i = 0u;
UINT8 j = 0u;
UINT8 k = 0U;
SwitchConfigDataStruct *pSwitch = NULL;
UINT8 localCi = 0u;
localCi =GetSystemParaLocalCiId();
m_SwitchNum = 0u;
pSwitch = GetSwitchConfigData();
if (NULL != pSwitch)
{
for (i = 0u; i < SWITCH_SUM_MAX; i++)
{
if ((CI_SWITCH_MAX == m_SwitchNum) || (NULL == pSwitch))
for (j = 0u; j < pSwitch[i].chSwitchBelongOcNum; j++)
{/*线性存储2个OC的临时数据*/
if (CI_SWITCH_MAX == m_SwitchNum)
{
/*超出索引,给出调试警告信息*/
debug_infor_printf((const)"InitOcSwitchs():error");
@@ -2188,11 +2291,20 @@ void InitOcSwitchs(void)
{
m_Switches[m_SwitchNum].BoardState[k] = 0xffU;
m_Switches[m_SwitchNum].BoardAddr[k] = 0U;
m_Switches[m_SwitchNum].MainStandbyState[k] = 0U;
}
m_Switches[m_SwitchNum].OcId = pSwitch[i].BelongOcId;
m_Switches[m_SwitchNum].OcId = pSwitch[i].belongOCConfigData[j].OcId;
m_SwitchNum++;
}
}
if (CI_SWITCH_MAX == m_SwitchNum)
{
debug_infor_printf((const)"InitOcSwitchs():error1");
break;
}
}
}
}
/*
@@ -2249,6 +2361,8 @@ void ConvertOcOriginDataToOcSigSwDev(UINT8 devId)
UINT8 chOcId = 0U;
UINT8 chOcBelongCI = 0U;/*OC所属联锁*/
UINT8 chLocalCiId = GetSystemParaLocalCiId();
UINT8 chSwitchszPlusBoxId = 0U;
for (i=0U;i<m_OcToCiOrginDataNum;i++)/*遍历OC*/
{
chOcId = (UINT8)m_OcToCiOrginDataArr[i].OcId & 0xFFU;
@@ -2264,7 +2378,7 @@ void ConvertOcOriginDataToOcSigSwDev(UINT8 devId)
if (pOcDevice->DeviceType == OC_DEVICE_TYPE_SIGNAL)
{/*信号机*/
ind = GetIndexBySignalId(pOcDevice->DeviceId);
if ((ind >=0) && (OC_DEVICE_TYPE_SIGNAL == pOcDevice->DeviceType))
if (ind >=0)
{
if ((m_Signals[ind].OcId == pOcDevice->OcId) &&
(m_Signals[ind].DeviceId == pOcDevice->DeviceId))
@@ -2289,7 +2403,7 @@ void ConvertOcOriginDataToOcSigSwDev(UINT8 devId)
}
else
{/*道岔*/
ind = GetIndexBySwitchId(pOcDevice->DeviceId);
ind = GetIndexBySwitchId(pOcDevice->DeviceId, pOcDevice->OcId);
if ((ind >=0) && (OC_DEVICE_TYPE_SWITCH == pOcDevice->DeviceType))
{
if ((m_Switches[ind].OcId == pOcDevice->OcId) &&
@@ -2302,6 +2416,8 @@ void ConvertOcOriginDataToOcSigSwDev(UINT8 devId)
{
m_Switches[ind].BoardAddr[k] = pOcDevice->BoardAddr[k];
m_Switches[ind].BoardState[k] = pOcDevice->BoardState[k];
}
/* 保存数据 */
m_Switches[ind].chSwitchIncldeZzjNum = pOcDevice->chSwitchIncldeZzjNum;
@@ -2309,6 +2425,36 @@ void ConvertOcOriginDataToOcSigSwDev(UINT8 devId)
{
m_Switches[ind].szSwitchIncldeZzjState[k] = pOcDevice->szSwitchIncldeZzjState[k];
}
for (k = 0U; k < MAX_OC_SWITCH_INCLUDE_BOARD_NUM; k++)
{/*给所有OC设置主控状态*/
m_Switches[ind].MainStandbyState[k] = pOcDevice->MainStandbyState[k];
}
chSwitchszPlusBoxId = GetSwitchszPlusBoxId(m_Switches[ind].DeviceId,(UINT8)m_Switches[ind].OcId);
for (k = 0U; k < m_OcToCiOrginDataArr[i].chPbNum; k++)
{
if (chSwitchszPlusBoxId == m_OcToCiOrginDataArr[i].szPlusBox[k].chPbId)
{
if (SWITCH_BOX_NORMAL == m_OcToCiOrginDataArr[i].szPlusBox[k].chAsState)
{/*正常*/
SetSwitchOcPlusBoxSateState(m_Switches[ind].DeviceId, (UINT8)m_Switches[ind].OcId, SWITCH_BOX_NORMAL);
}
else
{
SetSwitchOcPlusBoxSateState(m_Switches[ind].DeviceId, (UINT8)m_Switches[ind].OcId, SWITCH_BOX_FAULT);
}
break;
}
}
/*将板卡故障状态导入*/
for (k = 0U; k < m_Switches[ind].BoardNum; k++)
{
SetSwitchThisOCBoardState(m_Switches[ind].DeviceId, (UINT8)m_Switches[ind].OcId, m_Switches[ind].BoardAddr[k], m_Switches[ind].BoardState[k]);
}
}
else
{
@@ -2352,6 +2498,10 @@ void ConvertOcOriginDataToOcSigSwDev(UINT8 devId)
}
}
else
{
@@ -2864,9 +3014,42 @@ UINT8 OcInputSignalStateCheck(const UINT8 chInput)
break;
default:
retVal = CI_ERROR;
break;
}
return retVal;
}
/*
*
*
*
* UINT8 drvColor
* 0:
* 1:
* add by mpt 20260330
*/
UINT16 ConvertSwitchFindPosToSwFindCmd(UINT8 chFindPos)
{
UINT16 retDrvCmd = 0u;
switch (chFindPos)
{
case FIND_DINGWEI_CMD:
retDrvCmd = OC_SWITCH_FIND_DINGWEI;
break;
case FIND_FANWEI_CMD:
retDrvCmd = OC_SWITCH_FIND_FANWEI;
break;
case INIT_FIND_CMD:
retDrvCmd = OC_SWITCH_ININ_FIAND;
break;
case NO_FIND_CMD:
retDrvCmd = OC_SWITCH_DRIVE_POS_KEEP;
break;
default:
retDrvCmd = OC_SWITCH_DRIVE_POS_KEEP;
break;
}
return retDrvCmd;
}
+15 -7
View File
@@ -55,7 +55,7 @@
#define MAX_OC_PLUS_BOX_NUM ((UINT16)3) /*一个OC支持最大执行电插箱(可达最大值)*/
#define MAX_OC_DEVICE_SWAP_MAX ((UINT16)83) /*一个OC最大切系板卡数量(MAX_OC_DEVICE_NUM/2)(不可达最大值) */
#define MAX_OC_SWITCH_INCLUDE_ZZJ_NUM ((UINT16)10) /*一个道岔支持最大转辙机个数(可达最大值)*/
#define MAX_OC_SWITCH_INCLUDE_BOARD_NUM ((UINT8)10) /*一个道岔支持最大板卡数量(不可达最大值)*/
#define Max_OC_GD_NUM ((UINT16)252) /*一个oc支持最大多少个轨道区段(不可达最大值)*/
#define MAX_OC_DEVICE_PSD_MAX ((UINT8)2) /*一个OC最大屏蔽门数量(可达最大值)*/
@@ -95,6 +95,7 @@ typedef struct s_OcDevState
UINT8 BoardNum; /*板卡数量*/
UINT8 BoardAddr[MAX_OC_SWITCH_INCLUDE_BOARD_NUM]; /*板卡地址*/
UINT8 BoardState[MAX_OC_SWITCH_INCLUDE_BOARD_NUM]; /*板卡状态 正常0x0000 错误发错误码*/
UINT8 MainStandbyState[MAX_OC_SWITCH_INCLUDE_BOARD_NUM]; /*主备状态*/
}OcDeviceStruct;
typedef struct s_OcDoBoardData
@@ -436,12 +437,10 @@ INT16 GetIndexBySignalId(UINT16 sigId);
/*
* id获取索引
*
* Id
*
* Int16:Id
* UINT16 swId ID,UINT8 ocId OCID
*
*/
INT16 GetIndexBySwitchId(UINT16 swId);
INT16 GetIndexBySwitchId(UINT16 swId, UINT8 ocId);
/*
* id获取索引
@@ -513,7 +512,16 @@ UINT8 OcInputStateCheck(const UINT8 chInput, const UINT8 chOtherValid);
* CI_ERROR CI_SUCCESS
*/
UINT8 OcInputSignalStateCheck(const UINT8 chInput);
/*
*
*
*
* UINT8 drvColor
* 0:
* 1:
* add by mpt 20260330
*/
UINT16 ConvertSwitchFindPosToSwFindCmd(UINT8 chFindPos);
#ifdef __cplusplus
}
#endif
@@ -364,7 +364,7 @@ UINT8 ParseTmcToTiocDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId)
retVal = CI_ERROR;
}
if ((CI_ERROR == retVal) || (0u == galHeadSaved))
if ((CI_ERROR == retVal) && (0u == galHeadSaved))
{
/*清除通用报文头*/
ClearHlhtHeadCtx(CI_SYSTEM_TYPE_TMC, systemId);
File diff suppressed because it is too large Load Diff
@@ -36,6 +36,8 @@
#include "../IO/DeviceRelayDataProcess.h"
#include "dquIdmapQuery.h"
#include "../Section/LogicSectionConfigDataManage.h"
#include "AxisAssertDefine.h"
#include "AxisAssertManageAPI.h"
#define CI_PSD_COMM_STATE_GOOD ((UINT8)0x55)
@@ -73,6 +75,10 @@
#define CI_VOBC_BACKUP_STATE_INFO ((UINT16)0x0211) /*CI=>VOBC后备运行状态信息*/
#define VOBC_CI_INFO_TYPE_BACKUU_CONTROL ((UINT16)0x0212) /*VOBC=>CI后备运行控制信息*/
/*VOBC_CI点连式信息帧-目前仅互联互通接口具备,帧类型与全自动运行洗车重复,若需要适配其他接口,需要重新排帧类型*/
#define VOBC_CI_INFO_TYPE_BLOCLINK ((UINT16)0x020b) /*VOBC_CI点连式信息帧类型*/
#define CI_VOBC_INFO_TYPE_BLOCLINK ((UINT16)0x020c) /*CI_VOBC点连式信息帧类型*/
#define VOBC_CI_GAP_DETECT_CMD_START ((UINT8)0x55) /*VOBC2CI启动间隙探测命令*/
#define VOBC_CI_GAP_DETECT_CMD_STOP ((UINT8)0xAA) /*VOBC2CI停止间隙探测命令*/
#define VOBC_CI_GAP_DETECT_CMD_DEFAULT ((UINT8)0xFF) /*VOBC2CI默认间隙探测命令*/
@@ -106,7 +112,8 @@
#define VOBC_RC_INTERFACE_INFOTYPE ((UINT16)0x0217U) /*VOBC-RC接口,RC-VOBC接口*/
#define VOBC_RC_INFO_STATE ((UINT16)0x0201U) /*VOBC->RC控制信息,周期发送*/
#define RC_VOBC_HEART_FRAME ((UINT16)0x0202U) /*RC->VOBC心跳信息,周期发送*/
#define RC_VOBC_HEART_FRAME ((UINT16)0x0202U) /*RC->VOBC心跳信息,周期发送*/
#define RC_VOBC_STATE_FRAME ((UINT16)0x0205U) /*RC->VOBC设备状态信息,周期发送*/
#define CI_IVOC_PRTCL_VER ((UINT8)0x01U) /*CI_VOBC协议版本号*/
@@ -145,9 +152,9 @@
#define IVOC_CI_LOGOUT_NORMAL ((UINT8)0x00U) /*IVOC到IC 正常注销*/
#define IVOC_CI_LOGOUT_SLEEP ((UINT8)0x01U) /*IVOC到IC 休眠注销*/
#define VOBC_CI_DIR_UP ((UINT8)0x55U) /*IVOC到IC 上行*/
#define VOBC_CI_DIR_DOWN ((UINT8)0xAAU) /*IVOC到IC 下行*/
#define VOBC_CI_DIR_DEF ((UINT8)0xFFU) /*IVOC到IC 默认*/
#define VOBC_CI_DIR_UP ((UINT8)0x55U) /*VOBC-CI 上行*/
#define VOBC_CI_DIR_DOWN ((UINT8)0xAAU) /*VOBC-CI 下行*/
#define VOBC_CI_DIR_DEF ((UINT8)0xFFU) /*VOBC-CI 默认*/
#define CI_IVOC_SWITCH_POSTION_DING ((UINT8)0x55U) /*CI到IVOC道岔定位状态*/
#define CI_IVOC_SWITCH_POSTION_FAN ((UINT8)0xAAU) /*CI到IVOC道岔反位状态*/
@@ -225,6 +232,7 @@
#define IVOC_CI_FLOODGATE_CLOSE_ALLOW_SUM ((UINT8)50U) /*IVOC到CI防淹门关闭允许的数量最大值*/
#define IVOC_CI_GARAGEDOOR_CLOSE_ALLOW_SUM ((UINT8)50U) /*IVOC到CI车库门关闭允许的数量最大值*/
#define CI_IVOC_YUXIANOPEN_ROUTE_MAX ((UINT8)200U) /*CI到IVOC预先开放进路最大值*/
#define CI_IVOC_COM_ERR_RC_NUM_MAX ((UINT8)5U) /*CI到IVOC通信故障RC最大值*/
#define CI_IVOC_URGENT_YES ((UINT8)0x55U) /*CI到IVOC 紧急制动状态有效*/
#define CI_IVOC_URGENT_NO ((UINT8)0xaaU) /*CI到IVOC 紧急制动状态无效*/
@@ -243,6 +251,26 @@
#define TRAIN_LEN_MIN 1000U /*最小车长*/
#define TRAIN_LEN_MAX 50000U /*最大车长*/
#define VOBC_CI_BLOCLINK_BLOCK_CTRL ((UINT8)0x01) /*点式列车控制级别*/
#define VOBC_CI_BLOCLINK_CI_CTRL ((UINT8)0x02) /*联锁控制级别*/
#define VOBC_CI_BLOCLINK_CI_DEFAULT ((UINT8)0xFF) /*默认值*/
#define CI_VOBC_SWITCH_MAX ((UINT8)20U) /*CI-VOBC点连式道岔数量最大值*/
#define CI_VOBC_OTHER_EQUIPMENT_MAX ((UINT8)10U) /*CI-VOBC点连式其他设备数量最大值*/
#define CI_VOBC_XIANSU_NOT ((UINT8)0xaaU) /*CI-VOBC点连式未设置临时限速*/
#define CI_VOBC_XIANSU_YES ((UINT8)0x55U) /*CI-VOBC点连式已设置临时限速*/
#define CI_VOBC_DESTINATION_TYPE_RETURN ((UINT8)0xaaU) /*CI-VOBC点连式目的地属性-折返*/
#define CI_VOBC_DESTINATION_TYPE_LIECHE ((UINT8)0x55U) /*CI-VOBC点连式目的地属性-直通*/
#define CI_VOBC_FLOOD_STATE_OPEN ((UINT8)0xaaU) /*CI-VOBC点连式防淹门开启锁定状态且无关门请求*/
#define CI_VOBC_FLOOD_STATE_CLOSE ((UINT8)0x55U) /*CI-VOBC点连式防淹非开启锁定状态或有关门请求*/
#define CI_VOBC_TRAIN_ZERO_SPEED_NO ((UINT8)0xAAU) /*CI-VOBC列车非零速*/
#define CI_VOBC_TRAIN_ZERO_SPEED_YES ((UINT8)0x55U) /*CI-VOBC列车零速*/
#ifdef __cplusplus
extern "C" {
#endif
@@ -286,6 +314,18 @@ typedef struct S_IvocToCiCmdStruct
UINT16 wCmdDevId[IVOC_CI_CMD_DEVICE_MAX]; /* 命令设备ID数组*/
}IvocCmdStru;
/*点连式信息*/
typedef struct S_VobcToCiBlocLinkStruct
{
UINT8 chBlocLinkTrainLevel; /*点连式运行级别*/
UINT32 chBlocLinkCycle; /*点连式通信周期*/
UINT8 chTrainDirection; /*运行方向*/
UINT16 wTrainMaxSafeHeadLink; /*列车最大安全前端所处Link*/
UINT32 dwTrainMaxSafeHeadOffset; /*列车最大安全前端偏移量*/
UINT16 wTrainMinSafeTailLink; /*列车最小安全后端所处link*/
UINT32 dwTrainMinSafeTailOffset; /*列车最小安全后端偏移量*/
}VobcToCiBlocLinkStruct;
/*与联锁通信的Vobc信息*/
typedef struct S_VobcToCiDataStruct
{
@@ -295,6 +335,7 @@ typedef struct S_VobcToCiDataStruct
UINT8 washTrainRequest; /*洗车请求信息*/
UINT8 headWashStopSteadyInfo; /*头端洗位停稳信息,洗车停稳1*/
UINT8 tailWashStopSteadyInfo; /*尾端洗位停稳信息,洗车停稳2*/
UINT8 couplingWashStopSteadyInfo; /*联挂端洗位停稳信息,洗车停稳3*/
UINT8 passWashMachineRequest; /*通过洗车机请求信息*/
UINT8 washPauseRequest; /*暂停洗车请求*/
UINT8 chWashMachineWorkMode; /*洗车机工作模式设置*/
@@ -310,6 +351,8 @@ typedef struct S_VobcToCiDataStruct
VobcToCiPsdDataStruct PsdData[VOBC_TO_CI_TRAIN_PSD_MAX]; /*关联屏蔽门数据*/
UINT32 signalID; /*VOBC->CI信号机ID*/
VobcToCiBlocLinkStruct strBlocLinkData; /*VOBC->CI点连式信息*/
/*add by qw.liu 2022-02-24 增加车车新接口字段*/
UINT8 chTrainLevel; /*列车运行级别:01:VBTC;02:ITC;03:UR;04:ABL*/
UINT8 chTrainMode; /*列车模式*/
@@ -809,6 +852,32 @@ UINT8 GetRecvVobcControlMode(const UINT16 wVobcId);
* Create fan 20250725
*/
UINT8 PackCiToIvocOpenRouteNotNearInfo(UINT8* pDataBuf, UINT16* wDataLength, UINT16 wTrainId);
/*
* VOBC点连式数据
* UINT8* CiToVobcDataBuffer buffer
* UINT16* ii
* VobcToCiDataStruct *vobcToCiDataStru VOBC-CI数据
*
* Create lyj 20260314
*/
void PackVobcBlocLinkData(UINT8* CiToVobcDataBuffer, UINT16* ii, VobcToCiDataStruct* vobcToCiDataStru);
/*
* VOBC点连式数据
* const UINT8* dataBuf,
* const UINT16 dataLength,
* VobcToCiDataStruct* vobcToCiDataStru VOBC到CI结构体数据
*
* Create lyj 20260314
*/
UINT8 ParseVobcBlocLinkData(const UINT8* dataBuf, const UINT16 dataLength, VobcToCiDataStruct* vobcToCiDataStru);
/*
*
* const UINT16 wCheckDeviceId ID
* const UINT16* pDeviceBuf
* const UINT8 wDeviceNum
*
*/
UINT8 CheckRepeatData(const UINT16 wCheckDeviceId, const UINT16* pDeviceBuf, const UINT8 wDeviceNum);
#ifdef __cplusplus
}
#endif
+399 -54
View File
@@ -28,6 +28,11 @@ UINT8 lineIdentity = 0u; /*
ZcToCiDynamicDataStruct gZcToCiDymDataStru = { 0U }; /*ZC动态数据结构体*/
UINT8 gCbtcCrossNumZc = 0u; /*主控CBTC列车跨压数量*/
CbtcCrossStructZC gCbtcCrossStructZc[ALL_CBTC_CROSS_SUM_MAX] = { 0u }; /*主控CBTC列车跨压信息*/
static UINT8 ParseZcCbtcCrossData(UINT8* pDataBuf, UINT16 dataLen);
static UINT16 PackRcTacsCrossData(UINT8 *pDataBuf);
/*
* ZC单帧数据
@@ -41,8 +46,6 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId)
{
UINT8* sourceId = NULL; /*源ID*/
UINT16 ii = 0u;
UINT16 jj = 0u;
UINT8 kk = 0u;
UINT8 retVal = CI_SUCCESS;
UINT32 dwStep = 0U;
UINT8 galHeadSaved = 0u; /*通用头是否已保存标志,1保存;0未保存*/
@@ -71,8 +74,8 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId)
zcName = (CI_SYSTEM_TYPE_ZC)*256U + systemId;
ciName = (CI_SYSTEM_TYPE_RCI)*256U + localCiId;
curntCycleNo = Get2oo2CurCycleNum();
chDataType = GetLocalPublicDataType(); /*区分28.0.0.14与其他线路zc接口*/
if ((NULL != dataBuf) && (dataLength > 0u))
chDataType = GetLocalPublicDataType(); /*区分分支,与主线zc接口*/
if ((NULL != dataBuf) && (0U < dataLength))
{
sourceId = GetCiTransmitSpecifySysDevBuf(CI_SYSTEM_TYPE_ZC);/*获取与本联锁通信的ZC的ID,目前一个联锁最多只与一个ZC通信*/
@@ -116,7 +119,7 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId)
/*计算消息的时效性*/
zcInfoRemainValidity = HLHTCommonMsgRemainingValidity(GetCiAndZcTransmitBadEnsureTime(), curntCycleNo, GetSystemParaAppCycleTime(), hlhtGalHead.recvOppMsgSN, hlhtGalHead.crntOwnMsgSN, hlhtGalHead.preOwnMsgSN, hlhtGalHead.comPeriod);
if (zcInfoRemainValidity > 0)
if (0 < zcInfoRemainValidity)
{
if (0u == hlhtGalHead.totalDataLen)
{
@@ -132,8 +135,7 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId)
{
/*报文有效,继续解析*/
retVal = CI_SUCCESS;
{
if (DATA_TYPE_NEW == chDataType)
if (DATA_TYPE_MAIN_BRANCH == chDataType)
{
while (wTmpDataLen < hlhtGalHead.totalDataLen)
{
@@ -191,6 +193,11 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId)
retVal = ParseZcIteCutData(&dataBuf[ii], wMsgCheckLen);
dwStep |= 0x00001U;
break;
case ZC_TO_RC_CBTC_CROSS_MSG:
/*解析ZC-CI的CBTC主控列车跨压信息*/
retVal = ParseZcCbtcCrossData(&dataBuf[ii], wMsgCheckLen);
dwStep |= 0x00002U;
break;
default:
retVal = CI_ERROR;
break;
@@ -226,9 +233,85 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId)
}
}
}
else if (DATA_TYPE_28_BRANCH == chDataType)
{
/*28分支具备码位02010205*/
while (wTmpDataLen < hlhtGalHead.totalDataLen)
{
/* 一条应用数据长度 */
wMsgLen = ShortFromChar(&dataBuf[ii]);
ii += 2U;
wTmpDataLen += 2U;
wTmpDataLen += wMsgLen;
if (5U > wMsgLen)
{
/* 单包长度不对 */
retVal = CI_ERROR;
debug_infor_printf((const)"ParseZcToCiDataFrame_Error wMsgLen\n");
}
else
{
/*杭德线无报文类型、类型长度和预留,仅具备码位0201*/
/* 获取报文类型 */
wMsgType = ShortFromChar(&dataBuf[ii]);
ii += 2U;
/* 跳过预留 */
ii += 2U;
wMsgCheckLen = wMsgLen - 4U;
switch (wMsgType)
{
case ZC_TO_TIOC_MASK_MSG:
{
/* 解析ZC-CI码位信息 */
retVal = ParseMaskData(&dataBuf[ii], wMsgCheckLen);
}
break;
case ZC_TO_TIOC_SNOW_MSG:
{
/*解析ZC-CI雨雪模式信息*/
retVal = ParseZcSnowData(&dataBuf[ii], wMsgCheckLen);
}
break;
default:
retVal = CI_ERROR;
break;
}
if (CI_SUCCESS == retVal)
{
/* 解析成功,跳过该数据包 */
ii += wMsgCheckLen;
}
else
{
debug_infor_printf((const)"ParseZcToCiDataFrame_Error MsgType: %d\n", wMsgType);
ClearZcData(); /*任意步骤没解析通过则清空*/
}
}
if (CI_ERROR == retVal) /*解析失败*/
{
break;
}
else
{
; /*do nothing*/
}
}
if (CI_SUCCESS == retVal)
{
/*校验数据长度*/
if (ii > dataLength)
{
retVal = CI_ERROR;
}
}
}
else
{
/*23分支无报文类型、类型长度和预留,仅具备码位*/
wMsgCheckLen = hlhtGalHead.totalDataLen;
retVal = ParseMaskData(&dataBuf[ii], wMsgCheckLen);
if (CI_ERROR == retVal)
@@ -238,15 +321,26 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId)
}
else
{
; /*继续*/
ii += wMsgCheckLen; /*继续*/
}
}
if (CI_SUCCESS == retVal)
{
if (hlhtGalHead.totalDataLen != (ii - 31U))
{
retVal = CI_ERROR;
debug_infor_printf((const)"\nParseZcToCiDataFrame_Error totalDataLen\n");
}
else
{
/*继续*/
}
}
if (CI_SUCCESS == retVal)
{
/*更新通信周期*/
dwCurCyc = Get2oo2CurCycleNum();
funRet = SetCiTransmitRecvDataCycNum(localCiId, CI_SYSTEM_TYPE_ZC, sourceId[0], dwCurCyc);
funRet = SetCiTransmitRecvDataCycNum(localCiId, CI_SYSTEM_TYPE_ZC, sourceId[0U], dwCurCyc);
if (CI_ERROR == funRet)
{/*更新周期失败*/
@@ -255,7 +349,7 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId)
{/*更新周期成功*/
/*更新与ZC通信状态:判断与ZC是否通信中断*/
funRet = UpdateCiTransmitState(localCiId, CI_SYSTEM_TYPE_ZC, sourceId[0]);
funRet = UpdateCiTransmitState(localCiId, CI_SYSTEM_TYPE_ZC, sourceId[0U]);
if (CI_ERROR == funRet)
{
/*更新通信状态失败*/
@@ -274,15 +368,14 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId)
SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_ZC, systemId, curntCycleNo);
SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_ZC, systemId, 0u);
galHeadSaved = 1;
}
galHeadSaved = 1U;
}
}
}
}
else if (HLHT_HEAD_INIT ==headRet)
{
if (curntCycleNo > 0u)/*判断序号大于0,因为把0当做无效序号*/
if (0U < curntCycleNo)/*判断序号大于0,因为把0当做无效序号*/
{
SetHLHTHeadCtxComPeriod(CI_SYSTEM_TYPE_ZC, systemId, hlhtGalHead.comPeriod);
SetHLHTHeadCtxSrcCrntSN(CI_SYSTEM_TYPE_ZC, systemId, hlhtGalHead.crntOwnMsgSN);
@@ -291,7 +384,7 @@ UINT8 ParseZcToCiDataFrame(UINT8* dataBuf, UINT16 dataLength, UINT8 systemId)
SetHLHTHeadCtxCiRcvSN(CI_SYSTEM_TYPE_ZC, systemId, curntCycleNo);
SetHLHTHeadCtxCiRcvLogId(CI_SYSTEM_TYPE_ZC, systemId, 0u);
galHeadSaved = 1;
galHeadSaved = 1U;
}
retVal = CI_ERROR;
@@ -1053,25 +1146,26 @@ UINT8 ParseZcSnowData(UINT8* dataBuf, UINT16 dataLen)
*/
UINT8 PackCiToZcData( UINT8 deviceId)
{
UINT8 localCi = 0u; /*本地联锁ID*/
UINT8 CiToZcDataBuffer[CI_TO_ZC_DATA_LEN_MAX] = {0u};/*CI到ZC组帧数组*/
UINT16 SendMaskSum = 0u;
UINT16 ii = 0u;
UINT32 ciEtcsId = 0u; /*CI互联互通编号*/
UINT32 zcEtcsId = 0u; /*ZC互联互通编号*/
UINT32 emapCheckVer = 0u; /*共用数据校验信息*/
UINT8 localCi = 0U; /*本地联锁ID*/
UINT8 CiToZcDataBuffer[CI_TO_ZC_DATA_LEN_MAX] = {0U};/*CI到ZC组帧数组*/
UINT16 SendMaskSum = 0U;
UINT16 ii = 0U;
UINT32 ciEtcsId = 0U; /*CI互联互通编号*/
UINT32 zcEtcsId = 0U; /*ZC互联互通编号*/
UINT32 emapCheckVer = 0U; /*共用数据校验信息*/
UINT8 retVal = CI_ERROR;
UINT32 curCycleNum = Get2oo2CurCycleNum(); /*联锁应用周期号*/
UINT32 appCycleTime = GetSystemParaAppCycleTime(); /*联锁应用周期*/
UINT8 ci_zcPrtclVersion = 0u;
UINT16 dstDevId = 0;
UINT8 outnetSafeSendRtn = 0u;
UINT8 ci_zcPrtclVersion = 0U;
UINT16 dstDevId = 0U;
UINT8 outnetSafeSendRtn = 0U;
UINT8 CIName2HlhtId = 0U;
UINT8 ZCName2HlhtId = 0U;
UINT8 CiEmapCheckVer = 0U;
UINT32 dwHlhtHSrcSN = 0u;
UINT32 dwHlhtHRcvSN = 0u;
UINT32 dwHlhtHSrcSN = 0U;
UINT32 dwHlhtHRcvSN = 0U;
UINT16 totallenIndex = 0U;
UINT16 wCrossFrameLen = 0U;
UINT8 chDataType = 0U;
localCi = GetSystemParaLocalCiId(); /*获取本地联锁ID*/
@@ -1095,16 +1189,16 @@ UINT8 PackCiToZcData( UINT8 deviceId)
if ((CI_SUCCESS == retVal))
{
/*获取将要发送的码位字节数*/
if ((GetSendMaskSum(CI_SYSTEM_TYPE_ZC) % 8u) == 0u)
if (0U == (GetSendMaskSum(CI_SYSTEM_TYPE_ZC) % 8U))
{
SendMaskSum = (UINT16) (GetSendMaskSum(CI_SYSTEM_TYPE_ZC) / 8u);
SendMaskSum = (UINT16) (GetSendMaskSum(CI_SYSTEM_TYPE_ZC) / 8U);
}
else
{
SendMaskSum = (UINT16) (GetSendMaskSum(CI_SYSTEM_TYPE_ZC) / 8u + 1u);
SendMaskSum = (UINT16) (GetSendMaskSum(CI_SYSTEM_TYPE_ZC) / 8U + 1U);
}
if (0u == SendMaskSum)
if (0U == SendMaskSum)
{
retVal = CI_ERROR;
}
@@ -1122,21 +1216,21 @@ UINT8 PackCiToZcData( UINT8 deviceId)
/*开始组应用数据帧*/
/*组GAL包头*/
ShortToChar(CI_ZC_INTERFACE_INFOTYPE, &CiToZcDataBuffer[ii]);/*接口信息类型*/
ii += 2u;
ii += 2U;
LongToChar(ciEtcsId, &CiToZcDataBuffer[ii]);/*发送方标识信息*/
ii += 4u;
ii += 4U;
LongToChar(zcEtcsId, &CiToZcDataBuffer[ii]);/*接收方标识信息*/
ii += 4u;
ii += 4U;
LongToChar(emapCheckVer, &CiToZcDataBuffer[ii]);/*电子地图版本校验信息*/
ii += 4u;
ii += 4U;
LongToChar(curCycleNum, &CiToZcDataBuffer[ii]);/*本方消息序列号*/
ii += 4u;
ii += 4U;
ShortToChar((UINT16)appCycleTime, &CiToZcDataBuffer[ii]);/*设备通讯周期*/
ii += 2u;
ii += 2U;
LongToChar(dwHlhtHSrcSN, &CiToZcDataBuffer[ii]);/*对方消息序列号:recvOppMsgSN记录收到对方上一条消息中的对方消息序列号*/
ii += 4u;
ii += 4U;
LongToChar(dwHlhtHRcvSN, &CiToZcDataBuffer[ii]);/*收到上一条消息时本方序列号*/
ii += 4u;
ii += 4U;
lineIdentity = GetCiFunctionSwitchConfig(VOBC_INTERFACE_IDENTITY);/*获取线路标识*/
@@ -1150,39 +1244,58 @@ UINT8 PackCiToZcData( UINT8 deviceId)
}
totallenIndex = ii;
ii += 2u;/*通用报文头中的应用层报文总长度*/
if (DATA_TYPE_NEW == chDataType)
ii += 2U;/*通用报文头中的应用层报文总长度*/
if ((DATA_TYPE_MAIN_BRANCH == chDataType) || (DATA_TYPE_28_BRANCH == chDataType))
{
ii += 2u;/*通用报文头中的应用层报文长度(0x202报文长度)*/
ii += 2U;/*通用报文头中的应用层报文长度(0x202报文长度)*/
ShortToChar(TIOC_TO_ZC_MASK_MSG, &CiToZcDataBuffer[ii]);/*接口信息类型*/
ii += 2u;
ii += 2U;
ii += 2u; /*预留*/
ii += 2U; /*预留*/
}
else
{
;/*杭德线路无0x202报文长度、类型及预留*/
/*23分支无0x202报文长度、类型及预留*/
}
/*组码位信息*/
(void)MaskPack(CI_SYSTEM_TYPE_ZC,&CiToZcDataBuffer[ii]);
ii = (UINT16)(ii + SendMaskSum);
/*通用报文头中应用层报文总长度*/
ShortToChar(ii - totallenIndex - 2U, &CiToZcDataBuffer[totallenIndex]);
if (DATA_TYPE_NEW == chDataType)
if (DATA_TYPE_MAIN_BRANCH == chDataType)
{
/*通用应用层报文长度(0x202报文长度)*/
totallenIndex += 2U;
ShortToChar(ii - totallenIndex - 2U, &CiToZcDataBuffer[totallenIndex]);
/*刨去2字节应用报文总长度+2字节0202帧长度*/
ShortToChar((ii - (totallenIndex + 4U)), &CiToZcDataBuffer[totallenIndex + 2U]);
/*组TACS列车跨压信息*/
wCrossFrameLen = PackRcTacsCrossData(&CiToZcDataBuffer[ii]);
ii += wCrossFrameLen;
}
else if(DATA_TYPE_28_BRANCH == chDataType)
{
/*通用应用层报文长度(0x202报文长度)*/
/*刨去2字节应用报文总长度+2字节0202帧长度*/
ShortToChar((ii - (totallenIndex + 4U)), &CiToZcDataBuffer[totallenIndex + 2U]);
}
else
{
/*23分支 nothing*/
}
/*通用报文头中应用层报文总长度*/
/*刨去2字节应用报文总长度*/
ShortToChar(ii - (totallenIndex + 2U), &CiToZcDataBuffer[totallenIndex]);
/*清ZC数据*/
ClearZcData();
dstDevId = (UINT16)(CI_SYSTEM_TYPE_ZC << 8) | ((UINT16)deviceId);
outnetSafeSendRtn = OutnetSafeSend(dstDevId, 0u, &CiToZcDataBuffer[0], ii);
if (1u == outnetSafeSendRtn)
dstDevId = (UINT16)(CI_SYSTEM_TYPE_ZC << 8U) | ((UINT16)deviceId);
outnetSafeSendRtn = OutnetSafeSend(dstDevId, 0U, &CiToZcDataBuffer[0U], ii);
if (1U == outnetSafeSendRtn)
{ /*写队列成功*/
#ifdef LOGPRINT/*日志打印宏*/
#ifdef PLATFORM_2OO2/*2oo2平台打印*/
@@ -1244,6 +1357,93 @@ UINT8 PackCiToZcData( UINT8 deviceId)
return retVal;
}
/*
* ZC的TACS主控列车跨压信息
* UINT8 *pDataBuf
*
*/
static UINT16 PackRcTacsCrossData(UINT8 *pDataBuf)
{
UINT16 Index = 0u; /*索引编号*/
UINT16 i = 0u; /*循环变量*/
UINT8 j = 0u; /*循环变量*/
UINT16 wSignalCurSum = 0u; /*信号机数量*/
UINT16 wSignalId = 0u; /*信号机ID*/
UINT8 wSignalBelongCiId = 0u; /*信号机所属联锁ID*/
UINT8 wLocalCiId = 0u; /*本机联锁ID*/
UINT8 wCrossTacsTrainId = 0u; /*TACS跨压列车ID*/
UINT8 wTacsCrossTrainSum = 0u; /*TACS跨压列车数量*/
UINT16 wTacsCrossSignalBuf[ALL_TACS_CROSS_SUM_MAX] = { 0u }; /*TACS跨压信号机ID数组*/
UINT8 wTacsCrossTrainBuf[ALL_TACS_CROSS_SUM_MAX] = { 0u }; /*TACS跨压列车ID数组*/
/*Step1TACS跨压信息准备*/
wSignalCurSum = GetSignalCurSum();
/*遍历所有本联锁信号机*/
for (i = 0u; i < wSignalCurSum; i++)
{
wSignalId = GetSignalId(i);
wSignalBelongCiId = GetSignalBelongCiId(wSignalId);
wLocalCiId = GetSystemParaLocalCiId();
if (wSignalBelongCiId == wLocalCiId)
{
/*判断跨压TACS主控列车ID是否为零*/
wCrossTacsTrainId = GetSignalCrossTacsTrainIdCC(wSignalId);
/*非法值防护*/
if ((0u < wSignalId) && (CROSS_SIGNAL_ID_MAX >= wSignalId)
&& (0u < wCrossTacsTrainId) && (TACS_CROSS_ID_MAX >= wCrossTacsTrainId)
&& (ALL_TACS_CROSS_SUM_MAX > wTacsCrossTrainSum))
{
/*TACS主控列车ID有效,赋值至待发送数组*/
wTacsCrossSignalBuf[wTacsCrossTrainSum] = wSignalId;
wTacsCrossTrainBuf[wTacsCrossTrainSum] = wCrossTacsTrainId;
wTacsCrossTrainSum += 1u;
}
else
{
/*不处理*/
}
}
else
{
/*不处理*/
}
}
/*Step2TACS跨压信息组包*/
/*帧长度,最后赋值*/
Index += 2u;
/*帧类型*/
ShortToChar(RC_TO_ZC_TACS_CROSS_MSG, &pDataBuf[Index]);
Index += 2u;
/*预留2字节发0*/
ShortToChar(0u, &pDataBuf[Index]);
Index += 2u;
/*跨压TACS主控列车数量*/
pDataBuf[Index] = wTacsCrossTrainSum;
Index += 1u;
for (j = 0u; j < wTacsCrossTrainSum; j++)
{
/*跨压信号机ID*/
ShortToChar(wTacsCrossSignalBuf[j], &pDataBuf[Index]);
Index += 2u;
/*跨压列车ID*/
pDataBuf[Index] = wTacsCrossTrainBuf[j];
Index += 1u;
}
/*最后赋值长度*/
ShortToChar((Index - 2u), &pDataBuf[0u]);
return Index;
}
/*
* ZC码位值Buf
@@ -1448,6 +1648,94 @@ UINT8 ParseZcIteCutData(UINT8* dataBuf, UINT16 dataLen)
return cRetVal;
}
/*
* ZC到CI的CBTC主控列车跨压数据
* UINT8* pDataBuf
* UINT16 dataLen
* CI_ERROR 0
* CI_SUCCESS 1
* Edit By wyd 2026.3.26
*/
static UINT8 ParseZcCbtcCrossData(UINT8* pDataBuf, UINT16 dataLen)
{
UINT8 cRetVal = CI_ERROR; /*函数返回值*/
UINT8 wCrossNum = 0u; /*承接跨压状态*/
UINT16 ii = 0U; /*数组下标变量*/
UINT8 jj = 0U; /*循环变量*/
UINT16 wSignalId = 0U; /*承接跨压信号机ID*/
UINT8 wTrainId = 0U; /*承接跨压列车ID*/
if (NULL != pDataBuf)
{
cRetVal = CI_SUCCESS;
ZcToCiDataStru.cRecvCbtcCrossFrameTag = CI_SUCCESS;
wCrossNum = pDataBuf[ii];
ii++;
if (ALL_CBTC_CROSS_SUM_MAX >= wCrossNum)
{
ZcToCiDataStru.wCbtcCrossNum = wCrossNum;
for (jj = 0U; jj < wCrossNum; jj++)
{
wSignalId = ShortFromChar(&pDataBuf[ii]); /*解析信号机ID*/
ii += 2u;
if ((0U < wSignalId) && (CROSS_SIGNAL_ID_MAX >= wSignalId))
{
ZcToCiDataStru.wCbtcCrossSignalId[jj] = wSignalId;
}
else
{
debug_infor_printf((const)"ParseZcCbtcCrossData: wSignalId Error\n");
cRetVal = CI_ERROR; /*Z信号机ID超限,返回失败*/
}
wTrainId = pDataBuf[ii]; /*解析列车ID*/
ii += 1u;
if ((0U < wTrainId) && (CBTC_CROSS_ID_MAX >= wTrainId))
{
ZcToCiDataStru.wCbtcCrossTrainId[jj] = wTrainId;
}
else
{
debug_infor_printf((const)"ParseZcCbtcCrossData: wTrainId Error\n");
cRetVal = CI_ERROR; /*列车ID超限,返回失败*/
}
}
if (CI_SUCCESS == cRetVal)
{
if (dataLen != ii)
{
debug_infor_printf((const)"ParseZcCbtcCrossData: Msg Len Error\n");
cRetVal = CI_ERROR;
}
else
{
/*不处理*/
}
}
else
{
/*不处理*/
}
}
else
{
debug_infor_printf((const)"ParseZcCbtcCrossData Error: wCrossNum Error\n");
cRetVal = CI_ERROR; /*状态非法,返回失败*/
}
}
else
{
cRetVal = CI_ERROR; /*入参非法,返回失败*/
}
return cRetVal;
}
/**
* @brief ZC发送的进路停车保证标志
* @param[in] UINT16 wDeviceId ID
@@ -2018,3 +2306,60 @@ void SetLocalSnowModelZc(UINT8 setmodle)
; /*不处理*/
}
}
/*
* ZC发送的CBTC主控列车跨压数量
*
*
* Created By wyd 2026.3.27
*/
UINT8 GetCbtcCrossNumZc(void)
{
return gCbtcCrossNumZc;
}
/*
* ZC发送的CBTC主控列车跨压信息
*
*
* Created By wyd 2026.3.27
*/
CbtcCrossStructZC *GetCbtcCrossStructZc(void)
{
return gCbtcCrossStructZc;
}
/*
* ZC发送CBTC主控列车跨压信息
* UINT8 wCrossNum
* UINT16 wSignalId[ALL_CBTC_CROSS_SUM_MAX] ID
* UINT8 wTrainId[ALL_CBTC_CROSS_SUM_MAX] ID
*
* RC接收CI->RC同步过来的该信息时
* Created By wyd 2026.3.26
*/
void SetCbtcCrossInfo(UINT8 wCrossNum, UINT16 wSignalId[ALL_CBTC_CROSS_SUM_MAX],
UINT8 wTrainId[ALL_CBTC_CROSS_SUM_MAX])
{
UINT8 i = 0u;
/*先清空,防止残留脏数据*/
(void)CommonMemSet(gCbtcCrossStructZc, ALL_CBTC_CROSS_SUM_MAX * sizeof(CbtcCrossStructZC),
0x00u, ALL_CBTC_CROSS_SUM_MAX * sizeof(CbtcCrossStructZC));
/*赋值跨压数量和ID*/
gCbtcCrossNumZc = wCrossNum;
if ((NULL == wSignalId) || (NULL == wTrainId))
{
/*不处理*/
}
else
{
for (i = 0u; i < wCrossNum; i++)
{
gCbtcCrossStructZc[i].wSignalId = wSignalId[i];
gCbtcCrossStructZc[i].wTrainId = wTrainId[i];
}
}
}
+44 -2
View File
@@ -34,6 +34,8 @@
#define ZC_TO_TIOC_WLB_MSG ((UINT16)0x0204u) /*ZC发送TIOC紧急制动信息类型*/
#define ZC_TO_TIOC_SNOW_MSG ((UINT16)0x0205u) /*ZC发送TIOC雨雪模式信息类型*/
#define ZC_TO_TIOC_ITELINECUT_MSG ((UINT16)0x0206U) /*ZC发送TIOC的全线ITE切除状态信息类型*/
#define ZC_TO_RC_CBTC_CROSS_MSG ((UINT16)0x0207U) /*ZC发送给RC的主控CBTC列车跨压信息*/
#define RC_TO_ZC_TACS_CROSS_MSG ((UINT16)0x0208u) /*RC发送给ZC的主控TACS列车跨压信息*/
#define ZC_TSR_VALID ((UINT8)0x55U) /*ZC发送临时限速有效*/
#ifdef __cplusplus
@@ -64,6 +66,10 @@ typedef struct S_ZcToCiDataStruct
UINT8 cIteLineCutState; /* ITE全线切除状态 */
UINT8 cAreaIteCutNum; /*区间ITE切除数量*/
UINT16 szAreaIteCutId[ALL_AREA_SNOW_SUM_MAX]; /*区间ITE切除ID数组*/
UINT8 cRecvCbtcCrossFrameTag; /*接收到主控CBTC列车跨压信息帧标志*/
UINT8 wCbtcCrossNum; /*CBTC主控列车跨压数量*/
UINT16 wCbtcCrossSignalId[ALL_CBTC_CROSS_SUM_MAX]; /*CBTC主控列车跨压信号机ID*/
UINT8 wCbtcCrossTrainId[ALL_CBTC_CROSS_SUM_MAX]; /*CBTC主控列车跨压列车ID*/
} ZcToCiDataStruct;
/*ZC发送的信号机动态数据结构体*/
@@ -87,7 +93,7 @@ typedef struct S_LogicSectionDataStructZC
typedef struct S_AxisSectionDataStructZC
{
UINT16 AxisSectionId; /*计轴区段ID (初始化字段)*/
UINT8 AxisArbState; /*计轴ARB状态CC(0x55-未ARB0xaa-ARB)*/
UINT8 AxisArbState; /*计轴ARB状态(0x55-未ARB0xaa-ARB)*/
}AxisSectionDataStructZC;
/*ZC发送的物理区段动态数据结构体*/
@@ -104,6 +110,13 @@ typedef struct S_RouteDataStructZC
UINT8 StopensureFlag; /*停车保证标志ZC(0x55:已设置,0xAA:未设置) */
}RouteDataStructZC;
/*ZC发送的CBTC主控列车跨压结构体*/
typedef struct S_CbtcCrossStructZC
{
UINT16 wSignalId; /*跨压信号机ID*/
UINT8 wTrainId; /*跨压列车ID*/
}CbtcCrossStructZC;
/*存储ZC发送的动态数据结构体*/
typedef struct S_ZcToCiDynamicDataStruct
{
@@ -133,7 +146,8 @@ extern ComTrainPosDataStruct ComTrainPosDataStru[ZC_TO_CI_TRAIN_MAX];
extern UINT16 ComTrainSum;
extern UINT8 lineIdentity;
extern ZcToCiDynamicDataStruct gZcToCiDymDataStru; /*ZC动态数据结构体*/
extern UINT8 gCbtcCrossNumZc;
extern CbtcCrossStructZC gCbtcCrossStructZc[ALL_CBTC_CROSS_SUM_MAX];
#endif
@@ -468,6 +482,34 @@ UINT8 GetLocalSnowModelZc(void);
*/
void SetLocalSnowModelZc(UINT8 setmodle);
/*
* ZC发送的CBTC主控列车跨压数量
*
*
* Created By wyd 2026.3.27
*/
UINT8 GetCbtcCrossNumZc(void);
/*
* ZC发送的CBTC主控列车跨压信息
*
*
* Created By wyd 2026.3.27
*/
CbtcCrossStructZC *GetCbtcCrossStructZc(void);
/*
* ZC发送CBTC主控列车跨压信息
* UINT8 wCrossNum
* UINT16 wSignalId[ALL_CBTC_CROSS_SUM_MAX] ID
* UINT8 wTrainId[ALL_CBTC_CROSS_SUM_MAX] ID
*
* RC接收CI->RC同步过来的该信息时
* Created By wyd 2026.3.26
*/
void SetCbtcCrossInfo(UINT8 wCrossNum, UINT16 wSignalId[ALL_CBTC_CROSS_SUM_MAX],
UINT8 wTrainId[ALL_CBTC_CROSS_SUM_MAX]);
#ifdef __cplusplus
}
#endif
File diff suppressed because it is too large Load Diff
+120 -25
View File
@@ -49,9 +49,6 @@
/*4个字节*/
#define LONG_LEN ((UINT8)4)
/*dquCICfgDtStr.OCSwitchCfgStr中成员个数*/
#define OC_SWITCH_CFG_STR_MEMBER_NUM ((UINT8)2)
/*dquCICfgDtStr.OCSwitchCfgStr中成员个数_旧版*/
#define OC_SWITCH_CFG_STR_MEMBER_NUM_OLD ((UINT8)6)
@@ -179,6 +176,9 @@ typedef struct
ReverseCutCfgDataStru stReverseCutCfgDtStr[REVERSE_CUT_SUM_MAX]; /*倒切设备配置数据*/
UINT16 wReverseCutCfgLen;
ReverseSwitchCfgDataStru stReverseSwitchCfgDtStr[CI_SUM_MAX]; /*倒切设备开关板卡配置数据*/
UINT16 wRelayReverseSwitchStrLen; /*倒切开关个数*/
EaConfigStru szEaCfgDtStr[EA_CFG_SUM_MAX]; /*防护区域配置数据*/
UINT16 wEaCfgLen; /*防护区域配置数据长度*/
@@ -430,20 +430,6 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS
UINT8 RouteConfigDataStructInit(CHAR * FSName);
/*********************************************
*IP表里去到的数据17
*Data通信数组
*01
*********************************************/
UINT8 TransmitRelationDataStruFrmSZ(UINT16 Data[]);
/*********************************************
*
*FSName文件指针
*01
*********************************************/
UINT8 TransmitRelationDataStructInit(CHAR* FSName);
/*********************************************
*NEW
*FSName文件指针
@@ -839,14 +825,6 @@ UINT8 EaConfigDataStruFromDquEaStr(DSU_EMAP_EA_STRU* pEa, EaConfigStru* pEaCfgDt
*01
*********************************************/
UINT8 EaConfigDataStructInit(CHAR * FSName);
/*********************************************
*OC
*pDataAddr
*01
*cgh-CID-2539-5OC_配置数据表
*********************************************/
void R_OCSwitchConfigDataFromChar(UINT8* pDataAddr);
/*********************************************
*OC
*pDataAddr
@@ -1011,5 +989,122 @@ INT16 SetNoRepeatDataToBuf(UINT16* pBuf, UINT16 maxlen, UINT16 dwData, UINT16 cu
* add by mpt 20260104
*********************************************/
UINT8 SetCldAndScxMergeConfig(void);
/*********************************************
*
*pDataAddr
*01
* add by mpt 20260325
*********************************************/
void R_OCSwitchModeCfgDataFromChar(UINT8* pDataAddr);
/*********************************************
*OC的板卡配置情况到道岔配置数据结构体
*SwitchBelongOCConfigDataStr* pSwitchOCcfgDtStr
* OCSwitchConfigDataStruct* pOcCfgDtStr OC配置表结构体
*01
* add by mpt 20260325
*********************************************/
UINT8 SwitchOcCfgStrFromOCconfigStr(SwitchBelongOCConfigDataStr* pSwitchOCcfgDtStr, OCSwitchConfigDataStruct* pOcCfgDtStr);
/*********************************************
*
*SwitchConfigDataStruct* pSwitchCfgDtStr
*01
* add by mpt 20260325
*********************************************/
UINT8 SwitchCfgDtStruFromOCconfigStr(SwitchConfigDataStruct* pSwitchCfgDtStr);
/*********************************************
*OC的插箱数
*SwitchConfigDataStruct* pSwitchCfgDtStr
*01
* add by mpt 20260325
*********************************************/
UINT8 CalcuSwitchInsertionBoxData(SwitchConfigDataStruct* pSwitchCfgDtStr);
/*********************************************
*
*
*
*-1,-1
* add by mpt 20260330
*********************************************/
INT16 SetNoUINT8RepeatDataToBuf(UINT8* pBuf, UINT16 maxlen, UINT8 dwData, UINT16 currentLen);
/*********************************************
*
*pOverlapCfgDtStr保护区段配置数据结构体指针 pLogCfgDtStr配置数据结构体指针
*01
* add by mpt 20260331
*********************************************/
UINT8 LogRelateOverlapDataInit(OverlapConfigDataStruct* pOverlapCfgDtStr, LogicSectionConfigDataStruct* pLogCfgDtStr);
/*********************************************
*
*pLogCfgDtStr配置数据结构体指针
*01
* add mpt 20260331
*********************************************/
UINT8 LogRelateProSwDataByOverlapInit(LogicSectionConfigDataStruct* pLgScCfgDtStr);
/*********************************************
*
*LogsecSwitchStruct* pSrcSwitchStructBuf
UINT8 chSrclen
AxisSwitchStruct* pDstSwitchStructBuf
UINT8 dstLen
*-1
*add by mpt 20260331
*********************************************/
INT16 AxisSecCfgDtStruFromLogicSecStr(LogsecSwitchStruct* pSrcSwitchStructBuf, UINT8 chSrclen, AxisSwitchStruct* pDstSwitchStructBuf, UINT8 dstLen);
/*********************************************
*
*void
*01
* add mpt 20260331
*********************************************/
UINT8 AxisSecProtectSwitchInit(void);
/*********************************************
*ID
*OCSwitchConfigDataStruct * pOCSwitchCfgStr
* add by mpt 20260404
*0 1
*********************************************/
UINT8 SwitchOtherSwitchFromOCconfig(OCSwitchConfigDataStruct* pOCSwitchCfgStr);
/*********************************************
*ID
*void
*0 1
* add by mpt 20260404
*********************************************/
UINT8 AllSwitchOtherSwitchByOCconfig(void);
/*********************************************
*ESB数据----使
*FSName文件指针
* wPsdIndex屏蔽门索引
*01
* fan 20260421
*********************************************/
UINT8 PsdRelateEsbConfigDataInit(UINT16 wPsdIndex);
/*
*: RCI功能配置数据初始化
*: CHAR * FSName
*:
*: 0
* 1
* by cgh 20260516
*/
UINT8 RciCommonConfigDataInit(CHAR* FSName);
/*********************************************
*----
*FSName文件指针
*01
*********************************************/
UINT8 ReverseSwitchConfigDataStructInit(CHAR * FSName);
/*********************************************
*
*pReverseSwitchRelay继电器初始化数据指针
pReverseSwitchCfgDtStr配置数据结构体指针
*01
*********************************************/
UINT8 ReverseSiwtchCfgDtStruFromDquStr(Relay_ReverseSwitchStruct* pReverseSwitchRelay, ReverseSwitchCfgDataStru* pReverseSwitchCfgDtStr);
#endif
+88 -43
View File
@@ -133,7 +133,7 @@ UINT8 InitAll(CHAR* FSName)
{
CIInitEmap(dsuEmapStru);/*为CI使用的公共数据赋值*/
RtnVal = CiPatternInit(FSName); /*初始化当前联锁类型配置数据*/
RtnVal = RciCommonConfigDataInit(FSName); /*初始化当前联锁类型配置数据*/
if (0u != RtnVal) /*初始化当前联锁类型配置数据*/
{
/*初始化系统配置数据结构体*/
@@ -171,8 +171,8 @@ UINT8 InitAll(CHAR* FSName)
else
{
#ifdef PLATFORM_2OO2
(void)printf("CiPattern Init Error\n");
debug_infor_printf((const)"CiPattern Init Error\n");
(void)printf("RciCommonConfigDataInit Error\n");
debug_infor_printf((const)"RciCommonConfigDataInit Error\n");
#endif
}
}
@@ -2369,57 +2369,22 @@ UINT8 ReadSystemParamConfDataNew(const UINT8 ciId,SystemParameterStructNew* Syst
}
if (1u == rtnVal)
{ /*给从公共查询函数中*/
/*紧急制动最高触发速度(单位已在dfsInitSubSystemCommonConfigData_CC函数中转换)*/
SystemParameterStru->MaxLineLimitSpeed = dquCICfgDtStr.SystemParaStrNew.MaxLineLimitSpeed;
/*临时限速最高限速(km/h)(未进行单位转换)*/
SystemParameterStru->MaxTsrSpeed = dquCICfgDtStr.SystemParaStrNew.MaxTsrSpeed;
/*NTP校时时区差(小时)*/
SystemParameterStru->TimeZoneDifference = dquCICfgDtStr.SystemParaStrNew.TimeZoneDifference;
/*区间同向行驶双车间隔最小安全距离(cm))*/
SystemParameterStru->MABackDistance = dquCICfgDtStr.SystemParaStrNew.MABackDistance;
/*一次设置的临时限速最大个数*/
SystemParameterStru->MaxTsrNum = dquCICfgDtStr.SystemParaStrNew.MaxTsrNum;
/*一个临时限速报文中包含的最大限速区段数量*/
SystemParameterStru->MaxSectionOfTsr = dquCICfgDtStr.SystemParaStrNew.MaxSectionOfTsr;
/*IVOC-IVOC信故障判断时间(ms*/
SystemParameterStru->IvocIvocCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.IvocIvocCommunicationErrorTime;
/*IVOC-OC通信故障判断时间(ms)*/
SystemParameterStru->IvocOcCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.IvocOcCommunicationErrorTime;
/*VOBC-ITS通信故障判断时间(ms)*/
SystemParameterStru->VobcAtsCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.VobcAtsCommunicationErrorTime;
/*TMC-ITS通信故障判断时间(ms*/
SystemParameterStru->TmcItsCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.TmcItsCommunicationErrorTime;
/*ITS-OC通信故障判断时间(ms*/
SystemParameterStru->ItsOcCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.ItsOcCommunicationErrorTime;
/*OC-PSD通信故障判断时间(ms*/
SystemParameterStru->OcPsdCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.OcPsdCommunicationErrorTime;
/*IVOC-TSL通信故障判断时间(ms*/
SystemParameterStru->IvocTslCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.IvocTslCommunicationErrorTime;
/*OC-TSL通信故障判断时间(ms*/
SystemParameterStru->OcTslCommunicationErrorTime = dquCICfgDtStr.SystemParaStrNew.OcTslCommunicationErrorTime;
/*满足精确停车条件的MA延伸长度(cm)*/
SystemParameterStru->MALengthForATOParking = dquCICfgDtStr.SystemParaStrNew.MALengthForATOParking;
/*本线系统定义逻辑方向与上下行方向的关系*/
SystemParameterStru->LinkLogicDirUpAndDown = dquCICfgDtStr.SystemParaStrNew.LinkLogicDirUpAndDown;
/*对向行驶双车间隔最小安全距离(cm)*/
SystemParameterStru->OppositeTrackDistance = dquCICfgDtStr.SystemParaStrNew.OppositeTrackDistance;
/*线路最差情况下紧急制动距离(单位m)*/
SystemParameterStru->MaxMALength = dquCICfgDtStr.SystemParaStrNew.MaxMALength;
@@ -3456,7 +3421,7 @@ void ReadEmapCiConfig(EmapCiConfigStru emapVerArr[])
UINT8 ciId;
UINT8 jj = 0U;
UINT8 chLocalCiId = 0U;
UINT16 k = 0U;
chLocalCiId = GetSystemParaLocalCiId();
if (NULL != emapVerArr)
@@ -3465,7 +3430,7 @@ void ReadEmapCiConfig(EmapCiConfigStru emapVerArr[])
for (i = 0u; i < wCIStruSum; i++)
{
ciId = (UINT8)(dsuStaticHeadStru.pCIStruStru[i].wID & 0x00FF);
ciId = (UINT8)(dsuStaticHeadStru.pCIStruStru[i].wID & 0x00FFu);
emapVerArr[ciId].devId = ciId;
emapVerArr[ciId].ciType = (UINT8)(dsuStaticHeadStru.pCIStruStru[i].wType);
if (CI_TYPE_TCC == dsuStaticHeadStru.pCIStruStru[i].wType)
@@ -3516,14 +3481,30 @@ void ReadEmapCiConfig(EmapCiConfigStru emapVerArr[])
{/*试车线与车辆段合设开关*/
SystemParameterStruNew.chCldAndScxMergeFlag = dsuStaticHeadStru.pCIStruStru[i].chCldAndScxMergeFlag;
}
else
{
/*不处理*/
}
}
else
{
; /*RC模式校验数据信息根据RC表初始化*/
}
}
/*联锁厂商定义 ** CI类型配置*/
for (k = 0U; k < wCIStruSum; k++)
{
ciId = (UINT8)(dsuStaticHeadStru.pCIStruStru[k].wID & 0x00FFU);
if (CI_SUM_MAX > ciId)
{
SystemParameterStruNew.chCiFactoryType[ciId] = dsuStaticHeadStru.pCIStruStru[k].chCiFactoryType;
}
else
{
/*不处理*/
}
}
if (RC_WORK_MODE_TIOC == CI_SYSTEM_TYPE_RCI)
{
@@ -3531,7 +3512,7 @@ void ReadEmapCiConfig(EmapCiConfigStru emapVerArr[])
for (i = 0u; i < wRCStruSum; i++)
{
/*并非所有联锁均包含在RC表,因此未配置在RC表中时根据CI表初始化*/
ciId = (UINT8)(dsuStaticHeadStru.pRCStruStru[i].wID & 0x00FF);
ciId = (UINT8)(dsuStaticHeadStru.pRCStruStru[i].wID & 0x00FFu);
emapVerArr[ciId].devId = ciId;
emapVerArr[ciId].ciType = (UINT8)(dsuStaticHeadStru.pRCStruStru[i].wType);
if (CI_TYPE_TCC == dsuStaticHeadStru.pRCStruStru[i].wType)
@@ -4156,6 +4137,70 @@ INT16 ReadReverseCutConfigData(const UINT8 ciId, ReverseCutCfgDataStru* pstRever
return DataNum;
}
/*********************************************
*
*ciId联锁ID pLocalReverseData
*-1
*********************************************/
INT16 ReadReverseSwitchConfigData(const UINT8 ciId, ReverseSwitchCfgDataStru* pLocalReverseData)
{
UINT16 i = 0u;
INT16 DataNum = -1;
UINT16 jj = 0U;
if ((0u == ciId) || (NULL == pLocalReverseData))
{
DataNum = -1;
}
else
{
DataNum = 0;
}
if (0 == DataNum)
{
for (i = 0u; i<dquCICfgDtStr.wRelayReverseSwitchStrLen; i++)
{
if (ciId == dquCICfgDtStr.stReverseSwitchCfgDtStr[i].chBelongCiId)
{
pLocalReverseData->wColCloseRelayId = dquCICfgDtStr.stReverseSwitchCfgDtStr[i].wColCloseRelayId;
pLocalReverseData->wColOpenRelayId = dquCICfgDtStr.stReverseSwitchCfgDtStr[i].wColOpenRelayId;
if ((0U == pLocalReverseData->wColCloseRelayId) || (UINT16_MAX == pLocalReverseData->wColCloseRelayId)
|| (0U == pLocalReverseData->wColOpenRelayId) || (UINT16_MAX == pLocalReverseData->wColOpenRelayId))
{
DataNum = -1;/*本联锁配置有倒切开关但采集错误*/
}
else
{
pLocalReverseData->wRelateBoardNum = dquCICfgDtStr.stReverseSwitchCfgDtStr[i].wRelateBoardNum;
pLocalReverseData->wId = dquCICfgDtStr.stReverseSwitchCfgDtStr[i].wId;
pLocalReverseData->chBelongCiId = ciId;
for (jj = 0u; jj < dquCICfgDtStr.stReverseSwitchCfgDtStr[i].wRelateBoardNum; jj++)
{
pLocalReverseData->strRelateBoardBuf[jj].wReversBoardId = dquCICfgDtStr.stReverseSwitchCfgDtStr[i].strRelateBoardBuf[jj].wReversBoardId;
pLocalReverseData->strRelateBoardBuf[jj].chDevType = dquCICfgDtStr.stReverseSwitchCfgDtStr[i].strRelateBoardBuf[jj].chDevType;
pLocalReverseData->strRelateBoardBuf[jj].wBoardColCloseRelayId = dquCICfgDtStr.stReverseSwitchCfgDtStr[i].strRelateBoardBuf[jj].wBoardColCloseRelayId;
pLocalReverseData->strRelateBoardBuf[jj].wBoardColOpenRelayId = dquCICfgDtStr.stReverseSwitchCfgDtStr[i].strRelateBoardBuf[jj].wBoardColOpenRelayId;
if ((0U == pLocalReverseData->strRelateBoardBuf[jj].wBoardColCloseRelayId) || (UINT16_MAX == pLocalReverseData->strRelateBoardBuf[jj].wBoardColCloseRelayId)
|| (0U == pLocalReverseData->strRelateBoardBuf[jj].wBoardColOpenRelayId) || (UINT16_MAX == pLocalReverseData->strRelateBoardBuf[jj].wBoardColOpenRelayId))
{
DataNum = -1;/*配置有倒切板卡但采集错误*/
break;
}
pLocalReverseData->strRelateBoardBuf[jj].wDevId = dquCICfgDtStr.stReverseSwitchCfgDtStr[i].strRelateBoardBuf[jj].wDevId;
}
}
break;
}
}
}
else
{
;
}
return DataNum;
}
/**************************************************
*VOBC设备编号相应位数vobc索引
@@ -418,6 +418,13 @@ INT16 ReadCutoffPointConfigData(const UINT8 ciId, CfpConfigStru* pstCutoffConfig
*ID
*********************************************/
INT16 ReadReverseCutConfigData(const UINT8 ciId, ReverseCutCfgDataStru* pstReverseConfigData);
/*********************************************
*
*ciId联锁ID pLocalReverseData
*-1
*********************************************/
INT16 ReadReverseSwitchConfigData(const UINT8 ciId, ReverseSwitchCfgDataStru* pLocalReverseData);
/************************************************************************
HlhtID转vobc内部编号
@@ -406,8 +406,7 @@ UINT8 R_PointStructFromChar(UINT8 * pDataAddr,Relay_PointStruct* pSwitchStr)
{/*城轨线路*/
pSwitchStr->wPointId = dquCiShortFromChar(pData); /*道岔ID*/
pData += 2u;
/*跳过OCID*/
pSwitchStr->wOcId = dquCiShortFromChar(pData); /*OC ID*/
pData += 2u;
pSwitchStr->wRelayDingBiaoId = dquCiShortFromChar(pData); /*定表继电器ID */
pData += 2u;
@@ -426,10 +425,13 @@ UINT8 R_PointStructFromChar(UINT8 * pDataAddr,Relay_PointStruct* pSwitchStr)
pData += 2u;
pSwitchStr->wDFHId = dquCiShortFromChar(pData); /*DFH继电器ID*/
pData += 2u;
pSwitchStr->wRelayShadowDingBiaoId = dquCiShortFromChar(pData); /*定表继电器ID */
pSwitchStr->wRelayRedunDB1Id = dquCiShortFromChar(pData); /*(北京10冗余采集)DBJ1继电器ID*/
pData += 2u;
pSwitchStr->wRelayShadowFanBiaoId = dquCiShortFromChar(pData); /*反表继电器ID */
pSwitchStr->wRelayRedunDB2Id = dquCiShortFromChar(pData); /*(北京10冗余采集)DBJ2继电器ID*/
pData += 2u;
pSwitchStr->wRelayRedunFB1Id = dquCiShortFromChar(pData); /*(北京10冗余采集)FBJ1继电器ID*/
pData += 2u;
pSwitchStr->wRelayRedunFB2Id = dquCiShortFromChar(pData); /*(北京10冗余采集)FBJ2继电器ID*/
pData += 2u;
}/* zt 删除单轨相关代码 2022-02-15 */
else
@@ -521,13 +523,16 @@ UINT8 R_WashMachineStructFromChar(UINT8* pDataAddr, Relay_WashMachineStruct* pWa
pData += 2U;
pWashMachineStr->TailWashAllowRelayId = dquCiShortFromChar(pData); /*出发2继电器ID*/
pData += 2U;
pWashMachineStr->wCouplingWashAllowRelayId = dquCiShortFromChar(pData); /*联挂端出发继电器ID*/
pData += 2U;
pWashMachineStr->WashTrainRequestRelayId = dquCiShortFromChar(pData); /*洗车请求继电器ID*/
pData += 2U;
pWashMachineStr->TrainHeadStopSteadyRelayId = dquCiShortFromChar(pData); /*列车停稳1继电器ID*/
pData += 2U;
pWashMachineStr->TrainTailStopSteadyRelayId = dquCiShortFromChar(pData); /*列车停稳2继电器ID*/
pData += 2U;
pWashMachineStr->wCoupingStopSteadyRelayId = dquCiShortFromChar(pData); /*联挂端停稳继电器ID*/
pData += 2U;
pWashMachineStr->TrainOutWashPortAllowRelayId = dquCiShortFromChar(pData);/*允许出库继电器ID*/
pData += 2U;
pWashMachineStr->PauseTrainWashRequestRelayId = dquCiShortFromChar(pData); /*暂停洗车继电器ID*/
@@ -611,6 +616,10 @@ UINT8 R_NoRouteDcStruFromChar(UINT8 * pDataAddr,Relay_NoRouteDcStruct* pNoRotStr
pNoRotStr->wRelayColTongYiScId = dquCiShortFromChar(pData); /* 试车线采集同意试车继电器ID */
pData += 2u;
pNoRotStr->wWaysideTryTrainIndRelayId = dquCiShortFromChar(pData); /* 轨旁试车指示器继电器ID */
pData += 2u;
rtnvalue = 1u;
return rtnvalue;
@@ -1185,4 +1194,155 @@ UINT8 R_OCIndicStruFromChar(UINT8* pDataAddr, OCStationIndicConfigDataStru* pInd
return reVal;
}
/*********************************************
*
*pDataAddr数据地址 Relay_ReverseSwitchStruct
*01
*********************************************/
UINT8 R_ReverseSwitchStrFromChar(UINT8 * pDataAddr, Relay_ReverseSwitchStruct * pReverseStr)
{
UINT8 * pData = pDataAddr;
UINT8 rtnvalue = 0u;
UINT16 j = 0U;
UINT16 wTemp = 0U;
if ((NULL == pDataAddr) || (NULL == pReverseStr))
{
rtnvalue = 0u;
}
else
{
rtnvalue = 1U;
}
if (1u == rtnvalue)
{
pReverseStr->wReversSwitchId = dquCiShortFromChar(pData); /*ID*/
pData += 2u;
pReverseStr->ocId = dquCiShortFromChar(pData); /*Oc ID*/
pData += 2u;
pReverseStr->wColOpenRelayId = dquCiShortFromChar(pData); /*常开继电器*/
pData += 2u;
pReverseStr->wColCloseRelayId = dquCiShortFromChar(pData); /*常闭继电器*/
pData += 2u;
if ((0U == pReverseStr->wColOpenRelayId)
||(0U == pReverseStr->wColCloseRelayId)
|| (pReverseStr->wColOpenRelayId == pReverseStr->wColCloseRelayId))
{
rtnvalue = 0u;
}
else
{
pReverseStr->wRelateBoardNum = dquCiShortFromChar(pData); /*板卡个数*/
pData += 2u;
if ((0U < pReverseStr->wRelateBoardNum)&&(OC_RELAY_REVERSE_BOARD_MAX >= pReverseStr->wRelateBoardNum))
{
for (j = 0U; j < pReverseStr->wRelateBoardNum; j++)
{
wTemp = dquCiShortFromChar(pData); /*板卡id*/
pData += 2u;
if ((0U == wTemp) || (UINT16_MAX == wTemp))
{
rtnvalue = 0U;
break;
}
else
{
pReverseStr->strRelateBoardBuf[j].wReversBoardId = wTemp;
}
}
}
else
{
rtnvalue = 0u;
debug_infor_printf((char*)"\nR_ReverseSwitchStrFromChar BoardNum%d", pReverseStr->wRelateBoardNum);
}
}
}
return rtnvalue;
}
/*********************************************
*
*pDataAddr数据地址 Relay_ReverseBoardStruct
*01
*********************************************/
UINT8 R_ReverseBoardStrFromChar(UINT8 * pDataAddr, Relay_ReverseBoardStruct * pReverseStr)
{
UINT8 * pData = pDataAddr;
UINT8 rtnvalue = 0u;
UINT16 wBoardId = 0U;
if ((NULL == pDataAddr) || (NULL == pReverseStr))
{
rtnvalue = 0u;
}
else
{
rtnvalue = 1U;
}
if (1u == rtnvalue)
{
wBoardId = dquCiShortFromChar(pData); /*ID*/
pData += 2u;
if (0U == wBoardId)
{
rtnvalue = 0U;
}
else
{
pReverseStr->wReversBoardId = wBoardId; /*板卡ID*/
pReverseStr->wBoardColOpenRelayId = dquCiShortFromChar(pData); /*常开继电器*/
pData += 2u;
pReverseStr->wBoardColCloseRelayId = dquCiShortFromChar(pData); /*常闭继电器*/
pData += 2u;
if ((0U == pReverseStr->wBoardColCloseRelayId)
||(0U == pReverseStr->wBoardColOpenRelayId)
|| (pReverseStr->wBoardColOpenRelayId == pReverseStr->wBoardColCloseRelayId))
{
rtnvalue = 0U;
}
else
{
pReverseStr->chDevType = *pData;/*类型*/
pData++;
pReverseStr->wDevId = dquCiShortFromChar(pData); /*设备ID*/
pData += 2u;
if ((OC_LEN_REVERSE_TYPE_PSD == pReverseStr->chDevType) || (OC_LEN_REVERSE_TYPE_SWITCH == pReverseStr->chDevType))
{
if ((0U < pReverseStr->wDevId) && (UINT16_MAX != pReverseStr->wDevId))
{
rtnvalue = 1U;
}
else
{
rtnvalue = 0U;
}
}
else
{
rtnvalue = 0U;
}
}
}
}
return rtnvalue;
}
@@ -150,4 +150,18 @@ UINT8 R_ReverseCutStrFromChar(UINT8 * pDataAddr, Relay_ReverseCutStruct * pRever
* cgh-CID-3037-3
*********************************************/
UINT8 R_OCIndicStruFromChar(UINT8* pDataAddr, OCStationIndicConfigDataStru* pIndicStru);
/*********************************************
*
*pDataAddr数据地址 Relay_ReverseSwitchStruct
*01
*********************************************/
UINT8 R_ReverseSwitchStrFromChar(UINT8 * pDataAddr, Relay_ReverseSwitchStruct * pReverseStr);
/*********************************************
*
*pDataAddr数据地址 Relay_ReverseBoardStruct
*01
*********************************************/
UINT8 R_ReverseBoardStrFromChar(UINT8 * pDataAddr, Relay_ReverseBoardStruct * pReverseStr);
#endif
+190 -10
View File
@@ -397,13 +397,6 @@ UINT8 InitRelay_ScreenStru(CHAR* CIDataName)
{
RelayDataLen.RelayScreenStrLen = wRealRowCount;
rowLen = DataSize / wRealRowCount;
if (DataSize < rowLen)
{
rtnValue = 0U;
}
else
{
/*动态申请空间*/
RelayData.pRelayScreenStr = (Relay_ScreenStruct*)MyNew((UINT32)(sizeof(Relay_ScreenStruct) * RelayDataLen.RelayScreenStrLen));
/*动态申请空间失败*/
@@ -428,7 +421,6 @@ UINT8 InitRelay_ScreenStru(CHAR* CIDataName)
}
}
}
}
else
{
; /*不处理*/
@@ -476,8 +468,8 @@ UINT8 InitRelay_PointStru(CHAR* CIDataName)
if (CI_PATTERN_TRADITIONAL == localCiPattern)
{
excelId = CI_DATA_TYPE;
sheetId = RELAY_SIGNAL;
rowLen = LEN_RELAY_SIGNAL;
sheetId = RELAY_POINT;
rowLen = LEN_RELAY_POINT;
}
else
{
@@ -1650,3 +1642,191 @@ UINT8 InitRelay_ReverseCutStru(CHAR* CIDataName)
return rtnValue;
}
/*********************************************
*---
*CIDataName件指针
*01
*********************************************/
UINT8 InitRelay_ReverseSwitchStru(CHAR* CIDataName)
{
UINT8 funcRtn = 0u;
Relay_ReverseSwitchStruct* pReverseSwitchStr = NULL; /*倒切开关变量*/
UINT8* pDataAddr = NULL; /*数据地址*/
UINT32 DataSize = 0U; /*数据大小(字节数)*/
UINT16 j = 0U;
UINT8 rtnValue = 0u;
/*已经初始化了,不用老是调用执行过程 全电子不用初始化这张表*/
if (NULL != RelayData.pRelayReverseSwitchStr)
{
rtnValue = 1u;
}
else
{
/*读取倒切设备继电器数据表*/
funcRtn = dquGetConfigData(CIDataName, OC_DATA_TYPE, OC_RELAY_REVERSE_SWITCH_ID, &pDataAddr, &DataSize);
if (0u == funcRtn)
{
/*函数调用失败*/
rtnValue = 0u;
}
else
{
if ((0u != DataSize% OC_LEN_REVERSE_SWITCH_LEN))
{ /*求得个数不为整数,数据错误*/
debug_infor_printf((char* )"\nCI_RELAY_DATA,REVERSE_Switch len %d not equal to fs", OC_LEN_REVERSE_SWITCH_LEN);
rtnValue = 0u;
}
else
{
RelayDataLen.RelayReverseSwitchStrLen = (UINT16)(DataSize / OC_LEN_REVERSE_SWITCH_LEN);/*计算结构体个数*/
if (OC_LEN_REVERSE_SWITCH_LEN > DataSize)
{/*不足一个*/
RelayData.pRelayReverseSwitchStr = (Relay_ReverseSwitchStruct *)MyNew((UINT32)sizeof(Relay_ReverseSwitchStruct));
RelayDataLen.RelayReverseSwitchStrLen = 0u;
rtnValue = 1u;
}
else
{
/*动态申请空间*/
RelayData.pRelayReverseSwitchStr = (Relay_ReverseSwitchStruct *)MyNew((UINT32)(sizeof(Relay_ReverseSwitchStruct) * RelayDataLen.RelayReverseSwitchStrLen));
if (NULL == RelayData.pRelayReverseSwitchStr)
{/*动态申请空间失败*/
RelayDataLen.RelayReverseSwitchStrLen = 0u;
rtnValue = 0u;
}
else
{
/*内存先设为无效*/
(void)CommonMemSet(RelayData.pRelayReverseSwitchStr, (UINT32)(sizeof(Relay_ReverseSwitchStruct) * RelayDataLen.RelayReverseSwitchStrLen),
(UINT8)0x00, (UINT32)(sizeof(Relay_ReverseSwitchStruct) * RelayDataLen.RelayReverseSwitchStrLen));
/*解析数据到 结构体数组 */
rtnValue = 1u;
for (j = 0u; j < RelayDataLen.RelayReverseSwitchStrLen; j++)
{
pReverseSwitchStr = RelayData.pRelayReverseSwitchStr + j;
/*填充数据结构体*/
rtnValue &= R_ReverseSwitchStrFromChar(pDataAddr, pReverseSwitchStr);
pDataAddr += OC_LEN_REVERSE_SWITCH_LEN;
if (1U != rtnValue)
{
break;
}
}
}
}
}
}
}
return rtnValue;
}
/*********************************************
*---
*CIDataName件指针
*01
*********************************************/
UINT8 InitRelay_ReverseBoardStru(CHAR* CIDataName)
{
UINT8 funcRtn = 0u;
UINT8* pDataAddr = NULL; /*数据地址*/
UINT32 DataSize = 0U; /*数据大小(字节数)*/
Relay_ReverseBoardStruct tempBoardStru = {0}; /*倒切板卡临时存储*/
Relay_ReverseSwitchStruct* pReverseSwitchStr = NULL;/*倒切开关指针*/
Relay_ReverseBoardStruct* pReverseBoard = NULL; /*倒切板卡指针*/
UINT16 j = 0U;
UINT16 ii = 0U;
UINT16 kk = 0U;
UINT8 rtnValue = 0u;
UINT16 wLen = 0U;
UINT8 chFind = CI_ERROR;
if (NULL == RelayData.pRelayReverseSwitchStr)
{
/*需要先初始化倒切开关继电器*/
rtnValue = 0u;
}
else
{
/*读取倒切板卡继电器数据表*/
funcRtn = dquGetConfigData(CIDataName, OC_DATA_TYPE, OC_RELAY_REVERSE_BOARD_ID, &pDataAddr, &DataSize);
if (0u == funcRtn)
{
/*函数调用失败*/
rtnValue = 0u;
}
else
{
if ((0u != DataSize% OC_LEN_REVERSE_BOARD_LEN))
{ /*求得个数不为整数,数据错误*/
debug_infor_printf((char*)"\nCI_RELAY_DATA,REVERSE_Board len %d not equal to fs", OC_LEN_REVERSE_BOARD_LEN);
rtnValue = 0u;
}
else
{
wLen = (UINT16)(DataSize / OC_LEN_REVERSE_BOARD_LEN);/*计算结构体个数*/
if ((0U == RelayDataLen.RelayReverseSwitchStrLen)&&(RelayDataLen.RelayReverseSwitchStrLen == wLen))
{
/*无开关*/
rtnValue = 1u;
}
else if ((0U == RelayDataLen.RelayReverseSwitchStrLen) || (0U == wLen)||(CI_SUM_MAX <= RelayDataLen.RelayReverseSwitchStrLen))
{
/*板卡与开关配置不一致*/
debug_infor_printf((char*)"\n InitRelay_ReverseBoardStru len %d Error \n", wLen);
rtnValue = 0u;
}
else
{
/*初始化到对应开关数据,板卡数据的空间已经申请在开关数据结构体内*/
rtnValue = 1u;
for (ii = 0U; ii < wLen; ii++)
{
/*填充数据结构体*/
rtnValue &= R_ReverseBoardStrFromChar(pDataAddr, &tempBoardStru);
pDataAddr += OC_LEN_REVERSE_BOARD_LEN;
chFind = CI_ERROR;
if (1U == rtnValue)
{
for (j = 0U; j < RelayDataLen.RelayReverseSwitchStrLen; j++)
{
pReverseSwitchStr = RelayData.pRelayReverseSwitchStr + j;
for (kk = 0U; kk < pReverseSwitchStr->wRelateBoardNum; kk++)
{
/*遍历查找对应倒切板卡*/
if (pReverseSwitchStr->strRelateBoardBuf[kk].wReversBoardId == tempBoardStru.wReversBoardId)
{
pReverseBoard = &pReverseSwitchStr->strRelateBoardBuf[kk];
(void)CommonMemCpy((void *)(pReverseBoard), (UINT32)sizeof(Relay_ReverseBoardStruct), (const void *)(&tempBoardStru), (UINT32)sizeof(Relay_ReverseBoardStruct));
chFind = CI_SUCCESS;
break;
}
}
if (CI_SUCCESS == chFind)
{
break;
}
}
}
if ((CI_ERROR == chFind)||(0U == rtnValue))
{
rtnValue = 0u;
debug_infor_printf((char*)"\n InitRelay_ReverseBoardStru Board%d Not Find \n", tempBoardStru.wReversBoardId);
break;
}
}
}
}
}
}
return rtnValue;
}
@@ -36,6 +36,7 @@ typedef struct SConfig_RelayDataStruct
Relay_WashMachineStruct *pRelayWashMachineStr; /*洗车机继电器结构体*/
Relay_DCAgreeStruct *pRelayDCAgreeStr;/*调车同意继电器结构体*/
Relay_ReverseCutStruct *pRelayReverseCutStr;/*倒切设备继电器结构体*/
Relay_ReverseSwitchStruct* pRelayReverseSwitchStr; /*倒切开关继电器结构体*/
} RelayDataStruct_Config;
/*继电器数组长度结构体*/
typedef struct S_RelayDataStructLen
@@ -58,6 +59,7 @@ typedef struct S_RelayDataStructLen
UINT16 RelayMonoRailPointStrLen ; /*单轨道岔继电器结构体数组长度*/
UINT16 RelayDCAgreeStrLen;/*调车同意继电器结构体数量*/
UINT16 RelayReverseCutStrLen;/*倒切设备继电器结构体数量*/
UINT16 RelayReverseSwitchStrLen;/*倒切开关继电器结构体数量*/
} RelayDataStruct_ConfigLen;
/*********定义全局的继电器信息数据变量*******/
@@ -173,5 +175,19 @@ UINT8 InitRelay_DCAgreeStru(CHAR* CIDataName);
*********************************************/
UINT8 InitRelay_ReverseCutStru(CHAR* CIDataName);
/*********************************************
*---
*CIDataName件指针
*01
*********************************************/
UINT8 InitRelay_ReverseSwitchStru(CHAR* CIDataName);
/*********************************************
*---
*CIDataName件指针
*01
*********************************************/
UINT8 InitRelay_ReverseBoardStru(CHAR* CIDataName);
#endif
@@ -1583,12 +1583,6 @@ UINT8 InitLS_OverlapLockCondStru(CHAR *LSDataName)
realRowLen = (UINT16)(DataSize / rowLen);
LSDataLen.LSOverlapLockCondStruLen = (UINT16)rowLen;
if (DataSize < realRowLen)
{
rtnValue = 0U;
}
else
{
/*动态申请空间*/
LSData.pLSOverlapLockCondStru = (LS_OveralpLockCondStru*)MyNew((UINT32)(sizeof(LS_OveralpLockCondStru) * LSDataLen.LSOverlapLockCondStruLen));
/*动态申请空间失败*/
@@ -1619,7 +1613,6 @@ UINT8 InitLS_OverlapLockCondStru(CHAR *LSDataName)
}
}
}
}
else
{
rtnValue = 1U;
@@ -2403,13 +2396,11 @@ UINT8 InitLSSideProtec(CHAR* LSDataName)
for (j = 0u; j < wRouteSideProtecNum; j++)/*遍历每个侧防条件*/
{
wSideProtecID = LSData.pLSSideProtecGroupStru[i].RouteSideProtecBuf[j].SideProtecID;
if (0u < wSideProtecID)/*侧防条件组表中的侧防条件ID大于0*/
{
for (k = 0u; k < LSDataLen.LSRouteSideProtecStruLen; k++)
{
if (wSideProtecID == LSData.pLSRouteSideProtecStru[k].SideProtecID)
{
CommonMemCpy(&LSData.pLSSideProtecGroupStru[i].RouteSideProtecBuf[j], sizeof(SideProtecStru), &LSData.pLSRouteSideProtecStru[k], sizeof(SideProtecStru));
(void)CommonMemCpy(&LSData.pLSSideProtecGroupStru[i].RouteSideProtecBuf[j], (UINT32)sizeof(SideProtecStru), &LSData.pLSRouteSideProtecStru[k], (UINT32)sizeof(SideProtecStru));
break;/*找到则跳出*/
}
else
@@ -2422,11 +2413,6 @@ UINT8 InitLSSideProtec(CHAR* LSDataName)
rtnValue = 0u;
}
}
else
{
break;
}
}
}
}
else
+3 -1
View File
@@ -40,7 +40,7 @@
#define CI_SYSTEM_OUTSIG_RALATE_AXIS_LEN ((UINT8)82)
#define CI_SYSTEM_CI_PATTERN_ID ((UINT8)0x08) /*增加联锁类型配置表*/
#define CI_SYSTEM_CI_PATTERN_LEN ((UINT8)13) /*修改为13,增加是否分布式联锁,UT/CT保护区段解锁停稳时间,UT/CT接近区段延时解锁超限时间*/
#define CI_SYSTEM_CI_PATTERN_LEN ((UINT8)14) /*修改为14,增加是否分布式联锁,UT/CT保护区段解锁停稳时间,UT/CT接近区段延时解锁超限时间*/
#define CI_SYSTEM_VIRCI_INCLUDEOC_ID ((UINT8)0x09) /*增加虚拟联锁与OC对应关系表*/
#define CI_SYSTEM_VIRCI_INCLUDEOC_LEN ((UINT8)22)
@@ -61,5 +61,7 @@
#define CI_SYSTEM_VERGE_KILL_ID ((UINT8)0x0F) /*计轴器对应临线的公里标转换表*/
#define CI_SYSTEM_SERIAL_COMM_ID ((UINT8)0x10) /*相邻联锁串口通信配置表*/
#endif
+3 -1
View File
@@ -21,6 +21,8 @@
#define DEVICE_IP_TYPE ((UINT32)0x40)
#define ZC_DSU_TRANSMIT_DATA_ID ((UINT32)4)
#define ZC_DSU_TRANSMIT_DATA_LEN ((UINT16)(34+30))
#define ZC_DSU_TRANSMIT_DATA_NEW_LEN ((UINT16)(34+30+40))/*ZCDSU通信关系表数据结构长度*/
#define ZC_DSU_TRANSMIT_DATA_NEW_NUM_MAX ((UINT16)(50)) /*ZCDSU通信关系表数据结构最大条数*/
#endif
+17 -16
View File
@@ -304,7 +304,7 @@ UINT8 MaskCfgDtStruFrmCIATSPsdMask(UINT8* FSDataName)
MASK_TYPE_PSD_PCB,MASK_TYPE_PSD_POB,MASK_TYPE_PSD_PSB,MASK_TYPE_PSD_PCB_INVALID,
MASK_TYPE_PSD_POB_INVALID,MASK_TYPE_PSD_PSB_INVALID,MASK_TYPE_PSD_JXTC_PANGLU,
MASK_TYPE_PSD_PCBPSBDPB_PANGLU_STATE,MASK_TYPE_PSD_PDB_FLASH_STATE,
MASK_TYPE_PSD_VIDEO_QK_LU,MASK_TYPE_PSD_VIDEO_QK_HONG,MASK_TYPE_PSD_EXCEPT_OPEN,MASK_TYPE_PSD_JXTCPANGLU_FAULT,MASK_TYPE_PSD_IBP_STATE,MASK_TYPE_PSD_IBP_FAULT,MASK_TYPE_PSD_JXTC_STATE,0U };
MASK_TYPE_PSD_VIDEO_QK_LU,MASK_TYPE_PSD_VIDEO_QK_HONG,MASK_TYPE_PSD_EXCEPT,MASK_TYPE_PSD_JXTCPANGLU_FAULT,MASK_TYPE_PSD_IBP_STATE,MASK_TYPE_PSD_IBP_FAULT,MASK_TYPE_PSD_JXTC_STATE,0U };
#else
UINT8 MaskType[] = { 0u,MASK_TYPE_PSD_STATE_ATS,MASK_TYPE_MUTUALLOCK_STATE,MASK_TYPE_REMORA_STATE, MASK_TYPE_PSD_PCB,MASK_TYPE_PSD_POB,MASK_TYPE_PSD_PSB,MASK_TYPE_PSD_PCB_INVALID,MASK_TYPE_PSD_POB_INVALID,MASK_TYPE_PSD_PSB_INVALID,0 };
#endif
@@ -546,7 +546,7 @@ UINT8 MaskCfgDtStruFrmCIATSLogSgmtT(UINT8* FSDataName)
MASK_TYPE_LOGICSECTION_JUMPLOCK,
MASK_TYPE_UPWARD_DIRECTION,
MASK_TYPE_DOWNWARD_DIRECTION,
MASK_TYPE_LOGICSECTION_ARB,
MASK_TYPE_LOGSEC_CBTC_ARB,
MASK_TYPE_LOGICSECTION_EMERG_XIANSU,1u };
UINT16 BuChang = 0u;
funcRtn = dquGetConfigDataNew(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_LOGIC_SGMT_MASK_ID, &pDataAddr, &DataSize, &rowCount);
@@ -594,7 +594,7 @@ UINT8 MaskCfgDtStruFrmCIATSLogSgmtT(UINT8* FSDataName)
if ((0xFFFFu != tempMaskId) && (0u != tempMaskId))
{
/*0和0xFFFF是无效的码位*/
if ((CI_SUM_MAX > MaskRow) && (CI_TO_ATS_MASK_SUM_MAX > tempMaskId) && (0u < tempMaskId))/*¼ì²éÊÇ·ñΪÓÐЧÂëλֵ*/
if ((CI_SUM_MAX > MaskRow) && (CI_TO_ATS_MASK_SUM_MAX > tempMaskId))/*¼ì²éÊÇ·ñΪÓÐЧÂëλֵ*/
{
ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceId = DeviceID;
ConfigCiToAtsMaskConfigDataStru[MaskRow][tempMaskId].DeviceType = CI_DEVICE_TYPE_LOGICSEC;
@@ -669,8 +669,9 @@ UINT8 MaskCfgDtStruFrmCIATSLogSgmt(UINT8 * FSDataName)
MASK_TYPE_LOGICSECTION_JUMPLOCK,
MASK_TYPE_UPWARD_DIRECTION,
MASK_TYPE_DOWNWARD_DIRECTION,
MASK_TYPE_LOGICSECTION_ARB,
MASK_TYPE_LOGSEC_CBTC_ARB,
MASK_TYPE_LOGICSECTION_SPKS_FLOCK,
MASK_TYPE_LOGSEC_PB_TACS_ARB,
1u};
UINT16 BuChang = 0u;
funcRtn = dquGetConfigDataNew(FSDataName,CI_ATS_MASK_TYPE,CI_ATS_LOGIC_SGMT_MASK_ID,&pDataAddr,&DataSize,&rowCount);
@@ -1426,7 +1427,7 @@ UINT8 MaskCfgDtStruFrmCIATSWashM(UINT8* FSDataName)
UINT16 residue = 0u;
UINT16 tempMaskId = 0u; /*码位ID临时变量*/
UINT8 MaskType[] = { 0u,MASK_TYPE_WASHMACHINE_READYSTATE,MASK_TYPE_WASHMACHINE_WORKMODE,0u };
UINT8 MaskType[] = { 0u,MASK_TYPE_WASHMACHINE_READYSTATE,0u };
UINT16 BuChang = 0u;
funcRtn = dquGetConfigData(FSDataName, CI_ATS_MASK_TYPE, CI_ATS_WASHMACHINE_MASK_ID, &pDataAddr, &DataSize);
if (0u == funcRtn)
@@ -2459,7 +2460,7 @@ UINT8 MaskCfgDtStruFrmCIZCPsdMask(UINT8 * FSDataName)
UINT16 DeviceID=0u;
UINT16 tempMaskId = 0u; /*码位ID临时变量*/
UINT8 MaskType[] = { 1u,MASK_TYPE_PSD_STATE,MASK_TYPE_PSD_EXCEPT_OPEN,1u };
UINT8 MaskType[] = { 1u,MASK_TYPE_PSD_STATE,MASK_TYPE_PSD_EXCEPT,1u };
UINT16 BuChang = 0u;
UINT16 wTempCount = 0U;
funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_PSD_MASK_ID,&pDataAddr,&DataSize);
@@ -3333,7 +3334,7 @@ UINT8 MaskCfgStruFrmCIZCAxleSgmtMask(UINT8 * FSDataName)
UINT8 MaskType[]={1u,MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_OCCUPY,
MASK_TYPE_PHYSECTION_ROUTELOCK,MASK_TYPE_PHYSECTION_JUMPLOCK_ZC,MASK_TYPE_AXISSECTION_ARB,MASK_TYPE_LIECHE_STOPSTATE,
MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_JUMPLOCK_APPLY,
MASK_TYPE_PHYSECTION_JUMPLOCK_CANCEL,1u};
MASK_TYPE_PHYSECTION_JUMPLOCK_CANCEL,MASK_TYPE_PHYSECTION_INTRUSION,MASK_TYPE_PHYSECTION_ATS_FLOCK,1u};
UINT16 BuChang = 0u;
funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_AXLE_SGMT_MASK_ID,&pDataAddr,&DataSize);
if(funcRtn==0u)
@@ -3397,7 +3398,7 @@ UINT8 MaskCfgStruFrmCIZCAxleSgmtMask(UINT8 * FSDataName)
}
}
}
else if((0u < residue )&&( residue < 6u))
else if(((0u < residue )&&( residue < 6u))||((11U < residue)&&(residue < 14U)))
{
/*获取码位ID*/
tempMaskId = ShortFromChar(pDataAddr);
@@ -3581,7 +3582,7 @@ UINT8 MaskCfgStruFrmZCCIAxleSgmtMask(UINT8 * FSDataName)
UINT8 MaskType[]={1u,MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_OCCUPY,
MASK_TYPE_PHYSECTION_ROUTELOCK,MASK_TYPE_PHYSECTION_JUMPLOCK_ZC,MASK_TYPE_AXISSECTION_ARB,MASK_TYPE_LIECHE_STOPSTATE,
MASK_TYPE_PHYSECTION_HEAD_STD,MASK_TYPE_PHYSECTION_HEAD_XTD,MASK_TYPE_PHYSECTION_JUMPLOCK_APPLY,
MASK_TYPE_PHYSECTION_JUMPLOCK_CANCEL,1u};
MASK_TYPE_PHYSECTION_JUMPLOCK_CANCEL,MASK_TYPE_PHYSECTION_INTRUSION,MASK_TYPE_PHYSECTION_ATS_FLOCK,1u};
UINT16 BuChang = 0u;
funcRtn = dquGetConfigData(FSDataName,CI_ZC_MASK_TYPE,CI_ZC_AXLE_SGMT_MASK_ID,&pDataAddr,&DataSize);
if(0U == funcRtn)
@@ -3658,7 +3659,7 @@ UINT8 MaskCfgStruFrmZCCIAxleSgmtMask(UINT8 * FSDataName)
return funcRtn;
}
}
else if((6u <= residue)&&(residue <((CI_ZC_AXLE_SGMT_MASK_LEN/2u)-1u)))
else if((6u <= residue)&&(residue < 12U))
{
/*获取码位ID*/
tempMaskId = ShortFromChar(pDataAddr);
@@ -4697,7 +4698,7 @@ UINT8 MaskInit(UINT8 * FSDataName)
******CI到ATS码位表解析
********/
/*CI-ATS道岔码位*/
if (DATA_TYPE_NEW == chPulicData)
if (DATA_TYPE_MAIN_BRANCH == chPulicData)
{
/*CI-ATS道岔码位*/
funcRtn = MaskCfgDtStruFrmCIATSSwitchMask(FSDataName);
@@ -4718,7 +4719,7 @@ UINT8 MaskInit(UINT8 * FSDataName)
/*CI-ATS紧急停车按钮码位*/
funcRtn *= MaskCfgDtStruFrmCIATSEsbMask( FSDataName);
/*CI-ATS逻辑区段码位*/
if (DATA_TYPE_NEW == chPulicData)
if (DATA_TYPE_MAIN_BRANCH == chPulicData)
{
/*主线*/
funcRtn *= MaskCfgDtStruFrmCIATSLogSgmt(FSDataName);
@@ -4742,7 +4743,7 @@ UINT8 MaskInit(UINT8 * FSDataName)
funcRtn *= MaskCfgDtStruFrmCIATSSPKSMask(FSDataName);
/*CI-ATS 洗车机码位*/
if (DATA_TYPE_NEW == chPulicData)
if (DATA_TYPE_MAIN_BRANCH == chPulicData)
{
/*主线*/
funcRtn *= MaskCfgDtStruFrmCIATSWash(FSDataName);
@@ -4773,7 +4774,7 @@ UINT8 MaskInit(UINT8 * FSDataName)
if(RC_WORK_MODE_CI == ciPattern)
{
if (DATA_TYPE_NEW == chPulicData)
if (DATA_TYPE_MAIN_BRANCH == chPulicData)
{
/*CI-ZC道岔码位*/
funcRtn *= MaskCfgDtStruFrmCIZCSwitchMask(FSDataName);
@@ -4806,7 +4807,7 @@ UINT8 MaskInit(UINT8 * FSDataName)
/*ZC-CI逻辑区段码位*/
funcRtn *= MaskCfgStruFrmZCCILogSgmtMask( FSDataName);
/*CI-ZC逻辑区段码位*/
if (DATA_TYPE_NEW == chPulicData)
if (DATA_TYPE_MAIN_BRANCH == chPulicData)
{
funcRtn *= MaskCfgDtStruFrmCI2ZCLogSgmt(FSDataName);
}
@@ -4818,7 +4819,7 @@ UINT8 MaskInit(UINT8 * FSDataName)
/*CI-ZC进路码位*/
funcRtn *= MaskCfgStruFrmCIZCRouteMask( FSDataName);
/*ZC-CI进路码位*/
if (DATA_TYPE_NEW == chPulicData)
if (DATA_TYPE_MAIN_BRANCH == chPulicData)
{
funcRtn *= MaskCfgDtStruFrmZC2CiRouteMask(FSDataName);
}
+2 -2
View File
@@ -53,7 +53,7 @@
#define CI_ZC_ROUTE_MASK_LEN ((UINT32)14) /*CI-ZC进路码位字节长度--1行长度*/
#define CI_ZC_AXLE_SGMT_MASK_ID ((UINT32)5) /*CI-ZC计轴区段码位*/
#define CI_ZC_AXLE_SGMT_MASK_LEN ((UINT32)26) /*CI-ZC计轴区段码位字节长度--1行长度,Modified 20151015*/
#define CI_ZC_AXLE_SGMT_MASK_LEN ((UINT32)30) /*CI-ZC计轴区段码位字节长度--1行长度,Modified 20151015*/
#define CI_ZC_OVER_LAP_MASK_ID ((UINT32)8) /*CI-ZC保护区段码位*/
#define CI_ZC_OVER_LAP_MASK_LEN ((UINT32)8) /*CI-ZC保护区段码位字节长度--1行长度*/
@@ -114,7 +114,7 @@
#define CI_ATS_SPKS_MASK_LEN ((UINT32)8) /*CI-ATS SPKS开关状态码位字节长度--1行长度;2018.03.19 由6改为8CI_ATS SPKS开关码位表增加一列开关旁路状态码位*/
#define CI_ATS_WASHMACHINE_MASK_ID ((UINT32)11) /*CI-ATS 洗车机就绪状态码位*/
#define CI_ATS_WASHMACHINE_MASK_LEN ((UINT32)8) /*CI-ATS 洗车机就绪状态码位字节长度--1行长度*/
#define CI_ATS_WASHMACHINE_MASK_LEN ((UINT32)6) /*CI-ATS 洗车机就绪状态码位字节长度--1行长度*/
#define CI_ATS_AAR_ROUTE_MASK_ID ((UINT32)12) /*CI-ATS全自动折返进路码位*/
#define CI_ATS_AAR_ROUTE_MASK_LEN ((UINT32)6) /*CI-ATS全自动折返进路码位字节长度--1行长度*/
+39 -5
View File
@@ -108,10 +108,10 @@
/*道岔配置表*/
#define OC_SWITCH_ID ((UINT8)2)
#define LEN_OC_SWITCH ((UINT8)8)
#define SWITCH_BOARD_MODE_MAX 5U /*一个OC中道岔最多的模块数*/
/*道岔继电器配置表*/
#define OC_SWITCH_RELAY_ID ((UINT8)4)
#define LEN_OC_SWITCH_RELAY ((UINT8)24)
#define LEN_OC_SWITCH_RELAY ((UINT8)28)
/*信号机配置表*/
#define OC_SIGNAL_ID ((UINT8)5)
#define LEN_OC_SIGNAL ((UINT8)24)
@@ -171,7 +171,7 @@
/*非进路调车继电器表*/
#define OC_RELAY_NO_ROUTE_ID ((UINT8)20)
#define OC_LEN_RELAY_NO_ROUTE ((UINT8)10)
#define OC_LEN_RELAY_NO_ROUTE ((UINT8)12)
/*车库门继电器表*/
#define OC_RELAY_GARAGE_DOOR_ID ((UINT8)21)
@@ -201,6 +201,15 @@
/* 试灯继电器表 */
#define OC_RELAY_LIGHTTESTBUTTON_ID ((UINT8)39)
/*北京10倒切板卡采集需求*/
#define OC_RELAY_REVERSE_SWITCH_ID ((UINT8)42)/*倒切开关*/
#define OC_RELAY_REVERSE_BOARD_ID ((UINT8)43)/*倒切板卡*/
#define OC_RELAY_REVERSE_BOARD_MAX ((UINT16)42)/*倒切板卡个数最大值*/
#define OC_LEN_REVERSE_SWITCH_LEN ((UINT8)94)
#define OC_LEN_REVERSE_BOARD_LEN ((UINT8)9)
#define OC_LEN_REVERSE_TYPE_SWITCH ((UINT8)0x01)
#define OC_LEN_REVERSE_TYPE_PSD ((UINT8)0x10)
/*紧急停车按钮继电器结构体*/
typedef struct S_Relay_EmegencyStopStruct
{
@@ -275,10 +284,13 @@ typedef struct S_Relay_PhysicalSegmentStruct
typedef struct S_Relay_PointStruct
{
UINT16 wPointId; /*道岔ID*/
UINT16 wOcId; /*OC ID*/
UINT16 wRelayDingBiaoId; /*定表继电器ID*/
UINT16 wRelayFanBiaoId; /*反表继电器ID*/
UINT16 wRelayShadowDingBiaoId; /*定表继电器ID*/
UINT16 wRelayShadowFanBiaoId; /*表继电器ID*/
UINT16 wRelayRedunDB1Id; /*(北京10道岔冗余采集)定表继电器1ID*/
UINT16 wRelayRedunDB2Id; /*(北京10道岔冗余采集)定表继电器2ID*/
UINT16 wRelayRedunFB1Id; /*(北京10道岔冗余采集)反表继电器1ID*/
UINT16 wRelayRedunFB2Id; /*(北京10道岔冗余采集)反表继电器2ID*/
UINT16 wRelayYunCaoId; /*允操继电器ID*/
UINT16 wRelayDingCaoId; /*定操继电器ID*/
UINT16 wRelayFanCaoId; /*反操继电器ID*/
@@ -340,6 +352,7 @@ typedef struct S_Relay_NoRouteDcStruct
UINT16 wRelayTongYiScId; /*同意试车继电器ID*/
UINT16 wRelayDrvShiCheShengQingId; /* 试车线驱动的申请试车继电器ID */
UINT16 wRelayColTongYiScId; /* 试车线同意试车继电器ID */
UINT16 wWaysideTryTrainIndRelayId; /* 轨旁试车指示器继电器ID */
} Relay_NoRouteDcStruct;
/*照查继电器结构体*/
@@ -437,9 +450,11 @@ typedef struct S_Relay_WashMachineStruct
UINT16 TrainEmergencyStopRelayId; /*全自动列车紧急停车继电器(配置字段:采集继电器)*/
UINT16 HeadWashAllowRelayId; /*全自动允许车头清洗继电器(配置字段:采集继电器)*/
UINT16 TailWashAllowRelayId; /*全自动允许车尾清洗继电器(配置字段:采集继电器)*/
UINT16 wCouplingWashAllowRelayId; /*全自动允许联挂段清洗继电器(配置字段:采集继电器)*/
UINT16 WashTrainRequestRelayId; /*全自动洗车请求继电器(配置字段:驱动继电器)*/
UINT16 TrainHeadStopSteadyRelayId; /*全自动车头停稳继电器(配置字段:驱动继电器)*/
UINT16 TrainTailStopSteadyRelayId; /*全自动车尾停稳继电器(配置字段:驱动继电器)*/
UINT16 wCoupingStopSteadyRelayId; /*全自动车尾停稳继电器(配置字段:驱动继电器)*/
UINT16 TrainPassRequestRelayId; /*全自动通过请求继电器(配置字段:驱动继电器)*/
UINT16 TrainOutWashPortAllowRelayId; /*全自动允许列车出库继电器(配置字段:采集继电器)*/
UINT16 PauseTrainWashRequestRelayId; /*全自动暂停洗车继电器(配置字段:驱动继电器)*/
@@ -479,4 +494,23 @@ typedef struct S_Relay_ReverseCutStruct
UINT16 wReverseCutRelayId; /*倒切继电器ID*/
}Relay_ReverseCutStruct;
typedef struct S_Relay_ReverseBoardStruct
{
UINT16 wReversBoardId; /*倒切板卡D*/
UINT8 chDevType; /*设备类型*/
UINT16 wDevId; /*板卡配置设备 ID*/
UINT16 wBoardColOpenRelayId; /* 常开采集继电器ID */
UINT16 wBoardColCloseRelayId; /* 常闭采集继电器ID */
}Relay_ReverseBoardStruct;
typedef struct S_Relay_ReverseSwitchStruct
{
UINT16 wReversSwitchId; /*倒切开关ID*/
UINT16 ocId; /*OC ID*/
UINT16 wColOpenRelayId; /* 常开采集继电器ID */
UINT16 wColCloseRelayId; /* 常闭采集继电器ID */
UINT16 wRelateBoardNum; /*关联板卡个数*/
Relay_ReverseBoardStruct strRelateBoardBuf[OC_RELAY_REVERSE_BOARD_MAX]; /*关联板卡数据*/
}Relay_ReverseSwitchStruct;
#endif
+5
View File
@@ -97,6 +97,11 @@
#define SIGNAL_DXJ_TYPE ((UINT8)0x0A) /*DXJ继电器*/
#define CHECK_ZCJ_TYPE ((UINT8)0x0B) /*ZCJ继电器*/
#define SWITCH_IBP_TYPE ((UINT8)0x0C) /*IBP继电器*/
#define SIGNAL_DJ_TYPE ((UINT8)0x0F) /*信号机灯丝继电器*/
#define SIGNAL_MAINJ_TYPE ((UINT8)0x10) /*信号机主控继电器*/
#define SIGNAL_ACKJ_TYPE ((UINT8)0x11) /*信号机次控继电器*/
#define SINNAL_CMAINJ_TYPE ((UINT8)0x12) /*信号机复杂主控继电器*/
/*继电器混线相关*/
#define RELAY_HUNXIAN_NUM ((UINT8)10) /*继电器混线容忍最大周期*/
+21 -10
View File
@@ -900,6 +900,7 @@ UINT8 rrm_PrepareSwitchStatOfAC(UINT16 acID)
UINT8 cycleESB = 0u;
UINT8 chLinkNum = 0u;
UINT8 ESBStatus = ESB_STATE_VALID_YES;
UINT8 chEsbCutState = 0U; /*ESB旁路状态*/
const UINT16 *pLinkIdBuf = NULL;
const DSU_DEVICE_IN_LINK_STRU* pTempDeviceStru = NULL;
@@ -932,7 +933,14 @@ UINT8 rrm_PrepareSwitchStatOfAC(UINT16 acID)
for (cycleESB = 0u;cycleESB < pTempDeviceStru->struESBDev.wDevCount;cycleESB++)
{
ESBStatus = GetEsbState(pTempDeviceStru->struESBDev.wDevSetId[cycleESB]);
chEsbCutState = GetEsbCutState(pTempDeviceStru->struESBDev.wDevSetId[cycleESB]);
if (ESB_CUT_YES == chEsbCutState)
{
/* ESB旁路,认为按钮未按下*/
}
else
{
if (ESB_STATE_VALID_NO == ESBStatus)
{
/** ESB未按下,继续遍历*/
@@ -942,6 +950,7 @@ UINT8 rrm_PrepareSwitchStatOfAC(UINT16 acID)
break;
}
}
}
if (cycleESB != pTempDeviceStru->struESBDev.wDevCount)
{
@@ -986,6 +995,7 @@ UINT8 rrm_PrepareSwitchStatOfAC(UINT16 acID)
UINT8 PSDStatus = PSD_STATE_OPEN;
const UINT16 *pLinkIdBuf = NULL;
const DSU_DEVICE_IN_LINK_STRU* pTempDeviceStru = NULL;
UINT8 chPsdMutualLockStat = 0U; /*PSD互锁解除状态*/
chLinkNum = GetAxisLinkSum(acID);
pLinkIdBuf = GetAxisLinkIdBuf(acID);
@@ -1016,7 +1026,14 @@ UINT8 rrm_PrepareSwitchStatOfAC(UINT16 acID)
for (cyclePSD = 0u;cyclePSD < pTempDeviceStru->struScreenDev.wDevCount;cyclePSD++)
{
PSDStatus = GetPsdState(pTempDeviceStru->struScreenDev.wDevSetId[cyclePSD]);
chPsdMutualLockStat = GetPsdMutualLockRemoveState(pTempDeviceStru->struScreenDev.wDevSetId[cyclePSD]);
if (PSD_MUTUALLOCK_REMOVE_YES == chPsdMutualLockStat)
{
/*互锁解除认为PSD状态正常,继续检查*/
}
else
{
if (PSD_STATE_CLOSE == PSDStatus)
{
/** 屏蔽门关闭,继续遍历*/
@@ -1026,6 +1043,7 @@ UINT8 rrm_PrepareSwitchStatOfAC(UINT16 acID)
break;
}
}
}
if (cyclePSD != pTempDeviceStru->struScreenDev.wDevCount)
{
@@ -1182,20 +1200,13 @@ UINT8 rrm_PrepareSwitchStatOfAC(UINT16 acID)
*/
void rrm_SetRRMResult(UINT16 trainID,UINT8 rrmReply,UINT8 rrmReason,UINT8 nextOCId)
{
UINT16 wRcIdWithType = 0U;
if (RC_WORK_MODE_CI == CI_SYSTEM_TYPE_RCI)
{
wRcIdWithType = 0x3C00U;
}
else
{
wRcIdWithType = 0x3D00U;
}
UINT16 wRcIdWithType = 0x3D00U;
wRcIdWithType |= (UINT16)nextOCId;
SetTrainRrmState(trainID,rrmReply);
SetTrainRrmReson(trainID,rrmReason);
SetTrainNextTioc(trainID, wRcIdWithType); /*设置下一控区ID需带0x3c,否则给IVOC组包时无法获取互联互通ID*/
SetTrainNextTioc(trainID, wRcIdWithType);
}
/**
+4 -2
View File
@@ -1901,11 +1901,13 @@ static UINT8 rrm_CheckTrainHeadInFreeSta(UINT16 trainID, IN const EnvelopeStruct
UINT8 chHeadAcStatus = 0U; /*车头计轴区段占用状态*/
/** 入口参数校验 */
ASSERT_RET_VALUE((NULL == pTemp) || (0U == pTemp->ACCnt), errorCode, 0x80000000U);
ASSER_ERROR((NULL == pTemp) || (0U == pTemp->ACCnt), errorCode, 0x80000000U);
if(0U == errorCode)
{
headRelStaID = rrm_PrepareAtsLgcStaOfAC(pTemp->ACID[pTemp->ACCnt - 1U]);
ASSER_ERROR((0xffffU == headRelStaID), errorCode, 0x40000000U);
}
if (0U == errorCode)
{
@@ -10,12 +10,16 @@
********************************************************/
#include "ReverseCutConfigDataManage.h"
#include "../Switch/SwitchConfigDataManage.h"
#include "../PSD/PSDConfigDataManage.h"
ReverseCutCfgDataStru gstReverseCutCfgData[REVERSE_CUT_SUM_MAX] = { 0U }; /*定义倒切装置数据配置结构体*/
UINT16 gReverseCutCfgIdBuf[REVERSE_CUT_SUM_MAX] = { 0U }; /*定义倒切装置数据配置ID 缓存*/
INT16 gReverseCutCfgSum = 0; /*定义倒切装置数据配置总数 */
ReverseSwitchCfgDataStru gLocalReverseData = { 0U };/*定义属于本联锁的倒切柜数据*/
/*
*
@@ -139,9 +143,13 @@ UINT8 ReverseCutConfigDataManage(void)
UINT16 jj = 0u; /*游标*/
UINT16 wReverseCutDataSum = 0u; /*信号机设备配置数据总数*/
UINT8 ret = CI_ERROR;
UINT8 localCiId = GetSystemParaLocalCiId();
/*保存信号机ID索引数组*/
UINT16 wDevId = 0u;
UINT16 wLocalSwitchSum = 0U;/*本地道岔*/
UINT16 wLocalPsdSum = 0U;/*本地PSD*/
UINT8 localCiId = GetSystemParaLocalCiId(); /*获取本机联锁ID*/
UINT8 belongCiId = 0u;/*设备配置初始化所属联锁*/
UINT8 chFind = CI_ERROR;
/*保存倒切ID索引数组*/
wReverseCutDataSum = GetReverseCutCurSum();
if (wReverseCutDataSum < REVERSE_CUT_SUM_MAX)
{/*配置数据总数错误*/
@@ -163,6 +171,162 @@ UINT8 ReverseCutConfigDataManage(void)
ret = CI_SUCCESS;
}
return ret;
if (CI_SUCCESS == ret)
{
if (0U != gLocalReverseData.wId)
{
wLocalSwitchSum = GetSwitchCurSum();
wLocalPsdSum = GetPsdSum();
/*本联锁具备倒切*/
for (ii = 0u; ii < gLocalReverseData.wRelateBoardNum; ii++)
{
chFind = CI_ERROR;
if (CI_DEVICE_TYPE_SWITCH == gLocalReverseData.strRelateBoardBuf[ii].chDevType)
{
for (jj = 0u; jj < wLocalSwitchSum; jj++)
{
wDevId = GetSwitchId(jj); /*获取道岔ID*/
belongCiId = GetSwitchBelongCiId(wDevId); /*获取所属联锁ID*/
if ((wDevId == gLocalReverseData.strRelateBoardBuf[ii].wDevId) && (belongCiId == localCiId))
{
/*设置对应倒切继电器*/
chFind = SetSwitchRelateReverseBoardId(wDevId, gLocalReverseData.strRelateBoardBuf[ii].wReversBoardId);
break;
}
}
}
else if (CI_DEVICE_TYPE_PSD == gLocalReverseData.strRelateBoardBuf[ii].chDevType)
{
for (jj = 0u; jj < wLocalPsdSum; jj++)
{
wDevId = GetPsdId(jj); /*获取屏蔽门ID*/
belongCiId = GetPsdBelongCiId(wDevId); /*获取所属联锁ID*/
if ((wDevId == gLocalReverseData.strRelateBoardBuf[ii].wDevId) && (belongCiId == localCiId))
{
/*设置对应倒切继电器*/
chFind = SetPsdRelateReverseRelay(wDevId, gLocalReverseData.strRelateBoardBuf[ii].wReversBoardId);
break;
}
}
}
else
{
chFind = CI_ERROR;
}
if (CI_ERROR == chFind)
{
ret = CI_ERROR;
break;
}
}
}
}
return ret;
}
/*
*
*
* 0:
* [1,65534]ID
*/
UINT16 GetReverseSwitchOpenRelay(void)
{
return gLocalReverseData.wColOpenRelayId;
}
/*
*
*
* 0:
* [1,65534]ID
*/
UINT16 GetReverseSwitchCloseRelay(void)
{
return gLocalReverseData.wColCloseRelayId;
}
/*
*
* wIndex
* 0:
* [1,65534]ID
* UINT16_MAX
*/
UINT16 GetReverseBoardOpenRelay(UINT16 wIndex)
{
UINT16 chRetVal =UINT16_MAX;
if (0U == gLocalReverseData.wRelateBoardNum)
{
chRetVal = 0U;
}
else if (wIndex < gLocalReverseData.wRelateBoardNum)
{
chRetVal = gLocalReverseData.strRelateBoardBuf[wIndex].wBoardColOpenRelayId;
}
else
{
;/*错误*/
}
return chRetVal;
}
/*
*
* wIndex
* 0:
* [1,65534]ID
*/
UINT16 GetReverseBoardCloseRelay(UINT16 wIndex)
{
UINT16 chRetVal = UINT16_MAX;
if (0U == gLocalReverseData.wRelateBoardNum)
{
chRetVal = 0U;
}
else if (wIndex < gLocalReverseData.wRelateBoardNum)
{
chRetVal = gLocalReverseData.strRelateBoardBuf[wIndex].wBoardColCloseRelayId;
}
else
{
;/*错误*/
}
return chRetVal;
}
/*
*
*
* 0: [1,42]
*/
UINT16 GetReverseBoardNum(void)
{
UINT16 chRetVal = 0U;
if (0U == gLocalReverseData.wRelateBoardNum)
{
chRetVal = 0U;
}
else if (REVERSE_BOARD_SUM_MAX >= gLocalReverseData.wRelateBoardNum)
{
chRetVal = gLocalReverseData.wRelateBoardNum;
}
else
{
chRetVal = REVERSE_BOARD_SUM_MAX;
}
return chRetVal;
}
/**
* @brief
* @param[in]
* @return
* @note by fan 20260610
*/
const ReverseSwitchCfgDataStru * GetReverseCfgData(void)
{
return &gLocalReverseData;
}
@@ -31,11 +31,34 @@ extern "C" {
UINT16 wReverseRelayId; /*倒切继电器ID (配置数据)*/
}ReverseCutCfgDataStru;
typedef struct S_ReverseBoardStruct
{
UINT16 wReversBoardId; /*倒切板卡D*/
UINT8 chDevType; /*设备类型*/
UINT16 wDevId; /*板卡配置设备 ID*/
UINT16 wBoardColOpenRelayId; /* 常开采集继电器ID */
UINT16 wBoardColCloseRelayId; /* 常闭采集继电器ID */
}ReverseBoardStruct;
/*倒切开关及板卡配置数据结构体*/
typedef struct S_ReverseSwitchDataStruct
{
UINT16 wId; /*倒切开关编号*/
UINT16 wColOpenRelayId; /* 常开采集继电器ID */
UINT16 wColCloseRelayId; /* 常闭采集继电器ID */
UINT16 wRelateBoardNum; /*关联板卡个数*/
UINT8 chBelongCiId;/*所属联锁*/
ReverseBoardStruct strRelateBoardBuf[REVERSE_BOARD_SUM_MAX]; /*关联板卡数据*/
}ReverseSwitchCfgDataStru;
/*******************************全局变量声明*******************************/
extern ReverseCutCfgDataStru gstReverseCutCfgData[REVERSE_CUT_SUM_MAX]; /*定义倒切装置数据配置结构体*/
extern UINT16 gReverseCutCfgIdBuf[REVERSE_CUT_SUM_MAX]; /*定义倒切装置数据配置ID 缓存*/
extern INT16 gReverseCutCfgSum; /*定义倒切装置数据配置总数 */
extern ReverseSwitchCfgDataStru gLocalReverseData;/*定义属于本联锁的倒切柜数据*/
/*
*
* void
@@ -83,6 +106,54 @@ extern "C" {
* CI_ERROR,
*/
UINT8 ReverseCutConfigDataManage(void);
/*
*
*
* 0:
* [1,65534]ID
*/
UINT16 GetReverseSwitchOpenRelay(void);
/*
*
*
* 0:
* [1,65534]ID
*/
UINT16 GetReverseSwitchCloseRelay(void);
/*
*
* wIndex
* 0:
* [1,65534]ID
* UINT16_MAX
*/
UINT16 GetReverseBoardOpenRelay(UINT16 wIndex);
/*
*
* wIndex
* 0:
* [1,65534]ID
*/
UINT16 GetReverseBoardCloseRelay(UINT16 wIndex);
/*
*
*
* 0: [1,42]
*/
UINT16 GetReverseBoardNum(void);
/**
* @brief
* @param[in]
* @return
* @note by fan 20260610
*/
const ReverseSwitchCfgDataStru * GetReverseCfgData(void);
#ifdef __cplusplus
}
#endif
@@ -16,6 +16,7 @@ ReverseCutDataStru gstReverseCutData[REVERSE_CUT_SUM_MAX] = { 0U }; /*
UINT8 gTiocSystemMode = 0U; /*TIOC主机模式 (影子模式 主控模式)*/
UINT8 gTiocSystemCutState = 0U; /*TIOC能否倒切状态 (能否倒切或默认)*/
UINT8 gTiocCanntCutReason = 0U; /*不可倒切原因*/
LocalReverseBoardDataStru gstReversetData = { 0U }; /*本集中区倒切状态存储、周期刷新*/
/*
@@ -235,6 +236,78 @@ UINT8 ReverseCutDataManageInit(void)
;/* 初始化失败 */
}
if (CI_SUCCESS == ret)
{
/*初始化为非控制侧*/
gstReversetData.chSwitchState = REVERSE_STATE_OLD_SYSTEM;
for (i = 0u; i < REVERSE_BOARD_SUM_MAX; i++)
{
gstReversetData.localReverBoardState[i] = REVERSE_STATE_OLD_SYSTEM;
}
}
return ret;
}
/*
*
* const UINT8 chReverseCutState, 0xAA 0x55 0xFF
*
*/
void SetReverseSwitchState(const UINT8 chReverseCutState)
{
if ((REVERSE_STATE_NEW_SYSTEM == chReverseCutState)
|| (REVERSE_STATE_OLD_SYSTEM == chReverseCutState)
||(REVERSE_STATE_ABNORMAL == chReverseCutState))
{
gstReversetData.chSwitchState = chReverseCutState;
}
}
/*
*
* const UINT8 chReverseCutState,0xAA 0x55 0xFF wIndex索引
*
*/
void SetReverseBoardState(const UINT8 chReverseCutState, const UINT16 wIndex)
{
if ((REVERSE_STATE_NEW_SYSTEM == chReverseCutState)
|| (REVERSE_STATE_OLD_SYSTEM == chReverseCutState)
||(REVERSE_STATE_ABNORMAL == chReverseCutState))
{
if(wIndex < REVERSE_BOARD_SUM_MAX)
{
gstReversetData.localReverBoardState[wIndex] = chReverseCutState;
}
}
}
/*
*
*
* 0xAA 0x55 0xFF
*/
UINT8 GetReverseSwitchState(void)
{
UINT8 ret = gstReversetData.chSwitchState;
return ret;
}
/*
* ID指定索引倒切板卡状态
* const UINT16 wBoardId,Id
* 0xAA 0x55 0xFF
*/
UINT8 GetReverseBoardState(const UINT16 wBoardId)
{
UINT8 ret = REVERSE_STATE_ABNORMAL;
UINT16 jj = 0U;/*索引*/
for (jj = 0U; jj < gLocalReverseData.wRelateBoardNum; jj++)
{
if (wBoardId == gLocalReverseData.strRelateBoardBuf[jj].wReversBoardId)
{
ret = gstReversetData.localReverBoardState[jj];
break;
}
}
return ret;
}
@@ -30,6 +30,15 @@ extern "C" {
UINT16 wReverseState; /*倒切状态*/
}ReverseCutDataStru;
/*倒切状态数据结构体*/
typedef struct S_ReverseDataStruct
{
UINT8 chSwitchState; /*倒切开关状态*/
UINT8 localReverBoardState[REVERSE_BOARD_SUM_MAX];/*倒切板卡状态数组*/
}LocalReverseBoardDataStru;
/*******************************全局变量声明*******************************/
extern ReverseCutDataStru gstReverseCutData[REVERSE_CUT_SUM_MAX]; /*定义倒切装置数据动态数据结构体*/
extern UINT8 gTiocSystemMode;
@@ -109,6 +118,34 @@ void SetReverseCutState(const UINT16 wReverseCutId, const UINT8 chReverseCutStat
*/
UINT8 ReverseCutDataManageInit(void);
/*
*
* const UINT8 chReverseCutState, 0xAA 0x55 0xFF
*
*/
void SetReverseSwitchState(const UINT8 chReverseCutState);
/*
*
* const UINT8 chReverseCutState,0xAA 0x55 0xFF wIndex索引
*
*/
void SetReverseBoardState(const UINT8 chReverseCutState, const UINT16 wIndex);
/*
*
*
* 0xAA 0x55 0xFF
*/
UINT8 GetReverseSwitchState(void);
/*
* ID指定索引倒切板卡状态
* const UINT16 wBoardId,Id
* 0xAA 0x55 0xFF
*/
UINT8 GetReverseBoardState(const UINT16 wBoardId);
#ifdef __cplusplus
}
#endif
@@ -31,4 +31,12 @@
#define REVERSE_REASON_OC_COMM_ERR ((UINT8)0x01) /*不可倒切原因 OC通信故障*/
#define REVERSE_REASON_IVOC_COMM_ERR ((UINT8)0x02) /*不可倒切原因 IVOC通信故障*/
#define REVERSE_REASON_AXLE_COMM_ERR ((UINT8)0x04) /*不可倒切原因 计轴系统通信故障*/
/*倒切设备总数最大值*/
#define REVERSE_BOARD_SUM_MAX ((UINT16)42) /*定义倒切板卡最大值*/
/*倒切状态*/
#define REVERSE_STATE_NEW_SYSTEM ((UINT8)0xAAU) /*新建系统侧*/
#define REVERSE_STATE_OLD_SYSTEM ((UINT8)0x55U) /*既有系统侧*/
#define REVERSE_STATE_ABNORMAL ((UINT8)0xFFU) /*采集异常*/
#endif
@@ -2162,8 +2162,6 @@ static UINT8 LockDrSubRouteSwitchCheck(UINT16 wSubRouteId, UINT8 functionId, UIN
#endif
if (CI_SUCCESS == reResult)
{
if (CI_TRADITION_RAILWAY == lineIdentity)
{
/*
@@ -2185,12 +2183,6 @@ static UINT8 LockDrSubRouteSwitchCheck(UINT16 wSubRouteId, UINT8 functionId, UIN
}
}
else
{
/* 失败返回 */
reResult = CI_ERROR;
}
}
if ((CI_SUCCESS == reResult) || (RETURN_LOCK_ERR_SWITPOS == reResult))
{/*进路锁闭防护道岔检查*/
@@ -3921,29 +3913,8 @@ static UINT8 SetDrSubRouteSwitchCheck(UINT16 routeId, UINT8 functionId, UINT8 se
}
}
if (CI_SUCCESS == reResult)
{
if (CI_TRADITION_RAILWAY == lineIdentity)
{
/* 通过检查 */
reResult = CI_SUCCESS;
}
else
{
/* 失败返回 *//* zt 删除单轨相关代码 2022-02-15 */
reResult = CI_ERROR;
}
}
else
{
/* 失败返回 */
reResult = CI_ERROR;
}
if (CI_SUCCESS == reResult)
{/*进路办理防护道岔检查*/
if (CI_TRADITION_RAILWAY == lineIdentity)
{
/*进路关联防护道岔【未引导总锁】*/
devId = 0u;
devState = 0u;
@@ -3984,12 +3955,6 @@ static UINT8 SetDrSubRouteSwitchCheck(UINT16 routeId, UINT8 functionId, UINT8 se
}
}
else
{
/* 失败返回 *//* zt 删除单轨相关代码 2022-02-15 */
reResult = CI_ERROR;
}
}
else
{
/* 失败返回 */
reResult = CI_ERROR;
@@ -2437,7 +2437,9 @@ void LgcSecLogicalUnlockProc(const UINT16 logRouteId, const UINT16 logSectionId,
/*清0 防脏数据*/
for (jj = chTrainSum; jj < chLgcResTrainSum; jj++)
{
(void)ComMemSet(&(pstLgcSecInfo[wLgcBufIndex].szTrainResData[jj]), (UINT16)sizeof(LogicTrainResStruct), 0U);
/*重置资源信息结构体*/
ResetResInfoStruct(wLgcBufIndex, jj);
}
pstLgcSecInfo[wLgcBufIndex].chTrainInfoSum = chTrainSum;
@@ -12,7 +12,7 @@
#include "../Switch/SwitchDataManage.h"
#include "RouteConfigDataManage.h"
#include "dquCILSStruInit.h"
RouteConfigDataStruct RouteConfigDataStru[ROUTE_SUM_MAX]; /*定义进路配置数据结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
UINT16 LocalCiRouteIdBuf[ROUTE_SUM_MAX] = {0u}; /*定义本地联锁进路ID映射数组*/
INT16 RouteCurSum = 0; /*进路当前总数(本联锁和相邻联锁发送给本联锁的进路总数),进路的特殊处理*/
@@ -3701,3 +3701,101 @@ UINT8 GetPhySecInRoutePosIndex(const UINT16 routeId, const UINT16 phySectionId)
return retVal;
}
/*
* ID进路配置方向
* const UINT16 routeId, ID
* 0x55 Link方向一致
* 0xAA Link方向相反
** by LYJ 20260330
*/
UINT8 GetRouteConfigDirection(const UINT16 routeId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT8 retVal = CI_ERROR;
bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/
if (ROUTE_SUM_MAX > bufIndex)
{
retVal = RouteConfigDataStru[bufIndex].chRouteConfigDirection;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* 线
* const UINT16 wRouteId, ID
* 线
*
* BY LYJ 20260602
*/
UINT8 GetRouteConnectType(const UINT16 wRouteId)
{
UINT8 chRetVal = 0U;
UINT16 bufIndex = 0U;
bufIndex = GetRouteConfigBufIndex(wRouteId); /*获取进路数组下标*/
if (ROUTE_SUM_MAX > bufIndex)
{
chRetVal = RouteConfigDataStru[bufIndex].chRouteConnectType;
}
else
{
/*不处理*/
}
return chRetVal;
}
/*
*
* const UINT16 wRouteId, ID
* const UINT16 wPhySecId,ID
*
*
* BY LYJ 20260603
*/
UINT16 GetRoutePhySecFrontPhyId(const UINT16 wRouteId, const UINT16 wPhySecId)
{
UINT16 wFroutPhySecId = 0U;
UINT8 chRoutePhySum = 0U;
RoutePhysicalSectionStruct* pRoutePhyBuf = NULL;
UINT8 ii = 0U;
chRoutePhySum = GetRoutePhysicalSectionSum(wRouteId);
pRoutePhyBuf = GetRouteSectionData(wRouteId);
if (NULL != pRoutePhyBuf)
{
for (ii = 0U;ii < chRoutePhySum;ii++)
{
if (pRoutePhyBuf[ii].PhysicalSectionId == wPhySecId)
{
if (0U < ii)
{
wFroutPhySecId = pRoutePhyBuf[ii - 1U].PhysicalSectionId;
}
else
{
/*进路第一个区段属于邻线,进路是邻线,不在本线处理*/
}
break;
}
else
{
/*不处理*/
}
}
}
else
{
/*不处理*/
}
return wFroutPhySecId;
}
@@ -188,7 +188,8 @@ typedef struct S_RouteConfigDataStruct
UINT16 RouteId; /*进路ID (配置字段)*/
UINT8 BelongCiId; /*所属联锁ID (配置字段)*/
UINT8 BelongVirCIid; /*所属虚拟联锁ID*/
UINT8 RouteDirection; /*进路方向(向左/向右) (配置字段)*/
UINT8 RouteDirection; /*进路方向(向左/向右) (配置字段叠系统定义逻辑方向与上下行方向的关系计算的上下行)*/
UINT8 chRouteConfigDirection; /*进路方向(向左/向右) (纯配置字段0x55 与Link方向一致 0xAA 与Link方向相反)*/
UINT8 RouteType; /*进路类型(列车进路/折返进路/调车进路) (配置字段)*/
UINT8 ConfigRouteType; /*配置进路类型(列车进路/折返进路/调车进路) (配置字段)*/
UINT8 LeadProperty; /*进路引导属性(不可引导/可引导) (配置字段)*/
@@ -316,6 +317,7 @@ typedef struct S_RouteConfigDataStruct
UINT8 cRouteRukuProperty; /*是否为入库进路:0x55 入库进路;0xaa 非入库进路*/
SideProtecGroupStru RouteSideProtecData;/*进路侧防条件*/
UINT8 chRouteCouplinkType; /*进路联挂属性:0x55 配置联挂属性;0xaa 未配置联挂属性*/
UINT8 chRouteConnectType; /*进路联络线属性:0x55 配置联络线属性;0xaa 未配置联络线属性*/
}RouteConfigDataStruct;
/*******************************全局变量声明*******************************/
@@ -1418,6 +1420,31 @@ UINT8 GetRouteThisPortecSwitchPos(const UINT16 wRouteId, const UINT16 wSwitchId)
*
*/
UINT8 GetPhySecInRoutePosIndex(const UINT16 routeId, const UINT16 phySectionId);
/*
* ID进路配置方向
* const UINT16 routeId, ID
* 0x55 Link方向一致
* 0xAA Link方向相反
** by LYJ 20260330
*/
UINT8 GetRouteConfigDirection(const UINT16 routeId);
/*
* 线
* const UINT16 wRouteId, ID
* 线
*
* BY LYJ 20260602
*/
UINT8 GetRouteConnectType(const UINT16 wRouteId);
/*
*
* const UINT16 wRouteId, ID
* const UINT16 wPhySecId,ID
*
*
* BY LYJ 20260603
*/
UINT16 GetRoutePhySecFrontPhyId(const UINT16 wRouteId, const UINT16 wPhySecId);
#ifdef __cplusplus
}
@@ -6193,3 +6193,53 @@ UINT32 GetRouteIdleCycNum(const UINT16 routeId)
return reVal;
}
/*
* 线
* const UINT16 routeId ID
* const UINT8 setFlag
*
* Created lyj 2026.06.03
*/
void SetRouteConnectReleaseFlag(const UINT16 routeId, const UINT8 setFlag)
{
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/
if (ROUTE_SUM_MAX > bufIndex)
{
if ((ROUTE_CONNECT_RELEASE_YES == setFlag) || (ROUTE_CONNECT_RELEASE_NO == setFlag))
{
RouteDataStru[bufIndex].chRouteConnReleaseFlag = setFlag;
}
else
{
/*不处理*/
}
}
else
{
/*不处理*/
}
}
/*
* 线
* const UINT16 routeId ID
* 线
* Created lyj 2026.06.03
*/
UINT8 GetRouteConnectReleaseFlag(const UINT16 routeId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT8 chRetVal = ROUTE_CONNECT_RELEASE_NO;
bufIndex = GetRouteConfigBufIndex(routeId); /*获取进路数组下标*/
if (ROUTE_SUM_MAX > bufIndex)
{
chRetVal = RouteDataStru[bufIndex].chRouteConnReleaseFlag;
}
else
{
/*不处理*/
}
return chRetVal;
}
+17 -1
View File
@@ -72,7 +72,7 @@ typedef struct S_RouteDataStruct
UINT8 RouteAssoSwitSingOperStat; /*进路带动道岔单操状态*/
UINT8 RouteInnerSwitDrivState; /*进路内道岔驱动状态*/
UINT8 RouteAssocSwitDrivState; /*进路带动道岔驱动状态*/
UINT8 RouteStateFlag; /*进路状态标志(1:表示有效;0:表示无效)*/
UINT8 RouteStateFlag; /*进路状态标志(0x55:表示有效;0xAA:表示无效)*/
UINT8 TrainEnterFlag; /*列车驶入标志*/
UINT8 ZongRenJieDelayType; /*总人解延时类型,分为:倒计时结束后立刻全部区段解锁,第一个占压的物理区段前变异常锁闭,所有的物理区段变异常锁闭*/
UINT8 RecoverOpenState; /*进路需要重开状态,用于处理PSD、SPKS、扣车恢复重开信号*/
@@ -113,6 +113,7 @@ typedef struct S_RouteDataStruct
UINT8 chCouplinkSuccessFlag; /*进路联挂成功*/
UINT8 chCouplinkErrorFlag; /*进路联挂失败*/
UINT32 dwRouteIdleCycNum; /*进路空闲起始周期号*/
UINT8 chRouteConnReleaseFlag; /*进路联络线解锁标志*/
} RouteDataStruct;
/*进路动态数据结构体-车车*/
@@ -1787,6 +1788,21 @@ void SetRouteStopensureFlagCC(const UINT16 routeId, const UINT8 stopensureFlag);
* by cgh 20251210
*/
UINT32 GetRouteIdleCycNum(const UINT16 routeId);
/*
* 线
* const UINT16 routeId ID
* const UINT8 setFlag
*
* Created lyj 2026.06.03
*/
void SetRouteConnectReleaseFlag(const UINT16 routeId, const UINT8 setFlag);
/*
* 线
* const UINT16 routeId ID
* 线
* Created lyj 2026.06.03
*/
UINT8 GetRouteConnectReleaseFlag(const UINT16 routeId);
#ifdef __cplusplus
}
+6
View File
@@ -100,6 +100,7 @@
#define ROUTE_TYPE_AUTO_TRIGGER ((UINT8)0x66) /*自动触发进路*/
#define ROUTE_TYPE_RUKU ((UINT8)0x77) /*入库进路*/
#define ROUTE_TYPE_COUPLINK ((UINT8)0x88) /*联挂进路*/
#define ROUTE_TYPE_CONNECT ((UINT8)0x99) /*联络线进路*/
/*进路状态*/
#define ROUTE_STATE_IDLE ((UINT8)0x01) /*进路空闲*/
@@ -401,5 +402,10 @@
#define SIDE_PROTECT_SWITCH_NUM_MAX ((UINT8)5) /*侧防道岔数量*/
#define SIDE_PROTECT_PHYSEC_NUM_MAX ((UINT8)10) /*侧防物理区段数量*/
#define SIDE_PROTECT_NUM_MAX ((UINT8)10) /*侧防条件数量*/
#define ROUTE_CONNECT_RELEASE_YES ((UINT8)0x55) /*进路联络线解锁标志有效*/
#define ROUTE_CONNECT_RELEASE_NO ((UINT8)0xaa) /*进路联络线解锁标志无效*/
#endif
@@ -17,7 +17,7 @@
AxisSectionConfigDataStruct AxisSectionConfigDataStru[AXIS_SECTION_SUM_MAX]; /*定义计轴区段配置数据结构体,cgh-合并CID-2539-1:此处声明不进行初始化,统一放到InitAllStaticDataStr函数中进行初始化,为解决生成内核过大得问题*/
UINT16 LocalCiAxisSectionIdBuf[AXIS_SECTION_SUM_MAX] = {0u}; /*定义本地联锁计轴区段ID映射数组*/
INT16 AxisSectionCurSum = 0; /*逻辑区段当前总数*/
INT16 AxisSectionCurSum = 0; /*计轴区段当前总数*/
UINT16 totalAxisNum = 0u; /*本联锁+相邻联锁的计轴区段ID数量*/
/*
@@ -1151,3 +1151,55 @@ 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,8 @@ 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函数中进行初始化,为解决生成内核过大得问题*/
@@ -320,6 +322,22 @@ UINT8 GetAxisSecBorderProperty(const UINT16 axisSectionId);
* 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
}
@@ -503,19 +503,42 @@ void SetAxisIncludeLogSecArbState(const UINT16 wAxisSectionId, const UINT8 chSta
UINT16* pLogSectionIdBuf = NULL;/*计轴区段包含逻辑区段ID*/
UINT8 chLogSectionSum = 0U;/*计轴区段包含逻辑区段数目*/
UINT8 ii = 0U;
UINT8 cLocalCiId = 0U;
UINT8 chLogSecBelongCi = 0U;
UINT8 chCheckFlag = 0U;
pLogSectionIdBuf = GetAxisSecLogSectionIdBuf(wAxisSectionId);
chLogSectionSum = GetAxisSecLogSectionSum(wAxisSectionId);
cLocalCiId = GetSystemParaLocalCiId();
if (NULL != pLogSectionIdBuf)
{
for (ii = 0U; ii < chLogSectionSum; ii++)
{
if ((LGC_SECTION_ARB_NO == chState) || (LGC_SECTION_ARB_YES == chState))
{
chLogSecBelongCi = GetLogSecBelongCiId(pLogSectionIdBuf[ii]);
chCheckFlag = IsSameLineCI(cLocalCiId, chLogSecBelongCi);
if (SAME_LINE_NO == chCheckFlag)
{
SetLgcArbState(pLogSectionIdBuf[ii], chState);
SetLogSecCbtcArbState(pLogSectionIdBuf[ii], chState); /*互联互通,不同线路设置CBTCARB;用于显示*/
}
else
{
SetLgcArbState(pLogSectionIdBuf[ii], chState);
}
}
else
{
/*不处理*/
}
}
}
else
{
/*不处理*/
}
}
@@ -855,3 +878,48 @@ void SetAxisSecArbStateCC(const UINT16 axisSectionId, const UINT8 arbState)
; /*不设置*/
}
}
/*
*
* void
*
* by cgh 20260327
*/
void AxisSecStateDeal(void)
{
UINT8 cLocalCiId = 0U; /*本地联锁ID*/
UINT16 ii = 0U;
UINT16 wAxisSecSum = 0U; /*本控区计轴区段数量*/
UINT16 wAxisSecId = 0U; /*计轴区段ID*/
UINT8 cAxisSecBlongCiId = 0U; /*计轴区段所属控区*/
UINT8 chAcArbState = 0U; /*计轴区段ARB状态*/
cLocalCiId = GetSystemParaLocalCiId();
wAxisSecSum = GetAxisSecCurSum();
/*遍历本控区计轴区段*/
for (ii = 0U; ii < wAxisSecSum; ii++)
{
wAxisSecId = GetAxisSecId(ii);
cAxisSecBlongCiId = GetAxisSectionBelongCiId(wAxisSecId);
if ((cLocalCiId == cAxisSecBlongCiId) && (0U != cAxisSecBlongCiId))
{
chAcArbState = aam_GetAxisStatusAPI(wAxisSecId);
/* 计轴区段ARB,则逻辑区段ARB */
if (AAM_STATUS_ARB == chAcArbState)
{
/*设置RC计轴区段ARB状态为ARB*/
SetAxisSecArbStateCC(wAxisSecId, AXIS_SECTION_ARB_YES);
}
else
{
/*设置RC计轴区段ARB状态为未ARB*/
SetAxisSecArbStateCC(wAxisSecId, AXIS_SECTION_ARB_NO);
}
}
else
{
; /*不属于本控区,只是异常防护*/
}
}
}
@@ -288,6 +288,14 @@ UINT8 GetAxisSecArbStateCC(const UINT16 axisSectionId);
*/
void SetAxisSecArbStateCC(const UINT16 axisSectionId, const UINT8 arbState);
/*
*
* void
*
* by cgh 20260327
*/
void AxisSecStateDeal(void);
#ifdef __cplusplus
}
#endif
@@ -89,6 +89,9 @@ 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;
/*******************************全局变量声明*******************************/
@@ -1099,7 +1099,6 @@ void RemoveLogSecTrainInfoById(const UINT16 wLogSectionId, const UINT16 wTrnId)
UINT8 chTrainSum = 0U;
UINT8 ii = 0U;
UINT8 chNeedKeepSum = 0U;
LogicTrainResStruct * pLogicTrainInfo = NULL;
wBufIndex = GetlogSectionBufIndex(wLogSectionId); /*获取区段数组下标*/
@@ -1406,7 +1405,7 @@ void AddLogSecTrainResFromCI(const UINT16 wLogSectionId, const UINT16 wTrnId)
if (TRANSMIT_STATE_GOOD == trainTransSta)
{
trainInRoutePos = dsuTrainMinHeadCrossSignal(wTrnId, wRLockBelongRouteId);
trainInRoutePos = dsuTrainMinHeadCrossSignal(wTrnId, wRLockBelongRouteId, CI_ERROR);
if ((ROUTE_AUTOROUTE_NORMAL == autoRouteType)
|| (ROUTE_AUTOROUTE_NORMAL == autoProtRouteType)
|| (ROUTE_AUTOSIGROUTE_YES == (ROUTE_AUTOSIGROUTE_YES & autoSigRouteType))
@@ -1589,7 +1588,6 @@ void ClearLgcSecResTrain(UINT16 wLogSecId)
UINT8 chTrainResSum = 0U;
UINT16 wBufIndex = 0U;
UINT8 ii = 0U;
UINT8 logRouteSum = 0;
UINT16 wTrainId = 0U; /*列车ID*/
UINT16 chFlag = 0U;
UINT8 chNeedKeepSum = 0U;
@@ -1620,7 +1618,8 @@ void ClearLgcSecResTrain(UINT16 wLogSecId)
/*清0防脏*/
for (ii = chNeedKeepSum; ii < LOGIC_SECTION_RES_SUM_MAX; ii++)
{
(void)ComMemSet(&(LogicSectionDataStruCC[wBufIndex].szTrainResData[ii]), (UINT16)sizeof(LogicTrainResStruct), 0U);
/*重置资源信息结构体*/
ResetResInfoStruct(wBufIndex, ii);
}
LogicSectionDataStruCC[wBufIndex].chTrainInfoSum = chNeedKeepSum;
}
@@ -1647,7 +1646,7 @@ void CpyLgcSecResTrain(UINT16 wLogSecId,UINT8 chTrainSum, LogicTrainResStruct *p
}
else
{
(void)ComMemCopy(pstLgcResInfo, (LogicSectionDataStruCC[wBufIndex].szTrainResData), (UINT16)(sizeof(LogicTrainResStruct)*LOGIC_SECTION_RES_SUM_MAX));
(void)ComMemCopy((UINT8*)pstLgcResInfo, (UINT8*)(LogicSectionDataStruCC[wBufIndex].szTrainResData), (UINT16)(sizeof(LogicTrainResStruct)*LOGIC_SECTION_RES_SUM_MAX));
LogicSectionDataStruCC[wBufIndex].chTrainInfoSum = chTrainSum;
}
}
@@ -1774,7 +1773,7 @@ void SetLogSecTrainLockApply(const UINT16 wLogSectionId, const UINT16 wTrnId)
}
else
{
trainInRoutePos = dsuTrainMinHeadCrossSignal(wTrnId, wRLockBelongRouteId);
trainInRoutePos = dsuTrainMinHeadCrossSignal(wTrnId, wRLockBelongRouteId, CI_ERROR);
if ((TRAIN_ENTER_ROUTE_FULL == trainInRoutePos) || (TRAIN_ENTER_ROUTE_TAIL == trainInRoutePos))
{
; /*不处理 V12.0.2变更2*/
@@ -1900,17 +1899,10 @@ UINT8 GetLgcSecResCanAdd(const UINT16 wLogSectionId,const UINT16 wTrnId)
UINT16 wBufIndex = 0u; /*数组下标*/
UINT16 wRLockBelongRouteId = 0U;
UINT16 wRLockStartSignalId = 0U;
UINT16 wPLockStartSignalId = 0U;
UINT16 wPLockEndSignalId = 0U;
UINT16 wRLockLightUpTrainId = 0U;
UINT16 wPLockLightUpTrainId = 0U;
UINT16 wRouteLockOverLapId = 0U;
UINT8 chOverLapBelongCiId = 0U;
UINT8 chTrainCrossPLockStt = 0U;
UINT8 chTrainCrossRLockStt = 0U;
UINT8 cRouteCId = 0u;
UINT8 cLocalCiId = 0u;
UINT8 chLgcResShareFlag = 0U;
UINT8 autoRouteType = 0U;
UINT8 autoSigRouteType = 0U;
UINT8 autoProtRouteType = 0U;
@@ -2895,7 +2887,7 @@ void RemoveLgcSecResTrain(UINT16 wLogSecId, UINT16 wTrainId)
if (wLgcResTrainId == wTrainId)
{
/*删除该列车对应逻辑区段资源*/
(void)ComMemSet((void *)&pstLgcSecInfo[wLgcBufIndex].szTrainResData[jj], (UINT16)sizeof(LogicTrainResStruct), 0U);
ResetResInfoStruct(wLgcBufIndex, jj);
debug_infor_printf((const)"LogSecRes Remove LgcId: %d TrainId:%d Cyc\n"
, wLogSecId
, wTrainId
@@ -2983,7 +2975,7 @@ UINT8 GetBackUpVobcMinTsr(UINT16* minSpeed, UINT16 logSum, UINT16 szLogId[])
{
if (pTsrData[jj].cSpeed < *minSpeed)
{
for (mm == 0U; mm < pTsrData[jj].cLogSecSum; mm++)
for (mm = 0U; mm < pTsrData[jj].cLogSecSum; mm++)
{
for (kk = 0U; kk < logSum; kk++)
{
@@ -3037,7 +3029,7 @@ void SetTsrSum(UINT8 cTsrSum)
*/
TsrDataStruct* GetTsrData(void)
{
return &g_TsrDataStru;
return g_TsrDataStru;
}
/*
@@ -3790,6 +3782,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);
@@ -3811,9 +3806,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);
}
}
}
/** 逻辑区段跳跃锁闭未锁闭*/
@@ -3823,6 +3835,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
{
@@ -4283,7 +4297,7 @@ UINT8 GetLgcArbState(const UINT16 wLgcId)
}
/*
* ARB状态
* ARB状态
* const UINT16 wLgcId, ID
* const UINT8 chArb ARB状态
*
@@ -4384,6 +4398,7 @@ void SetLgcArbStateProc(void)
}
}
}
/*
*
* const UINT16 logSectionId, ID
@@ -4460,7 +4475,6 @@ UINT8 GetLogicSupicTrainStat(UINT16 wLgcId)
UINT8 chIndex = 0u;
UINT8 chRtn = CI_ERROR;
TRAIN_SEQUANCE_s strTmp[SIZE_MAX_TRAINOFAC] = { 0u };
TRAIN_SEQUANCE_s strTmpB = { 0u };
UINT8 chTrainNum = 0u;
chLinkNum = GetSecIntrudeLinkSum(wLgcId);
pLinkId = GetSecIntrudeLinkIdBuf(wLgcId);
@@ -4853,7 +4867,7 @@ UINT8 DelLogSecBelongLogRouteId(const UINT16 logSectionId, const UINT16 wLogRout
}
}
/* 清0防止脏数据*/
(void)ComMemSet(&logRoutBuf[chNeedKeepSum], (UINT16)sizeof(LogSecLockBelLogRouteStruct), 0U);
(void)ComMemSet((UINT8*)&logRoutBuf[chNeedKeepSum], (UINT16)sizeof(LogSecLockBelLogRouteStruct), 0U);
LogicSectionDataStruCC[bufIndex].chLogSecLockBelLogRouteSum = chNeedKeepSum;/*修改所属逻辑进路数量*/
retVal = CI_SUCCESS;
}
@@ -4883,8 +4897,6 @@ UINT8 AddLogSecBelongLogRouteId(const UINT16 logSectionId, const UINT16 wLogRout
LogSecLockBelLogRouteStruct* logRoutBuf = NULL; /*逻辑区段所属逻辑进路数组*/
UINT16 logRoutSum = 0U; /*逻辑区段所属逻辑进路数组数量*/
UINT8 retVal = CI_ERROR;
UINT8 ii = 0U;
UINT8 chNeedKeepSum = 0U;
bufIndex = GetlogSectionBufIndex(logSectionId); /*获取区段数组下标*/
@@ -4980,7 +4992,7 @@ void SetLogSecLogLockState(const UINT16 wLogSectionId, const UINT8 chLogLockStat
{
UINT16 wBufIndex = 0U; /*数组下标*/
UINT16 LogSecLockBelongRouteId = 0U;
UINT8 index = 0U;
wBufIndex = GetlogSectionBufIndex(wLogSectionId); /*获取区段数组下标*/
if (LOGIC_SECTION_SUM_MAX > wBufIndex)
@@ -4998,9 +5010,10 @@ void SetLogSecLogLockState(const UINT16 wLogSectionId, const UINT8 chLogLockStat
else
{
LogicSectionDataStruCC[wBufIndex].chTrainInfoSum = 0U;
(void)CommonMemSet(LogicSectionDataStruCC[wBufIndex].szTrainResData, \
(UINT32)sizeof(LogicSectionDataStruCC[wBufIndex].szTrainResData), \
0U, (UINT32)sizeof(LogicSectionDataStruCC[wBufIndex].szTrainResData));
for(index = 0U; index < LOGIC_SECTION_RES_SUM_MAX; index++)
{
ResetResInfoStruct(wBufIndex, index);
}
}
}
@@ -5184,7 +5197,7 @@ void SetLogSecLogLockStateOtherCi(const UINT16 wLogSectionId, const UINT8 chLogL
{
UINT16 wBufIndex = 0U; /*数组下标*/
UINT8 cLogSecLockState = 0U; /*逻辑区段锁闭状态*/
UINT8 jj = 0U;
wBufIndex = GetlogSectionBufIndex(wLogSectionId); /*获取区段数组下标*/
if (LOGIC_SECTION_SUM_MAX > wBufIndex)
@@ -5199,7 +5212,10 @@ void SetLogSecLogLockStateOtherCi(const UINT16 wLogSectionId, const UINT8 chLogL
{
/*进路锁闭和逻辑锁闭均未锁闭,清除逻辑区段资源列车信息*/
LogicSectionDataStruCC[wBufIndex].chTrainInfoSum = 0U;
(void)CommonMemSet(LogicSectionDataStruCC[wBufIndex].szTrainResData, (UINT32)sizeof(LogicSectionDataStruCC[wBufIndex].szTrainResData), 0U, (UINT32)sizeof(LogicSectionDataStruCC[wBufIndex].szTrainResData));
for (jj = 0U; jj < LOGIC_SECTION_RES_SUM_MAX; jj++)
{
ResetResInfoStruct(wBufIndex, jj);
}
}
else
{
@@ -5647,7 +5663,6 @@ UINT8 GetLogSecLockBelLogRouteBuf(const UINT16 wLgcId,OUT LogSecLockBelLogRouteS
void SetLogSecLockStateHlht(UINT16 wLogSectionId, const UINT8 lockState)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 preLockState = 0u;
bufIndex = GetlogSectionBufIndex(wLogSectionId); /*获取区段数组下标*/
@@ -5715,13 +5730,13 @@ void SetLogSecLockDirHlht(UINT16 wLogSectionId, const UINT8 lockDir)
if (bufIndex < LOGIC_SECTION_SUM_MAX)
{
if (CI_SYSTEM_DIRECTION_NONE == lockDir)
if ((CI_SYSTEM_DIRECTION_UP == lockDir) || (CI_SYSTEM_DIRECTION_DOWN == lockDir))
{
LogicSectionDataStru[bufIndex].LogLockDir = CI_SYSTEM_DIRECTION_NONE;
LogicSectionDataStru[bufIndex].LogLockDir = lockDir;
}
else
{
LogicSectionDataStru[bufIndex].LogLockDir = lockDir;
LogicSectionDataStru[bufIndex].LogLockDir = CI_SYSTEM_DIRECTION_NONE;
}
}
else
@@ -5756,11 +5771,10 @@ void SetLogSecPLockRouteIdHlht(UINT16 wLogSectionId, const UINT16 routeId)
/*
* ID
* UINT16 wLogSectionId, ID
const UINT16 routeId,ID
*
* by 20250117
*/
void SetLogSecRLockRouteIdHlht(UINT16 wLogSectionId, const UINT16 routeId)
void SetLogSecRLockRouteIdHlht(UINT16 wLogSectionId)
{
UINT16 bufIndex = 0u; /*数组下标*/
@@ -6382,10 +6396,6 @@ UINT8 ReqAlignmentInfoCalc(void)
{
break;
}
else
{
/*继续执行*/
}
}
}
else
@@ -6397,3 +6407,248 @@ UINT8 ReqAlignmentInfoCalc(void)
return chRetVal;
}
/*
* ATS的逻辑区段ARB状态
* const UINT16 wLgcId
* const UINT8 chDevType
* LGC_SECTION_ARB_NO ARB
* LGC_SECTION_ARB_YES ARB
* by cgh 20260327
*/
UINT8 GetToAtsLgcArbState(const UINT16 wLgcId,const UINT8 chDevType)
{
UINT8 chReval = LGC_SECTION_ARB_NO;
UINT8 chAcNum = 0U; /*逻辑区段对应计轴区段数目*/
UINT16* pAcId = NULL; /*逻辑区段关联计轴区段ID*/
UINT8 chAcIndex = 0U; /*计轴区段循环索引*/
UINT8 chAcArbState = 0U; /*计轴区段ARB状态*/
chAcNum = GetLgcSecRelativeAxleSecSum(wLgcId);
pAcId = GetLgcSecRltvAxleSecIdBuf(wLgcId);
/*逻辑区段关联计轴区段数据合法*/
if ((0U != chAcNum) && (NULL != pAcId) && ((RC_WORK_MODE_TIOC == chDevType) || (RC_WORK_MODE_CI == chDevType)))
{
/*遍历逻辑区段关联的所有计轴区段*/
for (chAcIndex = 0U; chAcIndex < chAcNum; chAcIndex++)
{
/*当前系统工作模式为RC*/
if (RC_WORK_MODE_TIOC == chDevType)
{
chAcArbState = GetAxisSecArbStateCC(pAcId[chAcIndex]);
}
/*当前系统工作模式为CI*/
else
{
chAcArbState = GetAxisSecArbStateZc(pAcId[chAcIndex]);
}
/* 计轴区段ARB,则逻辑区段ARB */
if (AXIS_SECTION_ARB_YES == chAcArbState)
{
chReval = LGC_SECTION_ARB_YES;
/*找到逻辑区段关联的任意一个计轴区段ARB,则不再继续查找,认为逻辑区段ARB*/
break;
}
else
{
/* 计轴区段非ARB,继续查找 */
;
}
}
}
else
{
/* 数据获取失败 */
}
return chReval;
}
/*
* CBTC_ARB状态
* const UINT16 wLgcId, ID
* 0:
* >0: CBTC_ARB状态
* BY CGH 20260330
*/
UINT8 GetLogSecCbtcArbState(const UINT16 wLgcId)
{
UINT16 bufIndex = LGC_SECTION_ARB_NO; /*数组下标*/
UINT8 retVal = CI_ERROR;
bufIndex = GetlogSectionBufIndex(wLgcId); /*获取区段数组下标*/
if (LOGIC_SECTION_SUM_MAX > bufIndex)
{
retVal = LogicSectionDataStru[bufIndex].chLogSecCbtcArbState;
}
else
{
;
}
return retVal;
}
/*
* CBTC_ARB状态
* const UINT16 wLgcId, ID
* const UINT8 chArb ARB状态
*
* BY CGH 20260330
*/
void SetLogSecCbtcArbState(const UINT16 wLgcId, const UINT8 chArb)
{
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetlogSectionBufIndex(wLgcId); /*获取区段数组下标*/
if ((LOGIC_SECTION_SUM_MAX > bufIndex)
&& ((LGC_SECTION_ARB_NO == chArb) || (LGC_SECTION_ARB_YES == chArb)))
{
LogicSectionDataStru[bufIndex].chLogSecCbtcArbState = chArb;
}
else
{
;
}
}
/*
* PB_TACS_ARB状态
* const UINT16 wLgcId, ID
* 0:
* >0: PB_TACS_ARB状态
* BY CGH 20260330
*/
UINT8 GetLogSecPbTacsArbState(const UINT16 wLgcId)
{
UINT16 bufIndex = LGC_SECTION_ARB_NO; /*数组下标*/
UINT8 retVal = CI_ERROR;
bufIndex = GetlogSectionBufIndex(wLgcId); /*获取区段数组下标*/
if (LOGIC_SECTION_SUM_MAX > bufIndex)
{
retVal = LogicSectionDataStru[bufIndex].chLogSecPbTacsArbState;
}
else
{
;
}
return retVal;
}
/*
* PB_TACS_ARB状态
* const UINT16 wLgcId, ID
* const UINT8 chArb ARB状态
*
* BY CGH 20260330
*/
void SetLogSecPbTacsArbState(const UINT16 wLgcId, const UINT8 chArb)
{
UINT16 bufIndex = 0U; /*数组下标*/
bufIndex = GetlogSectionBufIndex(wLgcId); /*获取区段数组下标*/
if ((LOGIC_SECTION_SUM_MAX > bufIndex)
&& ((LGC_SECTION_ARB_NO == chArb) || (LGC_SECTION_ARB_YES == chArb)))
{
LogicSectionDataStru[bufIndex].chLogSecPbTacsArbState = chArb;
}
else
{
;
}
}
/*
* ATS的逻辑区段ARB状态
*
*
* by cgh 20260330
*/
void SetSendAtsLgcArbState(void)
{
UINT8 chLocalId = 0U; /*本地联锁ID*/
UINT8 chBelongCiId = 0U; /*所属联锁ID*/
UINT16 wLgcNum = 0U; /*逻辑区段数目*/
UINT16 wLgcIndex = 0U; /*逻辑区段索引ID*/
UINT16 wLgcId = 0U; /*逻辑区段ID*/
UINT8 chArbState = 0U; /*ARB状态*/
chLocalId = GetSystemParaLocalCiId();
/* 获取逻辑区段数量 */
wLgcNum = GetLogicSecCurSum();
for (wLgcIndex = 0u; wLgcIndex < wLgcNum; wLgcIndex++)
{
wLgcId = GetLogicSecId(wLgcIndex);
chBelongCiId = GetLogSecBelongCiId(wLgcId);
if ((chLocalId == chBelongCiId) && (0U != chBelongCiId))
{
/*处理CBTC_ARB状态*/
chArbState = GetToAtsLgcArbState(wLgcId, RC_WORK_MODE_CI);
if (LGC_SECTION_ARB_YES == chArbState)
{
SetLogSecCbtcArbState(wLgcId, LGC_SECTION_ARB_YES);
}
else
{
SetLogSecCbtcArbState(wLgcId, LGC_SECTION_ARB_NO);
}
/*处理PB_TACS_ARB状态*/
chArbState = GetToAtsLgcArbState(wLgcId, RC_WORK_MODE_TIOC);
if (LGC_SECTION_ARB_YES == chArbState)
{
SetLogSecPbTacsArbState(wLgcId, LGC_SECTION_ARB_YES);
}
else
{
SetLogSecPbTacsArbState(wLgcId, LGC_SECTION_ARB_NO);
}
}
else
{
; /* 数据获取失败 */
}
}
}
/*
*
* UINT16 logicSectionId ID
* UINT8 index
*
*/
void ResetResInfoStruct(UINT16 logicSectionId, UINT8 index)
{
if (LOGIC_SECTION_SUM_MAX > logicSectionId)
{
if (LOGIC_SECTION_RES_SUM_MAX > index)
{
LogicSectionDataStruCC[logicSectionId].szTrainResData[index].wTrainId = 0U;
LogicSectionDataStruCC[logicSectionId].szTrainResData[index].chLogicResUsable = LOGIC_SECTION_RES_UNUSABLE;
LogicSectionDataStruCC[logicSectionId].szTrainResData[index].chLogicReturnState = LOGIC_SECTION_TRAIN_RETURN_NO;
LogicSectionDataStruCC[logicSectionId].szTrainResData[index].chTrainApplyState = LOGIC_SECTION_TRAIN_APPLY_NO;
LogicSectionDataStruCC[logicSectionId].szTrainResData[index].chLogicUnlockState = LOGIC_SECTION_TRAIN_UNLOCK_NO;
LogicSectionDataStruCC[logicSectionId].szTrainResData[index].dwRcvUnlockCmdCyc = 0U;
}
else
{
/*不处理*/
}
}
else
{
; /*不处理*/
}
}
@@ -75,6 +75,8 @@ typedef struct S_LogicSectionDataStruct
UINT8 chLogicSpksFLockState; /*逻辑区段被SPKS封锁状态 0x55 未封锁 0xaa 封锁*/
UINT8 chLogSecEmergXianSu; /*逻辑区段紧急临时限速*/
UINT8 chLogSecCbtcArbState; /*逻辑区段CBTC_ARB状态*/
UINT8 chLogSecPbTacsArbState; /*逻辑区段PB_TACS_ARB状态*/
} LogicSectionDataStruct;
/*逻辑区段结构体-车车*/
@@ -1310,11 +1312,10 @@ void SetLogSecPLockRouteIdHlht(UINT16 wLogSectionId, const UINT16 routeId);
/*
* ID
* UINT16 wLogSectionId, ID
const UINT16 routeId,ID
*
* by 20250117
*/
void SetLogSecRLockRouteIdHlht(UINT16 wLogSectionId, const UINT16 routeId);
void SetLogSecRLockRouteIdHlht(UINT16 wLogSectionId);
/*
*
@@ -1415,6 +1416,66 @@ void SetLogSecTXOccupyStateCC(const UINT16 logSectionId, const UINT8 curOccupySt
*/
UINT8 ReqAlignmentInfoCalc(void);
/*
* ATS的逻辑区段ARB状态
* const UINT16 wLgcId
* const UINT8 chDevType
* LGC_SECTION_ARB_NO ARB
* LGC_SECTION_ARB_YES ARB
* by cgh 20260327
*/
UINT8 GetToAtsLgcArbState(const UINT16 wLgcId, const UINT8 chDevType);
/*
* CBTC_ARB状态
* const UINT16 wLgcId, ID
* 0:
* >0: CBTC_ARB状态
* BY CGH 20260330
*/
UINT8 GetLogSecCbtcArbState(const UINT16 wLgcId);
/*
* CBTC_ARB状态
* const UINT16 wLgcId, ID
* const UINT8 chArb ARB状态
*
* BY CGH 20260330
*/
void SetLogSecCbtcArbState(const UINT16 wLgcId, const UINT8 chArb);
/*
* PB_TACS_ARB状态
* const UINT16 wLgcId, ID
* 0:
* >0: PB_TACS_ARB状态
* BY CGH 20260330
*/
UINT8 GetLogSecPbTacsArbState(const UINT16 wLgcId);
/*
* PB_TACS_ARB状态
* const UINT16 wLgcId, ID
* const UINT8 chArb ARB状态
*
* BY CGH 20260330
*/
void SetLogSecPbTacsArbState(const UINT16 wLgcId, const UINT8 chArb);
/*
* ATS的逻辑区段ARB状态
*
*
* by cgh 20260330
*/
void SetSendAtsLgcArbState(void);
/*
*
* UINT16 logicSectionId ID
*
* by cgh 20260330
*/
void ResetResInfoStruct(UINT16 logicSectionId, UINT8 index);
#ifdef __cplusplus
}
#endif

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