17 Commits

Author SHA1 Message Date
lh 57e7dbd2cc 每周期都执行切系原因的重置 2026-08-14 11:29:57 +08:00
lh e71ced450f 1.修改远程重启授权原因bug
2.增加暗文日志记录切系原因
3.版本号+1
2026-08-13 18:35:02 +08:00
lh 4608905392 IP配置使用ioctl,宕机后日志发送时判断初始化阶段 2026-08-05 18:30:22 +08:00
lh 50225f68cf 修改2取重传限制次数,根据周期时间决定 2026-08-05 16:04:23 +08:00
lh d718b121de 限制主线程和2乘独立线程2取重传次数 2026-08-03 18:03:35 +08:00
lh f09be247b4 9.11第一次提交,备系非安全升主和限制两个维护终端,待调试 2026-07-30 16:43:19 +08:00
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
99 changed files with 10131 additions and 2041 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>
+14 -3
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 跟随方 跟随方 跟随方发送数据 跟随方运行 跟随方报文 此通信关系中成功发送 */
@@ -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)
@@ -30,6 +30,6 @@
#define VER_INTE_PROJECT 220 /*项目编号*/
#define VER_INTE_PRODUCT 40 /*产品编号*/
#define VER_INTE_EXE 1 /*可执行编号*/
#define VER_INTE_TIME 127 /*集成次数编号*/
#define VER_INTE_TIME 131 /*集成次数编号*/
#endif/*endif of #define _CI_INTEGRATE_CONFIG_H*/
@@ -1629,11 +1629,31 @@ UINT32 GetCiAppData(UINT8 *pCiAppDataPointer)
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-gDyTestNum CRC:%x, Length:%d\n", crcResult, crcLength);
debug_infor_printf((const)"2oo2 RecvCiCmdDataStruCurSum-FollowUpCmd CRC:%x, Length:%d\n", crcResult, crcLength);
}
return curIndex;
}
@@ -2477,7 +2497,27 @@ UINT8 SetCiAppData(const UINT8 *pCiAppDataPointer,const UINT32 len)
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;
}
}
+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
@@ -1193,6 +1193,14 @@ void SwitchDoubleMainProtect(UINT16 switchId);
*/
void FindSwitchPostionCmdOut(UINT16 switchId);
/*
* 功能描述: 更新倒切柜状态
* 参数说明: void
* 返回值
* Create Fan 20260608
*/
void ReverseStateUpdateProc(void);
#ifdef __cplusplus
}
+76 -10
View File
@@ -24,6 +24,7 @@
#include "../IO/DeviceRelayDataProcess.h"
#include "MSCP_APP_API.h"
#include "LightTestButtonDataManage.h"
#include "InterlockLogicManage.h"
extern PlatformToCiDataStruct platformToCiDataStru[PLATFORM_TO_CI_SUM_MAX]; /*引用站台门与CI通信数据结构体*/
extern unsigned long TimeStamp = 0u;
@@ -430,12 +431,10 @@ void InputDataProcess(void)
/*处理设备状态*/
ProcessDeviceLogicState();
/*处理LEU数据*/
ProcessLeuToCiData();
if (RC_WORK_MODE_TIOC == cRcWorkMode)
{
/*处理物理区段上的占用落到计轴区段 */
ProcessPhyOCcStateToAxisSection();
@@ -445,8 +444,10 @@ void InputDataProcess(void)
/* 列车处理 */
TrainMainProc();
cost[5] = MSCP_GetTick();
/*回收列车资源*/
(void)TrainResRecycle();
if (FUNC_SWITCH_ON == chSwitch)
{
/* 列车占压计轴区段计算 */
@@ -521,6 +522,9 @@ void InputDataProcess(void)
/*处理屏蔽门数据*/
ProcessPsdData();
/*新增ATS/ 现地 / 网关一二次命令帧处理*/
AtsFollowUpCmdProcess();
/*处理ATS数据*/
(void)ProcessAtsOrXianDiToCiData();
@@ -2015,6 +2019,22 @@ void ProcessVobcToCiData(void)
}
else if ((LINE_HLHT == chLineIdentity) || (LINE_FAO == chLineIdentity))
{
/*厦门3处理列车非零速信息*/
if (CI_VOBC_TRAIN_ZERO_SPEED_NO == VobcToCiDataStru[ii].chTrainZeroState)
{/*列车非零速*/
SetTrainZeroSpeedState(vobcToCiDataStru[ii].PsdData[jj].PsdId, PSD_TRAIN_ZERO_SPEED_NO); /*设置列车非零速*/
SetStopDetectionState(vobcToCiDataStru[ii].PsdData[jj].PsdId, JXTC_STOP_DETECTION_NO); /*设置屏蔽门未停止间隙探测*/
}
else if (CI_VOBC_TRAIN_ZERO_SPEED_YES == VobcToCiDataStru[ii].chTrainZeroState)
{/*列车零速*/
SetTrainZeroSpeedState(vobcToCiDataStru[ii].PsdData[jj].PsdId, PSD_TRAIN_ZERO_SPEED_YES); /*设置列车零速*/
SetStopDetectionState(vobcToCiDataStru[ii].PsdData[jj].PsdId, JXTC_STOP_DETECTION_NO); /*设置屏蔽门未停止间隙探测*/
}
else
{
/*没有非零速信息时,不处理*/
}
switch (vobcToCiDataStru[ii].PsdData[jj].CmdType)
{
case VOBCTOCI_COMMAND_TYPE_PSDOPEN:
@@ -2050,7 +2070,7 @@ void ProcessVobcToCiData(void)
default:
/*查询命令或错误命令*/
break;
}
}
}
else
{
@@ -4546,6 +4566,42 @@ UINT8 ProcessAtsOrXianDiToCiData(void)
(void)CancelPsdExceptState(CmdDeviceId);
}
break;
case ATS_CMD_CONNECT_ROUTE_RELEASE_ONE: /*联络线接车进路解锁一次*/
belongVirCIid = GetRouteBelongVirCiId(CmdDeviceId);
OrderCheckReVal = CheckOrderWhetherDoing(virCiID, belongVirCIid, cmdType, CmdDeviceId);
if (CI_SUCCESS == OrderCheckReVal)
{
checkRetVal = AFFIRM_SUCCESS;
}
else
{
checkRetVal = AFFIRM_FAIL;
}
SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, RESPONSE_FIRST, checkRetVal, virCiID);
break;
case ATS_CMD_CONNECT_ROUTE_RELEASE_TWO: /*联络线接车进路解锁二次*/
checkRetVal = CheckSecondOrderValid(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, virCiID);
if (CI_SUCCESS == checkRetVal)
{
belongVirCIid = GetRouteBelongVirCiId(CmdDeviceId);
OrderCheckReVal = CheckOrderWhetherDoing(virCiID, belongVirCIid, cmdType, CmdDeviceId);
if (CI_SUCCESS == OrderCheckReVal)
{
checkRetVal = AFFIRM_SUCCESS;
/*联络线接车进路解锁处理*/
ConnectRouteReleaseManage(CmdDeviceId);
}
else
{
checkRetVal = AFFIRM_FAIL;
}
}
else
{
checkRetVal = AFFIRM_FAIL;
}
SetCiSendCmdBackData_OrderBack(commandId, CmdDeviceId, cmdDevType, terminalId, AtsOrXianDiToCiCmdStru[ii].CommandType, RESPONSE_SECOND, checkRetVal, virCiID);
break;
default:
localVirCiType = GetLocalVirCiType(virCiID);
if (CI_TYPE_SCX == localVirCiType)
@@ -4916,6 +4972,9 @@ void ProcessDeviceLogicState(void)
/*倒切设备继电器处理*/
RvrsCutRlyToDvicSttPrc();
}
/*倒切柜的倒切开关/板卡采集状态更新*/
ReverseStateUpdateProc();
}
@@ -6445,9 +6504,14 @@ static void ProcessPsdData(void)
SetStartDetectionState(psdId,JXTC_START_DETECTION_NO);
SetStopDetectionState(psdId,JXTC_STOP_DETECTION_YES);
}
else if(LINE_HLHT == chLineIdentity)
{/*厦门3 HLHT线路,站台无车发送停止探测命令并且屏蔽门设置零速*/
SetStopDetectionState(psdId, JXTC_STOP_DETECTION_YES); /*设置屏蔽门停止间隙探测状态为停止*/
SetTrainZeroSpeedState(psdId, PSD_TRAIN_ZERO_SPEED_YES); /*设置屏蔽门非零速状态为零速*/
}
else
{
;
;/*无处理*/
}
}
else
@@ -6582,7 +6646,7 @@ static void ProcessPsdData(void)
}
}
}
#endif
#endif
curPsdDrvState = GetPsdDriveState(psdId);
SetPsdPreDriveState(psdId,curPsdDrvState);
/*生成本周期PSD的驱动状态*/
@@ -8356,6 +8420,8 @@ void ClearPsdVobcContext(const UINT16 vobcId)
{
; /*不处理*/
}
/*厦门3间隙探测-CI与VOBC通信中断,设置屏蔽门非零速状态为零速*/
PsdDataStru[bufIndex].chTrainZeroSpeedState = PSD_TRAIN_ZERO_SPEED_YES;
}
}
@@ -12793,10 +12859,13 @@ void ProcessIvocToRCData(void)
{
/*不处于MMI本地湿轨,不处理*/
}
SetPbtacsTrainTransState(pIvocToRcDataStru[ii].VobcId, TRAIN_COMM_STATE_GOOD); /*设置与PBTACS车通信正常*/
}
else
{
SetPbtacsTrainTransState(pIvocToRcDataStru[ii].VobcId, TRAIN_COMM_STATE_BAD); /*设置与PBTACS车通信中断(暂不考虑分界点列车的通信状态)*/
/*从PSD数据中删除该VOBC产生的上下文信息*/
ClearPsdVobcContext(pIvocToRcDataStru[ii].VobcId);
ProcessIvocLoseCom(pIvocToRcDataStru[ii]);
@@ -12845,8 +12914,6 @@ static void ClearPsdData(const UINT16 psdId)
UINT8 psdSum = 0u;
UINT16 platformPsdId = 0u;
UINT8 chRcWorkMode = 0u;
chRcWorkMode = GetLocalRcWorkMode();
bufIndex = GetPsdConfigBufIndex(psdId);
if ((0u != psdId) && (PSD_INVALID_ID != psdId)&&(PSD_SUM_MAX > bufIndex))
@@ -12857,8 +12924,7 @@ static void ClearPsdData(const UINT16 psdId)
PsdDataStru[bufIndex].PsdCmd = PSD_DEFAULT_CONTROL_CMD;
PsdDataStru[bufIndex].VOBCDoorState = PSD_DOOR_CLOSEDANDLOCKED_INVALID;
PsdDataStru[bufIndex].psdEditGroupInfo = 0u;/*清除编组信息*/
if (RC_WORK_MODE_TIOC == chRcWorkMode)
{
SetPsdEditGroupInfoDataCC(psdId, PSD_EDIT_GROUP_DEFAULT); /*设置RC的PSD编组信息为默认值*/
+28
View File
@@ -400,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:
@@ -1890,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); /*获取相关继电器总数*/
@@ -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)
{
/*读系统参数配置数据*/
@@ -2011,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
{
; /*不处理*/
@@ -871,6 +871,17 @@ UINT8 InitialSwitchData(void)
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;
@@ -1515,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;
@@ -1717,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;
@@ -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)
+30 -1
View File
@@ -988,7 +988,27 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
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
@@ -1207,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
@@ -1707,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
@@ -2456,6 +2479,12 @@ UINT8 RecordDeviceDataLog(UINT8 Flag)
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;
}
@@ -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
@@ -1175,6 +1175,116 @@ 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
}
@@ -7159,7 +7159,7 @@ UINT8 RouteExceptLastSecOccuClrCheck(UINT16 const routeId)
UINT16 cancleZhaoChaRelayId = 0u; /*取消照查继电器ID*/
UINT8 relayState = 0u; /*继电器采集状态*/
UINT8 sendLevel = ESEND_LEVEL_ATS; /*发送ATS*/
UINT8 chRConnectReleaseFlag = 0U;
/* 区段占用检查 */
if (0u == checkSum)
{
@@ -7211,10 +7211,20 @@ UINT8 RouteExceptLastSecOccuClrCheck(UINT16 const routeId)
}
else
{
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, devId, ETYPE_CANCLE_ZHAOCHA, devState, sendLevel);
/* 失败返回 */
result = CI_ERROR_QXZC;
chRConnectReleaseFlag = GetRouteConnectReleaseFlag(routeId);
if (ROUTE_CONNECT_RELEASE_YES == chRConnectReleaseFlag)
{
/* 通过检查 */
result = CI_SUCCESS;
}
else
{
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, devId, ETYPE_CANCLE_ZHAOCHA, devState, sendLevel);
/* 失败返回 */
result = CI_ERROR_QXZC;
}
}
}
@@ -7802,37 +7812,61 @@ UINT8 OtherCiDevStatusCheck(UINT16 const routeId,const RouteOtherCheckStruct *pO
*/
static UINT8 CheckRelationSignalOnSameOpen(UINT16 const routeId,UINT16 const relationSignalId,UINT8 const devStatus)
{
UINT8 routeState = 0u,routeLeadProperty = 0u;
UINT8 routeState = 0U;
UINT8 routeLeadProperty = 0U;
UINT8 ret = CI_SUCCESS;
UINT8 routeType = 0u; /*进路类型*/
UINT8 relationSignalOpenColor = GetSignalCurColor(relationSignalId);
UINT8 cRouteStartSigOpenColor = 0U; /*进路始端信号机开放颜色*/
UINT8 cRouteToLeadFlag = 0U;
UINT8 chOpenCloseState = 0U;
routeState = GetRouteState(routeId);
routeLeadProperty = GetRouteLeadProperty(routeId);/*获取进路引导属性*/
routeType = GetRouteType(routeId); /*获取进路类型*/
if ((routeState != 0u) && (relationSignalOpenColor != 0u))
if ((routeState != 0U) && (relationSignalOpenColor != 0U))
{
/* 如果信号开放,则检查本进路将要开放的信号是否比当前的开放的级别要高 */
if (SIGNAL_OPEN == GetSignalOpenCloseState(relationSignalOpenColor))
chOpenCloseState = GetSignalOpenCloseState(relationSignalOpenColor);
if (SIGNAL_OPEN == chOpenCloseState)
{
switch (relationSignalOpenColor)
{
case SIGNAL_SHOWCOLOUR_REDYELLOW:
/* 红黄灯,即信号开放必须是引导信号 */
if (((ROUTE_LEAD_PROPERTY_YES == routeLeadProperty) || (ROUTE_LEAD_PROPERTY_CBTC_YES == routeLeadProperty))
&& ((ROUTE_STATE_LEAD_LOCK == routeState)
if ((ROUTE_LEAD_PROPERTY_YES == routeLeadProperty) || (ROUTE_LEAD_PROPERTY_CBTC_YES == routeLeadProperty))
{
/* 进路为可引导*/
if ((ROUTE_STATE_LEAD_LOCK == routeState)
|| (ROUTE_STATE_LEAD_LOCKERR == routeState)
|| (ROUTE_STATE_LEAD_OPEN == routeState)))
{/* 进路为可引导,且进路状态为<引导锁闭>或<引导锁闭异常>或<引导开放> ,即进路将引导开放,关联 */
ret = CI_SUCCESS;
|| (ROUTE_STATE_LEAD_OPEN == routeState))
{
/* 进路状态为<引导锁闭>或<引导锁闭异常>或<引导开放> */
ret = CI_SUCCESS;
}
else
{
cRouteToLeadFlag = GetRouteToLeadFlag(routeId); /*获取引导进路转换标志*/
if ((ROUTE_TO_LEAD_FLAG_YES == cRouteToLeadFlag) &&
((ROUTE_STATE_YUXIAN_LOCK == routeState) || (ROUTE_STATE_NEAR_LOCK == routeState)
|| (ROUTE_STATE_FIRST_LOCKERR == routeState) || (ROUTE_STATE_NEAR_LOCKERR == routeState)))
{
/*列车进路转引导,转换标志有效,列车进路接近锁闭或者预先锁闭或初锁异常或接近锁闭异常可以转引导*/
ret = CI_SUCCESS;
}
else
{
ret = CI_ERROR;
}
}
}
else
{
ret = CI_ERROR;
}
break;
case SIGNAL_SHOWCOLOUR_WHITE:
if (ROUTE_TYPE_DIAOCHE == routeType)
@@ -10844,7 +10878,7 @@ UINT8 CheckRouteZongRenJieFeasibility(const UINT16 routeId)
UINT8 sectionSum = 0u;/*进路包含的物理区段数量*/ /*故障发送级别*/
UINT8 sendLevel = ESEND_LEVEL_ATS; /*发送ATS*/
UINT16 secIdx = 0u;/*进路内包含的物理区段遍历索引变量*/
UINT8 chRouteConnectFlag = 0U;
/*联锁条件检查*/
/* 进路内所有区段锁闭状态【正常锁闭】*/
devId = 0u;
@@ -10967,10 +11001,20 @@ UINT8 CheckRouteZongRenJieFeasibility(const UINT16 routeId)
}
else
{
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, devId, ETYPE_CANCLE_ZHAOCHA, devState, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
chRouteConnectFlag = GetRouteConnectReleaseFlag(routeId);
if (ROUTE_CONNECT_RELEASE_YES == chRouteConnectFlag)
{
/* 通过检查 */
reResult = CI_SUCCESS;
}
else
{
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_RELAY, devId, ETYPE_CANCLE_ZHAOCHA, devState, sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
}
}
}
@@ -6362,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;
}
@@ -6378,98 +6380,27 @@ UINT8 RouteOtherSecAutoUnlockProcess(UINT16 const routeId, UINT16* phySectionId)
reResult = CI_ERROR;
/*返回ID = 0*/
*phySectionId = 0u;
*phySectionId = 0U;
}
}
if(CI_SUCCESS == reResult)
if (CI_SUCCESS == reResult)
{
/*进路为【折返进路】且解锁区段为折返区段*/
if ((routeType == ROUTE_TYPE_RETURN)
&& (nlockSectionId == returnSecId))
/* 判断是否联络线对方区段 */
chPhyOtherLineFlag = GetPhyIsThisLineState(nlockSectionId);
if ((DEV_IS_THIS_LINE_NO == chPhyOtherLineFlag) && (UINT16_MAX == nextSecId) && (ROUTE_TYPE_RETURN != routeType))
{
/*折返解锁*/
/*折返区段【空闲】之前【占用】*/
chPhySecCurMergeState = GetPhySecCurMergeState(returnSecId);
chPhySecPreMergeState = GetPhySecPreMergeState(returnSecId);
if ((SECTION_OCCUPY_NO == chPhySecCurMergeState) &&
(SECTION_OCCUPY_YES == chPhySecPreMergeState))
/*区段不是本线路,且不存在下一个区段,且进路不为折返*/
wFrontPhyId = GetRoutePhySecFrontPhyId(routeId, nlockSectionId);
chPhySecPreMergeState = GetPhySecPreMergeState(wFrontPhyId);
chPhySecCurMergeState = GetPhySecCurMergeState(wFrontPhyId);
/* 前一区段当前空闲,之前占用 */
if ((SECTION_OCCUPY_YES == chPhySecPreMergeState) && (SECTION_OCCUPY_NO == chPhySecCurMergeState))
{
reResult = CI_SUCCESS;
}
else
{
/* 失败返回 */
reResult = CI_ERROR;
*phySectionId = nlockSectionId;
}
if(CI_SUCCESS == reResult)
{
/*折出进路第一个区段【占用】*/
chPhySecCurMergeState = GetPhySecCurMergeState(backSecId);
if (SECTION_OCCUPY_YES == chPhySecCurMergeState)
{
/*折返正常*/
reResult = CI_SUCCESS;
}
else
{
/*折返异常*/
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,backSecId,ETYPE_PS_RUNLOCK_ERROR,chPhySecCurMergeState,sendLevel);
/* 失败返回 */
reResult = RETURN_AUTOLOCK_ERR_EXCEPT;
*phySectionId = nlockSectionId;
}
}
if(CI_SUCCESS == reResult)
{
/*折返进路锁闭时间早于折出进路 且 折出进路状态为【接近锁闭正常】*/
if ((returnRouteLockTime < backRouteLockTime)
&& ((ROUTE_STATE_NEAR_LOCK == backRouteState)
|| (ROUTE_STATE_AUTO_UNLOCK == backRouteState)))
{
reResult = CI_SUCCESS;
*phySectionId = nlockSectionId;
}
else
{
/*折返异常*/
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_ROUTE, wPhySecRLockId,ETYPE_PS_RUNLOCK_ERROR, backRouteState,sendLevel);
/* 失败返回 */
reResult = RETURN_AUTOLOCK_ERR_EXCEPT;
*phySectionId = nlockSectionId;
}
}
}
else
{
/*正常解锁*/
/*当前区段之前【当前空闲】【之前占用】*/
chPhySecCurMergeState = GetPhySecCurMergeState(nlockSectionId);
chPhySecPreMergeState = GetPhySecPreMergeState(nlockSectionId);
if ((SECTION_OCCUPY_NO == chPhySecCurMergeState) &&
(SECTION_OCCUPY_YES == chPhySecPreMergeState))
{
reResult = CI_SUCCESS;
}
else
{
/* 失败返回 */
reResult = CI_ERROR;
*phySectionId = nlockSectionId;
}
if(CI_SUCCESS == reResult)
{
/* 下一区段【占用】*/
chPhySecCurMergeState = GetPhySecCurMergeState(nextSecId);
if (SECTION_OCCUPY_YES == chPhySecCurMergeState)
chPhySecPreMergeState = GetPhySecPreMergeState(nlockSectionId);
chPhySecCurMergeState = GetPhySecCurMergeState(nlockSectionId);
/* 待解锁区段当前空闲,之前占用 */
if ((SECTION_OCCUPY_YES == chPhySecPreMergeState) && (SECTION_OCCUPY_NO == chPhySecCurMergeState))
{
/*正常解锁区段*/
reResult = CI_SUCCESS;
@@ -6477,59 +6408,171 @@ UINT8 RouteOtherSecAutoUnlockProcess(UINT16 const routeId, UINT16* phySectionId)
}
else
{
if (validReturnSigId > 0u)/*通过进路转折返进路*/
{
/*折出进路第一个区段占用*/
chPhySecCurMergeState = GetPhySecCurMergeState(backSecId);
/* 失败返回 */
reResult = CI_ERROR;
*phySectionId = nlockSectionId;
}
}
else
{
/* 失败返回 */
reResult = CI_ERROR;
*phySectionId = nlockSectionId;
}
if (SECTION_OCCUPY_YES == chPhySecCurMergeState)
{
/*折返正常*/
reResult = CI_SUCCESS;
}
else
{
/*折返异常*/
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,backSecId,ETYPE_PS_RUNLOCK_ERROR, chPhySecCurMergeState,sendLevel);
/* 失败返回 */
reResult = RETURN_AUTOLOCK_ERR_EXCEPT;
*phySectionId = nlockSectionId;
}
if(CI_SUCCESS == reResult)
{
/*折返进路锁闭时间早于折出进路 且 折出进路状态为【接近锁闭正常】*/
if ((((INT32)(backRouteLockTime- returnRouteLockTime)) > 0 )
&&(backRouteState == ROUTE_STATE_NEAR_LOCK))
{
reResult = CI_SUCCESS;
*phySectionId = nlockSectionId;
}
else
{
/*折返异常*/
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_ROUTE, wPhySecRLockId,ETYPE_PS_RUNLOCK_ERROR, backRouteState,sendLevel);
/* 失败返回 */
reResult = RETURN_AUTOLOCK_ERR_EXCEPT;
*phySectionId = nlockSectionId;
}
}
}
else
{
/*进路为【折返进路】且解锁区段为折返区段*/
if ((ROUTE_TYPE_RETURN == routeType)
&& (nlockSectionId == returnSecId))
{
/*折返解锁*/
/*折返区段【空闲】之前【占用】*/
chPhySecCurMergeState = GetPhySecCurMergeState(returnSecId);
chPhySecPreMergeState = GetPhySecPreMergeState(returnSecId);
if ((SECTION_OCCUPY_NO == chPhySecCurMergeState) &&
(SECTION_OCCUPY_YES == chPhySecPreMergeState))
{
reResult = CI_SUCCESS;
}
else
{
/* 失败返回 */
reResult = CI_ERROR;
*phySectionId = nlockSectionId;
}
if (CI_SUCCESS == reResult)
{
/*折出进路第一个区段【占用】*/
chPhySecCurMergeState = GetPhySecCurMergeState(backSecId);
if (SECTION_OCCUPY_YES == chPhySecCurMergeState)
{
/*折返正常*/
reResult = CI_SUCCESS;
}
else
{/*通过进路解锁异常*/
/*下一区段【空闲】(飞车)*/
/* 解锁异常 */
{
/*折返异常*/
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_PHYSEC,nextSecId,ETYPE_PS_AUNLOCK_ERROR, chPhySecCurMergeState,sendLevel);
SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, backSecId, ETYPE_PS_RUNLOCK_ERROR, chPhySecCurMergeState, sendLevel);
/* 失败返回 */
reResult = RETURN_AUTOLOCK_ERR_EXCEPT;
*phySectionId = nlockSectionId;
}
}
if (CI_SUCCESS == reResult)
{
/*折返进路锁闭时间早于折出进路 且 折出进路状态为【接近锁闭正常】*/
if ((returnRouteLockTime < backRouteLockTime)
&& ((ROUTE_STATE_NEAR_LOCK == backRouteState)
|| (ROUTE_STATE_AUTO_UNLOCK == backRouteState)))
{
reResult = CI_SUCCESS;
*phySectionId = nlockSectionId;
}
else
{
/*折返异常*/
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, wPhySecRLockId, ETYPE_PS_RUNLOCK_ERROR, backRouteState, sendLevel);
/* 失败返回 */
reResult = RETURN_AUTOLOCK_ERR_EXCEPT;
*phySectionId = nlockSectionId;
}
}
}
else
{
/*正常解锁*/
/*当前区段之前【当前空闲】【之前占用】*/
chPhySecCurMergeState = GetPhySecCurMergeState(nlockSectionId);
chPhySecPreMergeState = GetPhySecPreMergeState(nlockSectionId);
if ((SECTION_OCCUPY_NO == chPhySecCurMergeState) &&
(SECTION_OCCUPY_YES == chPhySecPreMergeState))
{
reResult = CI_SUCCESS;
}
else
{
/* 失败返回 */
reResult = CI_ERROR;
*phySectionId = nlockSectionId;
}
if (CI_SUCCESS == reResult)
{
/* 下一区段【占用】*/
chPhySecCurMergeState = GetPhySecCurMergeState(nextSecId);
if (SECTION_OCCUPY_YES == chPhySecCurMergeState)
{
/*正常解锁区段*/
reResult = CI_SUCCESS;
*phySectionId = nlockSectionId;
}
else
{
if (0U < validReturnSigId)/*通过进路转折返进路*/
{
/*折出进路第一个区段占用*/
chPhySecCurMergeState = GetPhySecCurMergeState(backSecId);
if (SECTION_OCCUPY_YES == chPhySecCurMergeState)
{
/*折返正常*/
reResult = CI_SUCCESS;
}
else
{
/*折返异常*/
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, backSecId, ETYPE_PS_RUNLOCK_ERROR, chPhySecCurMergeState, sendLevel);
/* 失败返回 */
reResult = RETURN_AUTOLOCK_ERR_EXCEPT;
*phySectionId = nlockSectionId;
}
if (CI_SUCCESS == reResult)
{
/*折返进路锁闭时间早于折出进路 且 折出进路状态为【接近锁闭正常】*/
if (0 < (((INT32)(backRouteLockTime - returnRouteLockTime)))
&& (ROUTE_STATE_NEAR_LOCK == backRouteState))
{
reResult = CI_SUCCESS;
*phySectionId = nlockSectionId;
}
else
{
/*折返异常*/
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_ROUTE, wPhySecRLockId, ETYPE_PS_RUNLOCK_ERROR, backRouteState, sendLevel);
/* 失败返回 */
reResult = RETURN_AUTOLOCK_ERR_EXCEPT;
*phySectionId = nlockSectionId;
}
}
}
else
{/*通过进路解锁异常*/
/*下一区段【空闲】(飞车)*/
/* 解锁异常 */
/* 记录故障码 */
SetErrorData(functionId, CI_DEVICE_TYPE_PHYSEC, nextSecId, ETYPE_PS_AUNLOCK_ERROR, chPhySecCurMergeState, sendLevel);
/* 失败返回 */
reResult = RETURN_AUTOLOCK_ERR_EXCEPT;
*phySectionId = nlockSectionId;
}
}
}
}
}
}
return reResult;
}
@@ -7044,6 +7087,7 @@ UINT8 RouteCancelLogicProcess(UINT16 const routeId)
/*故障发送级别*/
UINT8 sendLevel = ESEND_LEVEL_ATS; /*发送ATS*/
UINT8 cRouteType = 0U; /*进路类型*/
UINT8 chRConnectReleaseFlag = 0U;
/*联锁条件检查*/
/* 进路内所有区段锁闭状态【正常锁闭】*/
@@ -7131,10 +7175,20 @@ UINT8 RouteCancelLogicProcess(UINT16 const routeId)
}
else
{
/* 记录故障码 */
SetErrorData(functionId,CI_DEVICE_TYPE_RELAY,devId,ETYPE_CANCLE_ZHAOCHA,devState,sendLevel);
/* 失败返回 */
reResult = CI_ERROR;
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);
/* 失败返回 */
reResult = CI_ERROR;
}
}
}
@@ -13105,4 +13159,84 @@ 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
}
@@ -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
+60 -6
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
{
@@ -3416,4 +3416,58 @@ UINT8 GetPsdStateToVobc(const UINT16 doorId)
}
}
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;
}
+21 -3
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车门状态信息
@@ -1185,6 +1186,23 @@ UINT8 SetIBPPressCycNum(const UINT16 doorId, const UINT32 startCycNum);
*
*/
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
+5 -1
View File
@@ -17,7 +17,7 @@
/*屏蔽门总数最大值*/
#define PSD_SUM_MAX ((UINT16)150U) /*定义屏蔽门数量最大值*/
#define PSD_SUM_MAX ((UINT16)200U) /*定义屏蔽门数量最大值*/
/*和屏蔽门关联的出站进路数目最大值*/
#define RALATED_OUT_STATION_ROUTE_SUM_MAX ((UINT16)10U) /*屏蔽门关联的出站进路数目最大值*/
@@ -228,4 +228,8 @@
#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
@@ -164,6 +164,8 @@
#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) /*物理区段征用申请*/
@@ -246,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) /*进路始端信号机开放*/
@@ -469,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
+665 -10
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,21 +455,51 @@ UINT8 ParseAtsOrXianDiToCiDataFrame(const UINT8* dataBuf, const UINT16 dataLengt
}
if (CI_SUCCESS == chRetVal)
/*校验数据长度*/
if ((hlhtGalHead.totalDataLen != ii - (UINT16)31U) || (dataLength != hlhtGalHead.totalDataLen+ (UINT16)31U))
{
/*校验数据长度*/
if (hlhtGalHead.totalDataLen != ii - 31U)
{
/* 31为应用数据帧头长度 */
chRetVal = CI_ERROR;
/* 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;
@@ -3622,7 +3776,8 @@ UINT8 ReciveAtsCmdDeal(const UINT8* dataBuf, UINT16* dataIndex,const UINT16 wDat
}
if (CI_ERROR == chRetVal)
{/*包内有数据错误,丢包处理*/
{
/*包内有数据错误,丢包处理*/
/*清除这本包数据*/
ToaClearCmd();
commandTotalSum = 0u;
@@ -3930,4 +4085,504 @@ 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
+158 -3
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 }; /*平台心跳帧数据结构*/
@@ -4338,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();
@@ -4657,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);
@@ -5549,4 +5577,131 @@ 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
+18 -17
View File
@@ -87,23 +87,24 @@
#define CI_TO_AXIS_DATA_LEN_MAX ((UINT16)3000) /*联锁到AXIS组包数据最大值*/
/*CI 和 CIM*/
#define CI_TO_CIM_DATA_LEN_MAX ((UINT16)5000) /*CI到CIM数据最大值*/
#define CI_TO_AIM_DATA_LEN_MAX ((UINT16)5000) /*CI到AIM数据最大值*/
#define CIM_INFO_RCI_TO_ATS_DATA ((UINT16)0x2001) /*发送CIM ATS状态信息*/
#define CIM_INFO_ATS_TO_RCI_DATA ((UINT16)0x2002) /*发送CIM ATS状态信息*/
#define CIM_INFO_VER_INFO ((UINT16)0x2003) /*发送CIM版本号信息*/
#define CIM_INFO_COMM_STATE ((UINT16)0x2004) /*发送CIM设备通信状态信息*/
#define CIM_INFO_SIGNAL_DS_STATE ((UINT16)0x2005) /*发送CIM信号机断丝状态信息*/
#define CIM_INFO_RELAY_DRVANDCOLLDEF ((UINT16)0x2006) /*发送CIM继电器驱动回采不一致报警*/
#define CIM_INFO_PSD_ALARM ((UINT16)0x2007) /*发送CIM屏蔽门报警帧类型*/
#define CIM_INFO_DEVICE_STATE ((UINT16)0x2008) /*发送CIM设备状态信息*/
#define CIM_INFO_MAINTENANCE ((UINT16)0x2009) /*发送CIM维护信息*/
#define CIM_INFO_LEU_STATE ((UINT16)0x200A) /*发送CIMLEU状态*/
#define CIM_INFOR_RELAY_HUNXIAN_STATE ((UINT16)0x200F) /*发送CIM继电器混线状态信息*/
#define CIM_INFO_SIGNAL_DRIVOUT ((UINT16)0x2010) /*发送CIM信号机驱动超时信息*/
#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 CI_TO_CIM_DATA_LEN_MAX ((UINT16)5000) /*CI到CIM数据最大值*/
#define CI_TO_AIM_DATA_LEN_MAX ((UINT16)5000) /*CI到AIM数据最大值*/
#define CIM_INFO_RCI_TO_ATS_DATA ((UINT16)0x2001) /*发送CIM ATS状态信息*/
#define CIM_INFO_ATS_TO_RCI_DATA ((UINT16)0x2002) /*发送CIM ATS状态信息*/
#define CIM_INFO_VER_INFO ((UINT16)0x2003) /*发送CIM版本号信息*/
#define CIM_INFO_COMM_STATE ((UINT16)0x2004) /*发送CIM设备通信状态信息*/
#define CIM_INFO_SIGNAL_DS_STATE ((UINT16)0x2005) /*发送CIM信号机断丝状态信息*/
#define CIM_INFO_RELAY_DRVANDCOLLDEF ((UINT16)0x2006) /*发送CIM继电器驱动回采不一致报警*/
#define CIM_INFO_PSD_ALARM ((UINT16)0x2007) /*发送CIM屏蔽门报警帧类型*/
#define CIM_INFO_DEVICE_STATE ((UINT16)0x2008) /*发送CIM设备状态信息*/
#define CIM_INFO_MAINTENANCE ((UINT16)0x2009) /*发送CIM维护信息*/
#define CIM_INFO_LEU_STATE ((UINT16)0x200A) /*发送CIMLEU状态*/
#define CIM_INFOR_RELAY_HUNXIAN_STATE ((UINT16)0x200F) /*发送CIM继电器混线状态信息*/
#define CIM_INFO_SIGNAL_DRIVOUT ((UINT16)0x2010) /*发送CIM信号机驱动超时信息*/
#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与其他系统单网通信正常*/
File diff suppressed because it is too large Load Diff
@@ -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
@@ -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)
{
@@ -1256,6 +1256,8 @@ UINT8 PackCiToOtherSysData(void)
PackCiToCimFlyProtectData();
/*发送维护机IO双系采集不一致报警*/
PackCiToCimCollDiffData();
/*发送道岔冗余采集报警*/
PackCiToCimSwitchRedunAlarmData();
/*发送给AIM退出运营信息*/
AIMOutput();
/*发送给维护机执行单元报警信息*/
@@ -1584,6 +1584,7 @@ static UINT8 ParseVobcToCiDataFrameHLHT(const UINT8* dataBuf, const UINT16 dataL
UINT16 wMsgLen = 0U; /*应用数据长度*/
UINT32 dwCiAndVobcTransBadTime = 0U; /*ci和VOBC通信中断时间*/
UINT32 dwAppCycleTime = 0U; /*ci周期*/
UINT8 trainZeroSpeedState = 0U; /*列车零速状态*/
ci_vobcPrtclVersion = GetVersionOfVOBCToCI();
vobcName = (CI_SYSTEM_TYPE_VOBC)*256U + systemId;
@@ -1769,7 +1770,6 @@ static UINT8 ParseVobcToCiDataFrameHLHT(const UINT8* dataBuf, const UINT16 dataL
ii += 4U;
vobcToCiDataStru->signalID = signalId; /*将信号机ID保存到结构体*/
}
else
{
@@ -1784,6 +1784,23 @@ static UINT8 ParseVobcToCiDataFrameHLHT(const UINT8* dataBuf, const UINT16 dataL
vobcToCiDataStru->ComStartCycle = Get2oo2CurCycleNum();
}
break;
case VOBC_CI_INFO_TYPE_MANU_DEFINED:
{/*只解析报文内容*/
/*列车零速状态*/
trainZeroSpeedState = dataBuf[ii];
ii += 1U;
if ((CI_VOBC_TRAIN_ZERO_SPEED_YES == trainZeroSpeedState) || (CI_VOBC_TRAIN_ZERO_SPEED_NO == trainZeroSpeedState))
{
vobcToCiDataStru->chTrainZeroState = trainZeroSpeedState;
}
else
{
retVal = CI_ERROR;
}
ii += 9U; /*预留*/
}
break;
case VOBC_CI_INFO_TYPE_BLOCLINK: /*点连式信息帧*/
{
retVal = ParseVobcBlocLinkData(&dataBuf[ii], wMsgLen-4U, vobcToCiDataStru);
@@ -267,6 +267,9 @@
#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" {
+248 -28
View File
@@ -393,13 +393,10 @@ UINT8 RelayInit(CHAR* FSName)
debug_infor_printf((const)"ReverseCutConfigDataStructInit fail.\r\n");
}
if (RC_WORK_MODE_TIOC == cLocalWorkType)
funcRtn *= GatewayConfigDataStructInit(FSName);
if (0u == funcRtn)
{
funcRtn *= GatewayConfigDataStructInit(FSName);
if (0u == funcRtn)
{
debug_infor_printf((const)"GatewayConfigDataStructInit fail.\r\n");
}
debug_infor_printf((const)"GatewayConfigDataStructInit fail.\r\n");
}
/********************************************************************************
@@ -518,6 +515,12 @@ UINT8 RelayInit(CHAR* FSName)
debug_infor_printf((const)"AxisSecProtectSwitchInit fail.\r\n");
}
/* 倒切配置数据---在可能配置倒切的设备初始化后 */
funcRtn *= ReverseSwitchConfigDataStructInit(FSName);
if (0u == funcRtn)
{
debug_infor_printf((const)"ReverseSwitchConfigDataStructInit fail.\r\n");
}
return funcRtn;
}
@@ -1474,7 +1477,7 @@ UINT8 SglCfgDtStruFromDquSignalStr(DSU_SIGNAL_STRU* pSgnl,SignalConfigDataStruct
pSgnlCfgDtStr->startSigRouBuf[pSgnlCfgDtStr->startSigRouSum] = pCurrentRouteStru->wId;
pSgnlCfgDtStr->startSigRouSum ++;
if (0u==(pCurrentRouteStru->wRouteType & 0x0200u))
if (0u==(pCurrentRouteStru->dwRouteType & 0x0200u))
{/*非ZC自动办理的进路*/
pSgnlCfgDtStr->startSigCiRouteSum++;
}
@@ -1730,7 +1733,7 @@ UINT8 SwitchCfgDtStruFromDquPointStr(DSU_POINT_STRU* pPoint,SwitchConfigDataStru
UINT16 i=0u;
UINT16 j=0u;
UINT8 rtnvalue = 0u;
UINT8 CiPattern = 0u;
/*入口参数防护*/
if((NULL == pPoint) || (NULL == pSwitchCfgDtStr))
@@ -1745,15 +1748,25 @@ UINT8 SwitchCfgDtStruFromDquPointStr(DSU_POINT_STRU* pPoint,SwitchConfigDataStru
if (1u == rtnvalue)
{
/*冗余采集相关变量初始化为默认值*/
CiPattern = GetLocalCiPattern();
pSwitchCfgDtStr->RedunCollCfg = REDUN_COLL_NO;
for (i = 0u; i < SWITCH_REDUN_COLL_MAX; i++)
{
pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunDb1RelayId = 0u;
pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunDb2RelayId = 0u;
pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunFb1RelayId = 0u;
pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunFb2RelayId = 0u;
}
pSwitchCfgDtStr->SwitchId = pPoint->wId;
pSwitchCfgDtStr->BelongCiId = (UINT8)pPoint->wManagePhysicalCI;
pSwitchCfgDtStr->BelongVirCI = (UINT8)pPoint->wBelongVirCI;/*所属虚拟联锁编号*/
pSwitchCfgDtStr->dwSwitchKilo = pPoint->dwPointKilo; /* 公里标 */
pSwitchCfgDtStr->chKiloType = pPoint->dwPointKiloPlueMinusSign;
if (pSwitchCfgDtStr->SwitchId < SWITCH_SUM_MAX)
pSwitchCfgDtStr->wReverseBoardId = 0U;/*初始化无倒切*/
if (SWITCH_SUM_MAX > pSwitchCfgDtStr->SwitchId)
{
/*将OC配置表数据存储到道岔配置数据结构体*/
rtnvalue = SwitchCfgDtStruFromOCconfigStr(pSwitchCfgDtStr);
@@ -1784,9 +1797,27 @@ UINT8 SwitchCfgDtStruFromDquPointStr(DSU_POINT_STRU* pPoint,SwitchConfigDataStru
pSwitchCfgDtStr->ZDbRelayId = (RelayData.pRelayPointStr + j)->wRelayZongDingBiaoId;
pSwitchCfgDtStr->ZFbRelayId = (RelayData.pRelayPointStr + j)->wRelayZongFanBiaoId;
pSwitchCfgDtStr->DFHRelayId = (RelayData.pRelayPointStr + j)->wDFHId;
pSwitchCfgDtStr->wShadowDbRelayId = (RelayData.pRelayPointStr + j)->wRelayShadowDingBiaoId;
pSwitchCfgDtStr->wShadowFbRelayId = (RelayData.pRelayPointStr + j)->wRelayShadowFanBiaoId;
if (pSwitchCfgDtStr->SwitchId > 0u)
for (i = 0u; i < SWITCH_REDUN_COLL_MAX; i++)
{
if ((0u == pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunDb1RelayId)
&& (0u == pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunDb2RelayId)
&& (0u == pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunFb1RelayId)
&& (0u == pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunFb2RelayId))
{
pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunDb1RelayId = (RelayData.pRelayPointStr + j)->wRelayRedunDB1Id;
pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunDb2RelayId = (RelayData.pRelayPointStr + j)->wRelayRedunDB2Id;
pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunFb1RelayId = (RelayData.pRelayPointStr + j)->wRelayRedunFB1Id;
pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunFb2RelayId = (RelayData.pRelayPointStr + j)->wRelayRedunFB2Id;
break;
}
else
{
/*继续遍历*/
}
}
if (0u < pSwitchCfgDtStr->SwitchId)
{
if (0u == pSwitchCfgDtStr->DbRelayId)
{
@@ -1814,7 +1845,6 @@ UINT8 SwitchCfgDtStruFromDquPointStr(DSU_POINT_STRU* pPoint,SwitchConfigDataStru
DebugPrintAppError(ERROR_SWITCH_FCJ_NOT_CONFIG, CI_DEVICE_TYPE_SWITCH, (UINT32)(pSwitchCfgDtStr->SwitchId), PRINT_ONCE);
}
}
break;
}
}
@@ -1833,6 +1863,31 @@ UINT8 SwitchCfgDtStruFromDquPointStr(DSU_POINT_STRU* pPoint,SwitchConfigDataStru
}
}
}
if (CI_PATTERN_FULL_ELECTRONIC == CiPattern)
{
pSwitchCfgDtStr->RedunCollCfg = REDUN_COLL_YES;
for (i = 0u; i < SWITCH_REDUN_COLL_MAX; i++)
{
if ((0u == pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunDb1RelayId)
|| (0u == pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunDb2RelayId)
|| (0u == pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunFb1RelayId)
|| (0u == pSwitchCfgDtStr->RedunCollRelayStru[i].wRedunFb2RelayId))
{
/*冗余采集继电器无效,不具备冗余采集*/
pSwitchCfgDtStr->RedunCollCfg = REDUN_COLL_NO;
break;
}
else
{
/*全电子联锁,冗余采集继电器有效,具备冗余采集*/
}
}
}
else
{
/*传统计算机联锁不支持道岔冗余采集*/
}
}
}
return rtnvalue;
@@ -3809,6 +3864,7 @@ UINT8 PsdCfgDtStruFromDquEmergStr(DSU_SCREEN_STRU * pScreen,PsdConfigDataStruct*
pPsdCfgDtStr->VirtualAttribute = PSD_VIRTUAL_ATTR_YES; /*初始化为虚拟属性*/
pPsdCfgDtStr->chPsdControlType = PSD_CONTROL_TYPE_RCI; /*初始化为RCI控制*/
pPsdCfgDtStr->wIbpRelayId = 0U;
pPsdCfgDtStr->wReverseBoardId = 0U;/*初始化无倒切*/
if ((UINT16_MAX != pScreen->wLocalPlatformId) && (0U != pScreen->wLocalPlatformId))
{
stationId = dsuStaticHeadStru.pStationStru[dsuStationIndex[pScreen->wLocalPlatformId]].wStationID;
@@ -5021,12 +5077,12 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS
if ((CI_ERROR != ciType)&&(CI_ERROR!= rtnvalue))
{
/*进路属性*/
if (0x01u == (pDsuRouteStr->wRouteType & 0x01u))
if (0x01u == (pDsuRouteStr->dwRouteType & 0x01u))
{
/*进路类型为列车进路*/
pRouteCfgDtStr->RouteType = ROUTE_TYPE_LIECHE;
}
else if (0x02u == (pDsuRouteStr->wRouteType & 0x02u))
else if (0x02u == (pDsuRouteStr->dwRouteType & 0x02u))
{
/*进路类型为折返进路*/
pRouteCfgDtStr->RouteType = ROUTE_TYPE_RETURN;
@@ -5040,16 +5096,16 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS
{
}
}
else if (0x0100u == (pDsuRouteStr->wRouteType & 0x0100u))
else if (0x0100u == (pDsuRouteStr->dwRouteType & 0x0100u))
{
/*进路类型为调车进路*/
pRouteCfgDtStr->RouteType = ROUTE_TYPE_DIAOCHE;
}
else if (0u == pDsuRouteStr->wRouteType)
else if (0u == pDsuRouteStr->dwRouteType)
{
pRouteCfgDtStr->RouteType = 0u;
}
else if (0u != (0xffu&pDsuRouteStr->wRouteType))
else if (0u != (0xffu&pDsuRouteStr->dwRouteType))
{
/*类型不为0,且低字节不为0,进路类型为列车进路*/
pRouteCfgDtStr->RouteType = ROUTE_TYPE_LIECHE;
@@ -5062,7 +5118,7 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS
/*设置配置进路类型*/
pRouteCfgDtStr->ConfigRouteType = pRouteCfgDtStr->RouteType;
/*车辆段折返进路,调整配置进路类型*/
if (0x02u == (pDsuRouteStr->wRouteType & 0x02u))
if (0x02u == (pDsuRouteStr->dwRouteType & 0x02u))
{
pRouteCfgDtStr->ConfigRouteType = ROUTE_TYPE_RETURN;
}
@@ -5070,7 +5126,7 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS
{
}
if (0x0800u == (pDsuRouteStr->wRouteType & 0x0800u))
if (0x0800u == (pDsuRouteStr->dwRouteType & 0x0800u))
{ /*风井进路*/
pRouteCfgDtStr->AirShaftRouteType = ROUTE_TYPE_AIRSHAFT;
}
@@ -5079,7 +5135,7 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS
}
/*自动触发进路属性*/
if (0x1000u == (pDsuRouteStr->wRouteType & 0x1000u))
if (0x1000u == (pDsuRouteStr->dwRouteType & 0x1000u))
{/*自动触发进路*/
pRouteCfgDtStr->AutoTriggerType = ROUTE_TYPE_AUTO_TRIGGER;
}
@@ -5089,7 +5145,7 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS
/*设置进路入库属性*/
pRouteCfgDtStr->cRouteRukuProperty = ROUTE_RUKU_PROPERTY_NO;
if (0x0010U == (pDsuRouteStr->wRouteType & 0x0010U))
if (0x0010U == (pDsuRouteStr->dwRouteType & 0x0010U))
{
pRouteCfgDtStr->cRouteRukuProperty = ROUTE_RUKU_PROPERTY_YES;
}
@@ -5108,13 +5164,22 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS
{
}
/*进路联挂属性*/
if (0x8000U == (pDsuRouteStr->wRouteType & 0x8000U))
if (0x8000U == (pDsuRouteStr->dwRouteType & 0x8000U))
{
pRouteCfgDtStr->chRouteCouplinkType = ROUTE_TYPE_COUPLINK;
}
else
{
}
/*进路联络线属性*/
if (0x10000U == (pDsuRouteStr->dwRouteType & 0x10000U))
{
pRouteCfgDtStr->chRouteConnectType = ROUTE_TYPE_CONNECT;
}
else
{
}
/*自动进路属性*/
@@ -6139,7 +6204,7 @@ UINT8 RouteCfgDtStruFrmLSRouteStr( LS_RouteStruct * pLSRouteStr,RouteConfigDataS
{
routeEndSignal =dsuStaticHeadStru.pRouteStru[dsuRouteIndex[LSData.pLSRouteStr[i].wRouteId]].wEndSignalId;
if((routeStartSignal == routeEndSignal) &&
(0x02u == (dsuStaticHeadStru.pRouteStru[dsuRouteIndex[LSData.pLSRouteStr[i].wRouteId]].wRouteType & 0x02u)))
(0x02u == (dsuStaticHeadStru.pRouteStru[dsuRouteIndex[LSData.pLSRouteStr[i].wRouteId]].dwRouteType & 0x02u)))
{/*此条折返进路的终端信号机为当前进路的始端信号机*/ /*风井折返进路和普通折返进路*/
if(ROUTE_SIGNAL_OPPOSED_ROUTE_SUM_MAX > index)
{
@@ -11644,6 +11709,162 @@ UINT8 ReverseCutCfgDtStruFromDquStr(Relay_ReverseCutStruct* pReverseCutRelay, Re
return rtnvalue;
}
/*********************************************
*----
*FSName文件指针
*01
*********************************************/
UINT8 ReverseSwitchConfigDataStructInit(CHAR * FSName)
{
UINT8 rtnvalue = 0u;
UINT8 callFun = 0u;
UINT16 i = 0u;
if (NULL != FSName)
{
callFun = InitRelay_ReverseSwitchStru(FSName);
callFun *= InitRelay_ReverseBoardStru(FSName);
}
else
{
rtnvalue = 0u;
}
/*电子地图初始化失败,函数失败退出*/
if (0u == callFun)
{
rtnvalue = 0u;
}
else
{
rtnvalue = 1u;
}
if ((1u == rtnvalue)&&(CI_SUM_MAX > RelayDataLen.RelayReverseSwitchStrLen))
{
dquCICfgDtStr.wRelayReverseSwitchStrLen = RelayDataLen.RelayReverseSwitchStrLen;
for (i = 0u; i<RelayDataLen.RelayReverseSwitchStrLen; i++)
{
rtnvalue &= ReverseSiwtchCfgDtStruFromDquStr(RelayData.pRelayReverseSwitchStr + i, &dquCICfgDtStr.stReverseSwitchCfgDtStr[i]);
if (1U != rtnvalue)
{
break;
}
}
}
else
{
debug_infor_printf((char*)"\n ReverseSwitchConfigDataStructInit FAIL, Max:%d \n", CI_SUM_MAX);
rtnvalue = 0u;
}
return rtnvalue;
}
/*********************************************
*
*pReverseSwitchRelay继电器初始化数据指针
pReverseSwitchCfgDtStr配置数据结构体指针
*01
*********************************************/
UINT8 ReverseSiwtchCfgDtStruFromDquStr(Relay_ReverseSwitchStruct* pReverseSwitchRelay, ReverseSwitchCfgDataStru* pReverseSwitchCfgDtStr)
{
UINT8 rtnvalue = 0u;
UINT16 jj = 0U;
UINT16 kk = 0U;
UINT8 chFindOpen = CI_ERROR;
UINT8 chFindClose = CI_ERROR;
/*入口参数防护*/
if ((NULL != pReverseSwitchRelay) && (NULL != pReverseSwitchCfgDtStr))
{
pReverseSwitchCfgDtStr->wId = pReverseSwitchRelay->wReversSwitchId;
for (jj = 0u; jj<RelayDataLen.RelayCfgDtStrLen; jj++)
{
if (pReverseSwitchRelay->wColCloseRelayId == RelayData.pRelayCfgDtStr[jj].RelayId)
{
chFindClose = CI_SUCCESS;
}
else if (pReverseSwitchRelay->wColOpenRelayId == RelayData.pRelayCfgDtStr[jj].RelayId)
{
pReverseSwitchCfgDtStr->chBelongCiId = RelayData.pRelayCfgDtStr[jj].BelongCiId;
chFindOpen = CI_SUCCESS;
}
else
{
;
}
if ((CI_SUCCESS == chFindOpen) && (CI_SUCCESS == chFindClose))
{
break;/*均找到*/
}
}
if ((CI_ERROR == chFindOpen) || (CI_ERROR == chFindClose))
{
/*返回失败*/
rtnvalue = 0u;
debug_infor_printf((char*)"\nOpenRelay :%d CloseRelay%d, Not Find In RelayTable \n", pReverseSwitchRelay->wColOpenRelayId, pReverseSwitchRelay->wColCloseRelayId);
}
else
{
rtnvalue = 1u;
pReverseSwitchCfgDtStr->wColCloseRelayId = pReverseSwitchRelay->wColCloseRelayId;
pReverseSwitchCfgDtStr->wColOpenRelayId = pReverseSwitchRelay->wColOpenRelayId;
pReverseSwitchCfgDtStr->wRelateBoardNum = pReverseSwitchRelay->wRelateBoardNum;
if ((0U < pReverseSwitchCfgDtStr->wRelateBoardNum) && (REVERSE_BOARD_SUM_MAX >= pReverseSwitchCfgDtStr->wRelateBoardNum))
{
for (kk = 0u; kk < pReverseSwitchCfgDtStr->wRelateBoardNum; kk++)
{
pReverseSwitchCfgDtStr->strRelateBoardBuf[kk].wReversBoardId = pReverseSwitchRelay->strRelateBoardBuf[kk].wReversBoardId;
pReverseSwitchCfgDtStr->strRelateBoardBuf[kk].chDevType = pReverseSwitchRelay->strRelateBoardBuf[kk].chDevType;
pReverseSwitchCfgDtStr->strRelateBoardBuf[kk].wBoardColCloseRelayId = pReverseSwitchRelay->strRelateBoardBuf[kk].wBoardColCloseRelayId;
pReverseSwitchCfgDtStr->strRelateBoardBuf[kk].wBoardColOpenRelayId = pReverseSwitchRelay->strRelateBoardBuf[kk].wBoardColOpenRelayId;
pReverseSwitchCfgDtStr->strRelateBoardBuf[kk].wDevId = pReverseSwitchRelay->strRelateBoardBuf[kk].wDevId;
chFindClose = CI_ERROR;
chFindOpen = CI_ERROR;
for (jj = 0u; jj<RelayDataLen.RelayCfgDtStrLen; jj++)
{
if (pReverseSwitchCfgDtStr->strRelateBoardBuf[kk].wBoardColCloseRelayId == RelayData.pRelayCfgDtStr[jj].RelayId)
{
chFindClose = CI_SUCCESS;
}
else if (pReverseSwitchCfgDtStr->strRelateBoardBuf[kk].wBoardColOpenRelayId == RelayData.pRelayCfgDtStr[jj].RelayId)
{
pReverseSwitchCfgDtStr->chBelongCiId = RelayData.pRelayCfgDtStr[jj].BelongCiId;
chFindOpen = CI_SUCCESS;
}
else
{
;
}
if ((CI_SUCCESS == chFindOpen) && (CI_SUCCESS == chFindClose))
{
break;/*均找到*/
}
}
if ((CI_ERROR == chFindOpen) || (CI_ERROR == chFindClose))
{
rtnvalue = 0u;
debug_infor_printf((char*)"\nBoard: %d openRelay:%d closeRelay:%d, Not Find In RelayTable \n", pReverseSwitchCfgDtStr->strRelateBoardBuf[kk].wReversBoardId,
pReverseSwitchCfgDtStr->strRelateBoardBuf[kk].wBoardColOpenRelayId, pReverseSwitchCfgDtStr->strRelateBoardBuf[kk].wBoardColCloseRelayId);
break;
}
}
}
}
}
else
{
/*返回失败*/
rtnvalue = 0u;
}
return rtnvalue;
}
/*********************************************
*TIOCATS设备网关配置数据结构体----
*FSName文件指针
@@ -14336,7 +14557,6 @@ static UINT8 RciSerialCommDataInit(void)
UINT16 ii = 0U; /*循环变量*/
UINT8 chLocalCiId = 0U; /*本地联锁ID*/
UINT16 wDataLen = 0U; /*数据宽度*/
UINT16 wTempData = 0U; /*ÁÙʱÊý¾Ý*/
UINT16 val = 0U; /*临时承接变量*/
UINT8 chCiDevId = 0U; /*CI设备ID*/
UINT8 chCiDevType = 0U; /*CI设备类型*/
@@ -14366,7 +14586,7 @@ static UINT8 RciSerialCommDataInit(void)
chCiDevId = (UINT8)(val & 0x00FF);
chCiDevType = (UINT8)((val & 0xFF00) >> 8);
if ((chLocalCiId == chCiDevType) && (chLocalRcWorkMode == chCiDevType))
if ((chLocalCiId == chCiDevId) && (chLocalRcWorkMode == chCiDevType))
{
/*设置本联锁串口通信标志*/
chRtnValue &= SetLocalSerialCommFlag(SERIAL_COMM_YES);
+18
View File
@@ -176,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; /*防护区域配置数据长度*/
@@ -1088,5 +1091,20 @@ UINT8 PsdRelateEsbConfigDataInit(UINT16 wPsdIndex);
*/
UINT8 RciCommonConfigDataInit(CHAR* FSName);
/*********************************************
*----
*FSName文件指针
*01
*********************************************/
UINT8 ReverseSwitchConfigDataStructInit(CHAR * FSName);
/*********************************************
*
*pReverseSwitchRelay继电器初始化数据指针
pReverseSwitchCfgDtStr配置数据结构体指针
*01
*********************************************/
UINT8 ReverseSiwtchCfgDtStruFromDquStr(Relay_ReverseSwitchStruct* pReverseSwitchRelay, ReverseSwitchCfgDataStru* pReverseSwitchCfgDtStr);
#endif
@@ -4137,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内部编号
@@ -404,32 +404,34 @@ UINT8 R_PointStructFromChar(UINT8 * pDataAddr,Relay_PointStruct* pSwitchStr)
}
if (CI_TRADITION_RAILWAY == lineIdentity)
{/*城轨线路*/
pSwitchStr->wPointId = dquCiShortFromChar(pData); /*道岔ID*/
pSwitchStr->wPointId = dquCiShortFromChar(pData); /*道岔ID*/
pData += 2u;
pSwitchStr->wOcId = dquCiShortFromChar(pData); /*OC ID*/
pData += 2u;
pSwitchStr->wRelayDingBiaoId = dquCiShortFromChar(pData); /*定表继电器ID */
pData += 2u;
pSwitchStr->wRelayFanBiaoId = dquCiShortFromChar(pData); /*反表继电器ID */
pData += 2u;
/*跳过OCID*/
pData += 2u;
pSwitchStr->wRelayDingBiaoId = dquCiShortFromChar(pData); /*定表继电器ID */
pData += 2u;
pSwitchStr->wRelayFanBiaoId = dquCiShortFromChar(pData); /*反表继电器ID */
pSwitchStr->wRelayYunCaoId = dquCiShortFromChar(pData); /*允操继电器ID*/
pData += 2u;
pSwitchStr->wRelayYunCaoId = dquCiShortFromChar(pData); /*允操继电器ID*/
pData += 2u;
pSwitchStr->wRelayDingCaoId = dquCiShortFromChar(pData); /*定操继电器ID */
pSwitchStr->wRelayDingCaoId = dquCiShortFromChar(pData); /*定操继电器ID */
pData += 2u;
pSwitchStr->wRelayFanCaoId = dquCiShortFromChar(pData); /*反操继电器ID */
pSwitchStr->wRelayFanCaoId = dquCiShortFromChar(pData); /*反操继电器ID */
pData += 2u;
pSwitchStr->wRelayZongDingBiaoId = dquCiShortFromChar(pData); /*总定表继电器ID */
pSwitchStr->wRelayZongDingBiaoId = dquCiShortFromChar(pData); /*总定表继电器ID */
pData += 2u;
pSwitchStr->wRelayZongFanBiaoId = dquCiShortFromChar(pData); /*总反表继电器ID */
pSwitchStr->wRelayZongFanBiaoId = dquCiShortFromChar(pData); /*总反表继电器ID */
pData += 2u;
pSwitchStr->wDFHId = dquCiShortFromChar(pData); /*DFH继电器ID*/
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
@@ -1192,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
@@ -468,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
{
@@ -1642,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
+34 -3
View File
@@ -111,7 +111,7 @@
#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)
@@ -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*/
@@ -482,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) /*继电器混线容忍最大周期*/
@@ -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
@@ -3726,4 +3726,76 @@ UINT8 GetRouteConfigDirection(const UINT16 routeId)
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;
}
@@ -317,6 +317,7 @@ typedef struct S_RouteConfigDataStruct
UINT8 cRouteRukuProperty; /*是否为入库进路:0x55 入库进路;0xaa 非入库进路*/
SideProtecGroupStru RouteSideProtecData;/*进路侧防条件*/
UINT8 chRouteCouplinkType; /*进路联挂属性:0x55 配置联挂属性;0xaa 未配置联挂属性*/
UINT8 chRouteConnectType; /*进路联络线属性:0x55 配置联络线属性;0xaa 未配置联络线属性*/
}RouteConfigDataStruct;
/*******************************全局变量声明*******************************/
@@ -1427,6 +1428,23 @@ UINT8 GetPhySecInRoutePosIndex(const UINT16 routeId, const UINT16 phySectionId);
** 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
}
@@ -6192,4 +6192,54 @@ 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;
}
@@ -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
@@ -2812,7 +2812,7 @@ UINT8 GetLogSecResShareFlag(const UINT16 wLgcSecId)
/*·µ»Ø´íÎó*/
funRetVal = CI_ERROR;
}
return LOGIC_SECTION_RES_SHARE_YES;
return funRetVal;
}
/*
+1 -1
View File
@@ -18,7 +18,7 @@
#define PHYSICAL_SECTION_SUM_MAX ((UINT16)1000) /*定义物理区段数量最大值*/
#define AXIS_SECTION_SUM_MAX ((UINT16)2000) /*定义计轴区段数量最大值*/
#define AXIS_INCLUDE_LOG_SUM_MAX ((UINT16)50) /*定义计轴包含逻辑区段数量最大值*/
#define LOGIC_SECTION_SUM_MAX ((UINT16)2000) /*定义逻辑区段数量最大值*/
#define LOGIC_SECTION_SUM_MAX ((UINT16)3000) /*定义逻辑区段数量最大值*/
#define PHYSICAL_INCLUDE_AXIS_SUM_MAX ((UINT16)10) /*定义物理区段包含计轴区段数量最大值*/
#define AXIS_INCLUDE_SWITCH_SUM_MAX ((UINT16)4) /*定义计轴区段包含的道岔数量最大值*/
#define AXIS_INCLUDE_LINK_SUM_MAX ((UINT16)5) /*定义计轴区段包含的LINK最大值*/
@@ -1888,4 +1888,93 @@ UINT16 GetSignalOutFirstLogSec(const UINT16 signalId)
}
}
return retVal;
}
}
/*
* ID信号机1灯丝驱动继电器ID线使
* const UINT16 signalId, ID
* 0:
* >0: 1ID
*/
UINT16 GetSignalFirstDsDrvRelayId(const UINT16 signalId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT16 retVal = CI_ERROR;
bufIndex = GetSignalConfigBufIndex(signalId); /*获取区段数组下标*/
if (SIGNAL_SUM_MAX > bufIndex)
{
retVal = SignalConfigDataStru[bufIndex].wFirstDsDrvRelayId;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* ID信号机主控驱动继电器ID线使
* const UINT16 signalId, ID
* 0:
* >0: ID
*/
UINT16 GetSignalMainDrvRelayId(const UINT16 signalId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT16 retVal = CI_ERROR;
bufIndex = GetSignalConfigBufIndex(signalId); /*获取区段数组下标*/
if (SIGNAL_SUM_MAX > bufIndex)
{
retVal = SignalConfigDataStru[bufIndex].wMainDrvRelayId;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* ID信号机次控驱动继电器ID线使
* const UINT16 signalId, ID
* 0:
* >0: ID
*/
UINT16 GetSignalAckDrvRelayId(const UINT16 signalId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT16 retVal = CI_ERROR;
bufIndex = GetSignalConfigBufIndex(signalId); /*获取区段数组下标*/
if (SIGNAL_SUM_MAX > bufIndex)
{
retVal = SignalConfigDataStru[bufIndex].wAckDrvRelayId;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* ID信号机复杂主控驱动继电器ID线使
* const UINT16 signalId, ID
* 0:
* >0: ID
*/
UINT16 GetSignalCMainDrvRelayId(const UINT16 signalId)
{
UINT16 bufIndex = 0U; /*数组下标*/
UINT16 retVal = CI_ERROR;
bufIndex = GetSignalConfigBufIndex(signalId); /*获取区段数组下标*/
if (SIGNAL_SUM_MAX > bufIndex)
{
retVal = SignalConfigDataStru[bufIndex].wCMainDrvRelayId;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
@@ -102,6 +102,11 @@ typedef struct S_SignalConfigDataStruct
UINT16 LxDrvRelayId; /*列车信号驱动继电器ID(配置字段-联络线使用)*/
UINT16 YxDrvRelayId; /*引导信号驱动继电器ID(配置字段-联络线使用)*/
UINT16 DxDrvRelayId; /*调车信号驱动继电器ID(配置字段-联络线使用)*/
UINT16 wFirstDsDrvRelayId; /*1灯丝驱动继电器ID(配置字段-联络线使用)*/
UINT16 wMainDrvRelayId; /*信号机主控驱动继电器ID(配置字段-联络线使用)*/
UINT16 wAckDrvRelayId; /*信号机次控驱动继电器ID(配置字段-联络线使用)*/
UINT16 wCMainDrvRelayId; /*信号机复杂主控驱动继电器ID(配置字段-联络线使用)*/
} SignalConfigDataStruct;
typedef struct S_OC_SignalConfigDataStruct
@@ -744,6 +749,34 @@ UINT16 GetSignalDxDrvRelayId(const UINT16 signalId);
* >0: ID
*/
UINT16 GetSignalOutFirstLogSec(const UINT16 signalId);
/*
* ID信号机1灯丝驱动继电器ID线使
* const UINT16 signalId, ID
* 0:
* >0: 1ID
*/
UINT16 GetSignalFirstDsDrvRelayId(const UINT16 signalId);
/*
* ID信号机主控驱动继电器ID线使
* const UINT16 signalId, ID
* 0:
* >0: ID
*/
UINT16 GetSignalMainDrvRelayId(const UINT16 signalId);
/*
* ID信号机次控驱动继电器ID线使
* const UINT16 signalId, ID
* 0:
* >0: ID
*/
UINT16 GetSignalAckDrvRelayId(const UINT16 signalId);
/*
* ID信号机复杂主控驱动继电器ID线使
* const UINT16 signalId, ID
* 0:
* >0: ID
*/
UINT16 GetSignalCMainDrvRelayId(const UINT16 signalId);
#ifdef __cplusplus
}
@@ -5791,4 +5791,71 @@ void SetSignalCrossStateCC(const UINT16 signalId, const UINT8 signalCrossState,
{
/*不处理*/
}
}
/*
*
* const UINT16 wCMainlRralyId, ID
* const UINT16 wSignalId, ID
*
* Created LYJ 2026.6.2
*/
UINT8 GetCMainRelayDriveState(const UINT16 wCMainlRralyId, const UINT16 wSignalId)
{
UINT8 chRet = CI_ERROR;
UINT16 wSigOutPhyId = 0U;
UINT16 wSigInPhyId = 0U;
UINT16 wLockRouteId = 0U;
UINT8 chOccState = 0U;
UINT8 chLockState = 0U;
UINT8 chFengSuoState = 0U;
UINT8 chJLockState = 0U;
UINT16 wQXzhaochaRelay = 0U;
UINT8 chColleState = 0U;
if ((0U < wCMainlRralyId) && (RELAY_SUM_MAX > wCMainlRralyId))
{
wSigOutPhyId = GetSignalOutFirstPhySecId(wSignalId); /*信号机外方区段*/
chOccState = GetPhySecCurMergeState(wSigOutPhyId); /*占用状态*/
chLockState = GetPhySecLockState(wSigOutPhyId); /*锁闭状态*/
chFengSuoState = GetPhySecFLockState(wSigOutPhyId); /*封锁状态*/
chJLockState = GetPhySecJumpLockState(wSigOutPhyId); /*跳跃锁闭状态*/
/*信号机外方区段,未锁闭,未占用,未封锁*/
if ((SECTION_OCCUPY_NO == chOccState) && (PHYSICAL_SECTION_LOCK_NO == chLockState)
&& (PHYSICAL_SECTION_FLOCK_NO == chFengSuoState) && (PHYSICAL_SECTION_JUMP_LOCK_NO == chJLockState))
{
wSigInPhyId = GetSignalInFirstPhySecId(wSignalId,0U); /*信号机内方区段*/
wLockRouteId = GetPhySecRLockBelongRouteId(wSigInPhyId); /*锁闭所属进路*/
wQXzhaochaRelay = GetRouteCancleZhaoChaRelayId(wLockRouteId); /*进路配置的取消照查继电器*/
/*信号机为始端的进路 配置的取消照查继电器落下*/
if ((0U < wQXzhaochaRelay) && (RELAY_SUM_MAX > wQXzhaochaRelay))
{
chColleState = GetRelayCollState(wQXzhaochaRelay);
if (RELAY_STATE_DOWN == chColleState)
{
chRet = CI_SUCCESS;
}
else
{
/*不处理*/
}
}
else
{
/*不处理*/
}
}
else
{
/*不处理*/
}
}
else
{
/*不处理*/
}
return chRet;
}
@@ -1248,6 +1248,14 @@ UINT8 GetSignalCrossTacsTrainIdCC(const UINT16 signalId);
* Created By LQ 2025.11.05
*/
void SetSignalCrossStateCC(const UINT16 signalId, const UINT8 signalCrossState, const UINT8 wTrainId);
/*
*
* const UINT16 wCMainlRralyId, ID
* const UINT16 wSignalId, ID
*
* Created LYJ 2026.6.2
*/
UINT8 GetCMainRelayDriveState(const UINT16 wCMainlRralyId, const UINT16 wSignalId);
#ifdef __cplusplus
}
@@ -46,7 +46,7 @@ UINT16 GetSwitchCurSum(void)
UINT16 retVal = 0u;
if (SwitchCurSum >= (INT16)SWITCH_SUM_MAX)
{
retVal = SWITCH_SUM_MAX;
retVal = SWITCH_SUM_MAX;
}
else if (SwitchCurSum < 0)
{
@@ -227,31 +227,6 @@ UINT16 GetSwitchDbRelayId(const UINT16 switchId)
return retVal;
}
/*
* ID道岔影子模式定位表示继电器ID
* const UINT16 switchId, ID
* 0:
* >0: ID
*/
UINT16 GetSwitchShadowDbRelayId(const UINT16 switchId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 retVal = CI_ERROR;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (bufIndex < SWITCH_SUM_MAX)
{
retVal = SwitchConfigDataStru[bufIndex].wShadowDbRelayId;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* ID道岔反位表示继电器ID
* const UINT16 switchId, ID
@@ -276,31 +251,6 @@ UINT16 GetSwitchFbRelayId(const UINT16 switchId)
return retVal;
}
/*
* ID道岔影子模式反位表示继电器ID
* const UINT16 switchId, ID
* 0:
* >0: ID
*/
UINT16 GetSwitchShadowFbRelayId(const UINT16 switchId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 retVal = CI_ERROR;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (bufIndex < SWITCH_SUM_MAX)
{
retVal = SwitchConfigDataStru[bufIndex].wShadowFbRelayId;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* ID道岔允操继电器ID
* const UINT16 switchId, ID
@@ -1762,3 +1712,172 @@ UINT16 GetSwitchThisOcOtherSwitchId(UINT16 switchId, UINT8 ocId)
return retVal;
}
/*
* ID道岔是否具备冗余采集
* const UINT16 switchId, ID
* REDUN_COLL_YES:
* REDUN_COLL_NO:
* CI_ERROR: ID有误
*/
UINT8 GetSwitchRedunCollCfg(const UINT16 switchId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 retVal = CI_ERROR;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (SWITCH_SUM_MAX > bufIndex)
{
retVal = SwitchConfigDataStru[bufIndex].RedunCollCfg;
}
else
{
retVal = CI_ERROR;
}
return retVal;
}
/*
* ID道岔的冗余表示DBJ1继电器ID
* const UINT16 switchId, ID
* 0: ID有误
* ID
*/
UINT16 GetSwitchRedunDBJ1RelayId(const UINT16 switchId, const UINT16 ocIndex)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 retVal = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_REDUN_COLL_MAX > ocIndex))
{
retVal = SwitchConfigDataStru[bufIndex].RedunCollRelayStru[ocIndex].wRedunDb1RelayId;
}
else
{
retVal = 0u;
}
return retVal;
}
/*
* ID道岔的冗余表示DBJ2继电器ID
* const UINT16 switchId, ID
* 0: ID有误
* ID
*/
UINT16 GetSwitchRedunDBJ2RelayId(const UINT16 switchId, const UINT16 ocIndex)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 retVal = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_REDUN_COLL_MAX > ocIndex))
{
retVal = SwitchConfigDataStru[bufIndex].RedunCollRelayStru[ocIndex].wRedunDb2RelayId;
}
else
{
retVal = 0u;
}
return retVal;
}
/*
* ID道岔的冗余表示FBJ1继电器ID
* const UINT16 switchId, ID
* 0: ID有误
* ID
*/
UINT16 GetSwitchRedunFBJ1RelayId(const UINT16 switchId, const UINT16 ocIndex)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 retVal = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_REDUN_COLL_MAX > ocIndex))
{
retVal = SwitchConfigDataStru[bufIndex].RedunCollRelayStru[ocIndex].wRedunFb1RelayId;
}
else
{
retVal = 0u;
}
return retVal;
}
/*
* ID道岔的冗余表示FBJ2继电器ID
* const UINT16 switchId, ID
* 0: ID有误
* ID
*/
UINT16 GetSwitchRedunFBJ2RelayId(const UINT16 switchId, const UINT16 ocIndex)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 retVal = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_REDUN_COLL_MAX > ocIndex))
{
retVal = SwitchConfigDataStru[bufIndex].RedunCollRelayStru[ocIndex].wRedunFb2RelayId;
}
else
{
retVal = 0u;
}
return retVal;
}
/*
*
* const UINT16 switchId, IDUINT16 wBoardId倒切板卡Id
* CI_SUCCESS CI_ERROR
*/
UINT8 SetSwitchRelateReverseBoardId(const UINT16 switchId, UINT16 wBoardId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 chRet = CI_ERROR;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (bufIndex < SWITCH_SUM_MAX)
{
SwitchConfigDataStru[bufIndex].wReverseBoardId = wBoardId;
chRet = CI_SUCCESS;
}
else
{
;
}
return chRet;
}
/*
* id
* const UINT16 switchId, ID
* UINT16_MAX:
* 0:
* [1,65534]Id
*/
UINT16 GetSwitchRelateReverseBoardId(const UINT16 switchId)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT16 retVal = UINT16_MAX;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (bufIndex < SWITCH_SUM_MAX)
{
retVal = SwitchConfigDataStru[bufIndex].wReverseBoardId;
}
else
{
retVal = UINT16_MAX;
}
return retVal;
}
@@ -33,6 +33,15 @@ typedef struct S_ZzjPowerConfigDataStruct
UINT16 ZzjFanweiPower2; /*转辙机J1反表灯_供电2*/
}ZzjPowerConfigDataStruct;
typedef struct S_SwitchRedunCollCfgDataStru
{
UINT16 wRedunDb1RelayId; /*(北京10道岔冗余采集)道岔定表继电器1ID*/
UINT16 wRedunDb2RelayId; /*(北京10道岔冗余采集)道岔定表继电器2ID*/
UINT16 wRedunFb1RelayId; /*(北京10道岔冗余采集)道岔反表继电器1ID*/
UINT16 wRedunFb2RelayId; /*(北京10道岔冗余采集)道岔反表继电器2ID*/
}
SwitchRedunCollCfgDataStru;
typedef struct S_SwitchBelongOCConfigDataStr/*道岔所属OC配置数据*/
{
UINT8 OcId; /*当前OC*/
@@ -59,8 +68,6 @@ typedef struct S_SwitchConfigDataStruct
UINT16 FbRelayId; /*道岔反表继电器ID (配置字段) 即单开反表表示继电器ID*/
UINT16 YcRelayId; /*道岔允操继电器ID (配置字段) 即单开定位操作继电器ID*/
UINT16 DcRelayId; /*道岔定操继电器ID (配置字段) 即单开反位操作继电器ID*/
UINT16 wShadowDbRelayId; /*影子模式道岔定表继电器ID (配置字段) 迪斯尼*/
UINT16 wShadowFbRelayId; /*影子模式道岔反表继电器ID (配置字段) 迪斯尼*/
/*以下为单轨道岔相关继电器*/
UINT16 GZJId; /*故障继电器ID (配置字段)*/
UINT16 JTYJaId; /*现场状态继电器ID (配置字段)*/
@@ -111,7 +118,9 @@ typedef struct S_SwitchConfigDataStruct
UINT8 chSwitchBelongOcNum;/*道岔所属OC数*/
SwitchBelongOCConfigDataStr belongOCConfigData[SWITCH_BELONG_OC_MAX];/*道岔所属各OC的配置情况*/
UINT8 RedunCollCfg; /*道岔是否具备冗余采集*/
SwitchRedunCollCfgDataStru RedunCollRelayStru[SWITCH_REDUN_COLL_MAX];
UINT16 wReverseBoardId; /*所属倒切板卡ID*/
} SwitchConfigDataStruct;
@@ -543,22 +552,6 @@ UINT16 GetSwitchProtectSwitchNum(const UINT16 wSwitchId);
*/
UINT16* GetSwitchProtectSwitchIdBuf(const UINT16 wSwitchId);
/*
* ID道岔影子模式反位表示继电器ID
* const UINT16 switchId, ID
* 0:
* >0: ID
*/
UINT16 GetSwitchShadowFbRelayId(const UINT16 switchId);
/*
* ID道岔影子模式定位表示继电器ID
* const UINT16 switchId, ID
* 0:
* >0: ID
*/
UINT16 GetSwitchShadowDbRelayId(const UINT16 switchId);
/**
* @brief
* @param const UINT16 switchId ID
@@ -684,6 +677,63 @@ UINT8 GetSwitchWhetherBelongThisOc(UINT16 switchId, UINT8 ocId);
* Add by mpt 20260404
*/
UINT16 GetSwitchThisOcOtherSwitchId(UINT16 switchId, UINT8 ocId);
/*
* ID道岔是否具备冗余采集
* const UINT16 switchId, ID
* REDUN_COLL_YES:
* REDUN_COLL_NO:
* CI_ERROR: ID有误
*/
UINT8 GetSwitchRedunCollCfg(const UINT16 switchId);
/*
* ID道岔的冗余表示DBJ1继电器ID
* const UINT16 switchId, ID
* 0: ID有误
* ID
*/
UINT16 GetSwitchRedunDBJ1RelayId(const UINT16 switchId, const UINT16 ocIndex);
/*
* ID道岔的冗余表示DBJ2继电器ID
* const UINT16 switchId, ID
* 0: ID有误
* ID
*/
UINT16 GetSwitchRedunDBJ2RelayId(const UINT16 switchId, const UINT16 ocIndex);
/*
* ID道岔的冗余表示FBJ1继电器ID
* const UINT16 switchId, ID
* 0: ID有误
* ID
*/
UINT16 GetSwitchRedunFBJ1RelayId(const UINT16 switchId, const UINT16 ocIndex);
/*
* ID道岔的冗余表示FBJ2继电器ID
* const UINT16 switchId, ID
* 0: ID有误
* ID
*/
UINT16 GetSwitchRedunFBJ2RelayId(const UINT16 switchId, const UINT16 ocIndex);
/*
*
* const UINT16 switchId, IDUINT16 wBoardId倒切板卡Id
* CI_SUCCESS CI_ERROR
*/
UINT8 SetSwitchRelateReverseBoardId(const UINT16 switchId, UINT16 wBoardId);
/*
* id
* const UINT16 switchId, ID
* UINT16_MAX:
* 0:
* [1,65534]Id
*/
UINT16 GetSwitchRelateReverseBoardId(const UINT16 switchId);
#ifdef __cplusplus
}
#endif
+300 -1
View File
@@ -2876,7 +2876,7 @@ void SetHlhtCiSwitchPlockStatus(const UINT16 switchId, const UINT8 lockStatus)
if (SWITCH_SUM_MAX > bufIndex)
{
if ((SWITCH_LOCK_STATUS_PROTECT == lockStatus) || (SWITCH_LOCK_STATUS_NO == lockStatus))
if ((SWITCH_LOCK_STATUS_PROTECT == lockStatus) || (SWITCH_LOCK_STATUS_NO == lockStatus) || (SWITCH_LOCK_STATUS_DAP == lockStatus))
{
SwitchDataStru[bufIndex].LockStatus = lockStatus;
}
@@ -3650,3 +3650,302 @@ void SetSwitchThisOcFindCmdCycNum(const UINT16 switchId, const UINT8 ocId, const
}
}
/*
* 线
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* UINT32 cycNum
* void
* add by wyd 20260604
*/
void SetSwitchRedunJudgHunXianStCyc(const UINT16 switchId, const UINT8 chOCIndex, const UINT32 cycNum)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_REDUN_COLL_MAX > chOCIndex))
{
SwitchDataStru[bufIndex].RedunCollData[chOCIndex].dwRedunJudgHunXianStCyc = cycNum;
}
else
{
/*nothing*/
}
}
/*
* 线
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
*
* add by wyd 20260604
*/
UINT32 GetSwitchRedunJudgHunXianStCyc(const UINT16 switchId, const UINT8 chOCIndex)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT32 cycNum = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_REDUN_COLL_MAX > chOCIndex))
{
cycNum = SwitchDataStru[bufIndex].RedunCollData[chOCIndex].dwRedunJudgHunXianStCyc;
}
else
{
/*nothing*/
}
return cycNum;
}
/*
* 线
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* UINT32 cycNum
* void
* add by wyd 20260604
*/
void SetSwitchRedunRealHunXianStCyc(const UINT16 switchId, const UINT8 chOCIndex, const UINT32 cycNum)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_REDUN_COLL_MAX > chOCIndex))
{
SwitchDataStru[bufIndex].RedunCollData[chOCIndex].dwRedunRealHunXianStCyc = cycNum;
}
else
{
/*nothing*/
}
}
/*
* 线
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
*
* add by wyd 20260604
*/
UINT32 GetSwitchRedunRealHunXianStCyc(const UINT16 switchId, const UINT8 chOCIndex)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT32 cycNum = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_REDUN_COLL_MAX > chOCIndex))
{
cycNum = SwitchDataStru[bufIndex].RedunCollData[chOCIndex].dwRedunRealHunXianStCyc;
}
else
{
/*nothing*/
}
return cycNum;
}
/*
* 线
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* const UINT8 cHunXianStt 线
* REDUN_HX_RECOV_1100REDUN_HX_RECOV_1010REDUN_HX_RECOV_0011
* 0
* void
* add by wyd 20260604
*/
void SetSwitchRedunHunXianRecovStt(const UINT16 switchId, const UINT8 chOCIndex, const UINT8 cHunXianStt)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_REDUN_COLL_MAX > chOCIndex))
{
if ((REDUN_HX_RECOV_1100 == cHunXianStt) || (REDUN_HX_RECOV_1010 == cHunXianStt)
|| (REDUN_HX_RECOV_0011 == cHunXianStt) || (REDUN_HX_RECOV_ALL == cHunXianStt))
{
/*记录混线恢复采集*/
SwitchDataStru[bufIndex].RedunCollData[chOCIndex].cHunXianRecovStt |= cHunXianStt;
}
else
{
/*清空混线恢复采集*/
SwitchDataStru[bufIndex].RedunCollData[chOCIndex].cHunXianRecovStt = 0u;
}
}
else
{
/*nothing*/
}
}
/*
* 线
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* 线
* add by wyd 20260604
*/
UINT8 GetSwitchRedunHunXianRecovStt(const UINT16 switchId, const UINT8 chOCIndex)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT8 RtnValue = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_REDUN_COLL_MAX > chOCIndex))
{
RtnValue = SwitchDataStru[bufIndex].RedunCollData[chOCIndex].cHunXianRecovStt;
}
else
{
/*nothing*/
}
return RtnValue;
}
/*
*
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* UINT32 cycNum
* void
* add by wyd 20260604
*/
void SetSwitchRedunFaultStCyc(const UINT16 switchId, const UINT8 chOCIndex, const UINT32 cycNum)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_REDUN_COLL_MAX > chOCIndex))
{
SwitchDataStru[bufIndex].RedunCollData[chOCIndex].dwRedunFaultStCyc = cycNum;
}
else
{
/*nothing*/
}
}
/*
*
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
*
* add by wyd 20260604
*/
UINT32 GetSwitchRedunFaultStCyc(const UINT16 switchId, const UINT8 chOCIndex)
{
UINT16 bufIndex = 0u; /*数组下标*/
UINT32 cycNum = 0u;
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_REDUN_COLL_MAX > chOCIndex))
{
cycNum = SwitchDataStru[bufIndex].RedunCollData[chOCIndex].dwRedunFaultStCyc;
}
else
{
/*nothing*/
}
return cycNum;
}
/*
*
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* UINT32 cycNum
* void
* add by wyd 20260604
*/
void SetSwitchRedunCombineStt(const UINT16 switchId, const UINT8 chOCIndex, const UINT8 setValue)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_REDUN_COLL_MAX > chOCIndex))
{
SwitchDataStru[bufIndex].RedunCollData[chOCIndex].cCombineStt = setValue;
}
else
{
/*nothing*/
}
}
/*
*
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* UINT32 cycNum
* void
* add by wyd 20260604
*/
void SetSwitchMainCollPos(const UINT16 switchId, const UINT8 setValue)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if (SWITCH_SUM_MAX > bufIndex)
{
SwitchDataStru[bufIndex].cMainOcCollPos = setValue;
}
else
{
/*nothing*/
}
}
/*
*
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* UINT32 cycNum
* void
* add by wyd 20260604
*/
void SetSwitchRedunCollPos(const UINT16 switchId, const UINT8 chOCIndex, const UINT8 setValue)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_REDUN_COLL_MAX > chOCIndex))
{
SwitchDataStru[bufIndex].RedunCollData[chOCIndex].cCollPos = setValue;
}
else
{
/*nothing*/
}
}
/*
* 线
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* UINT32 cycNum
* void
* add by wyd 20260604
*/
void SetSwitchRedunCurrHunXianStt(const UINT16 switchId, const UINT8 chOCIndex, const UINT8 setValue)
{
UINT16 bufIndex = 0u; /*数组下标*/
bufIndex = GetSwitchConfigBufIndex(switchId); /*获取道岔数组下标*/
if ((SWITCH_SUM_MAX > bufIndex) && (SWITCH_REDUN_COLL_MAX > chOCIndex))
{
SwitchDataStru[bufIndex].RedunCollData[chOCIndex].cCurrHunxianStt = setValue;
}
else
{
/*nothing*/
}
}
+136 -2
View File
@@ -27,6 +27,21 @@
#ifdef __cplusplus
extern "C" {
#endif
typedef struct S_SwitchRedunCollStruct
{
UINT32 dwRedunJudgHunXianStCyc; /*(北京10道岔冗余采集)判断混线起始周期号,道岔移动中混线容忍用。
线线*/
UINT32 dwRedunRealHunXianStCyc; /*(北京10道岔冗余采集)实际混线起始周期号,混线恢复用。
线线*/
UINT8 cHunXianRecovStt; /*(北京10道岔冗余采集)混线恢复状态。
bit0=11100bit1=11010bi2=10011
bit0121线*/
UINT32 dwRedunFaultStCyc; /*(北京10道岔冗余采集)采集故障(四开)起始周期号*/
UINT8 cCombineStt; /*(打印用)继电器采集组合*/
UINT8 cCollPos; /*(打印用)冗余采集位置*/
UINT8 cCurrHunxianStt; /*(打印用)当周期混线状态*/
}SwitchRedunCollStruct;
/*道岔数据结构体*/
typedef struct S_SwitchOcDataStruct
@@ -103,8 +118,8 @@ typedef struct S_SwitchDataStruct
UINT8 PLockedAxisSecNum;/*被防护锁闭的计轴区段id数量,只能在本文件使用*/
UINT16 PLockedAxisSecIdArr[SWITCH_MAX_PROTECT_LOCKED_NUM];/*被防护锁闭的计轴区段id数组,只能在本文件使用*/
SwitchRedunCollStruct RedunCollData[SWITCH_REDUN_COLL_MAX];
UINT8 cMainOcCollPos; /*(打印用)主控转辙机板道岔位置*/
} SwitchDataStruct;
/*道岔数据结构体*/
@@ -927,6 +942,125 @@ UINT32 GetSwitchThisOcFindCmdCycNum(const UINT16 switchId, const UINT8 ocId);
* add mpt by 20260402
*/
void SetSwitchThisOcFindCmdCycNum(const UINT16 switchId, const UINT8 ocId, const UINT32 cycNum);
/*
* 线
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* UINT32 cycNum
* void
* add by wyd 20260604
*/
void SetSwitchRedunJudgHunXianStCyc(const UINT16 switchId, const UINT8 chOCIndex, const UINT32 cycNum);
/*
* 线
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
*
* add by wyd 20260604
*/
UINT32 GetSwitchRedunJudgHunXianStCyc(const UINT16 switchId, const UINT8 chOCIndex);
/*
* 线
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* UINT32 cycNum
* void
* add by wyd 20260604
*/
void SetSwitchRedunRealHunXianStCyc(const UINT16 switchId, const UINT8 chOCIndex, const UINT32 cycNum);
/*
* 线
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
*
* add by wyd 20260604
*/
UINT32 GetSwitchRedunRealHunXianStCyc(const UINT16 switchId, const UINT8 chOCIndex);
/*
* 线
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* const UINT8 cHunXianStt 线
* REDUN_HX_RECOV_1100REDUN_HX_RECOV_1010REDUN_HX_RECOV_0011
* 0
* void
* add by wyd 20260604
*/
void SetSwitchRedunHunXianRecovStt(const UINT16 switchId, const UINT8 chOCIndex, const UINT8 cHunXianStt);
/*
* 线
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* 线
* add by wyd 20260604
*/
UINT8 GetSwitchRedunHunXianRecovStt(const UINT16 switchId, const UINT8 chOCIndex);
/*
*
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* UINT32 cycNum
* void
* add by wyd 20260604
*/
void SetSwitchRedunFaultStCyc(const UINT16 switchId, const UINT8 chOCIndex, const UINT32 cycNum);
/*
*
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
*
* add by wyd 20260604
*/
UINT32 GetSwitchRedunFaultStCyc(const UINT16 switchId, const UINT8 chOCIndex);
/*
*
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* UINT32 cycNum
* void
* add by wyd 20260604
*/
void SetSwitchRedunCombineStt(const UINT16 switchId, const UINT8 chOCIndex, const UINT8 setValue);
/*
*
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* UINT32 cycNum
* void
* add by wyd 20260604
*/
void SetSwitchMainCollPos(const UINT16 switchId, const UINT8 setValue);
/*
*
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* UINT32 cycNum
* void
* add by wyd 20260604
*/
void SetSwitchRedunCollPos(const UINT16 switchId, const UINT8 chOCIndex, const UINT8 setValue);
/*
* 线
* const UINT16 switchId, ID
* const UINT8 ocIndex OC下标
* UINT32 cycNum
* void
* add by wyd 20260604
*/
void SetSwitchRedunCurrHunXianStt(const UINT16 switchId, const UINT8 chOCIndex, const UINT8 setValue);
#ifdef __cplusplus
}
#endif
+17 -4
View File
@@ -155,6 +155,7 @@
#define SWITCH_BELONG_OC_MAX 2U /*道岔所属OC最多数*/
#define SWITCH_REDUN_COLL_MAX 2U /*道岔冗余采集最多数*/
#define MAIN_CONTROL 0x55U /*主控*/
#define STANDBY_CONTROL 0xAAU /*备控*/
@@ -168,9 +169,21 @@
#define SWITCH_BOARD_FAULT ((UINT8)0xff) /*转辙机板故障*/
#define SWITCH_BOARD_NORMAL ((UINT8)0x55) /*转辙机板正常*/
#define FIND_DINGWEI_CMD ((UINT8)0x1) /*Ѱ¶¨*/
#define FIND_FANWEI_CMD ((UINT8)0x2) /*Ѱ·´*/
#define INIT_FIND_CMD ((UINT8)0x3) /*³õʼѰ*/
#define NO_FIND_CMD ((UINT8)0x0) /*ÎÞѰλÖÃÖ¸Áî*/
#define FIND_DINGWEI_CMD ((UINT8)0x1) /*寻定*/
#define FIND_FANWEI_CMD ((UINT8)0x2) /*寻反*/
#define INIT_FIND_CMD ((UINT8)0x3) /*初始寻*/
#define NO_FIND_CMD ((UINT8)0x0) /*无寻位置指令*/
#define REDUN_COLL_YES ((UINT8)0xAAu) /*具备道岔冗余采集*/
#define REDUN_COLL_NO ((UINT8)0x55u) /*不具备道岔冗余采集*/
#define REDUN_HX_RECOV_1100 ((UINT8)0x01u) /*混线恢复采集到过1100*/
#define REDUN_HX_RECOV_1010 ((UINT8)0x02u) /*混线恢复采集到过1010*/
#define REDUN_HX_RECOV_0011 ((UINT8)0x04u) /*混线恢复采集到过0011*/
#define REDUN_HX_RECOV_ALL ((UINT8)0x07u) /*全部混线恢复采集*/
#define REDUN_ALARM_HUNXIAN ((UINT8)0x55u) /*冗余采集混线报警*/
#define REDUN_ALARM_FAULT ((UINT8)0xAAu) /*冗余采集故障报警*/
#endif
@@ -62,7 +62,7 @@
#define VER_MAIN_SUBCI_CI_CID ((UINT8)27) /*子系统主版本号*/
#define VER_SUB_SUBCI_CI_CID ((UINT8)0) /*子系统子版本号*/
#define VER_BRUNCH_CI_CID ((UINT8)0) /*分支版本号..........主线填0....分支填1 调试填2 */
#define VER_RETURN_SUBCI_CI_CID ((UINT8)0) /*子系统回归版本号*/
#define VER_RETURN_SUBCI_CI_CID ((UINT8)1) /*子系统回归版本号*/
#ifdef SCADE_MODE
/*SCADE软件版本号*/
@@ -76,13 +76,13 @@
#define VER_SOFT_PRODUCT ((UINT8)40) /*产品编号*/
#define VER_SOFT_MODUAL_APP ((UINT8)1) /*模块编号*/
#define VER_SOFT_MIANVERSION ((UINT8)27) /*主版本号*/
#define VER_SOFT_SUBVERSION ((UINT8)1) /*子版本号*/
#define VER_SOFT_SUBVERSION ((UINT8)2) /*子版本号*/
#endif
/*可兼容的公共数据结构版本号*/
#define VER_1_PUBLIC_FS_1 ((UINT8)31)
#define VER_1_PUBLIC_FS_2 ((UINT8)7)
#define VER_1_PUBLIC_FS_2 ((UINT8)8)
#define VER_1_PUBLIC_FS_3 ((UINT8)0)
#define VER_1_PUBLIC_FS_4 ((UINT8)0)
@@ -98,7 +98,7 @@
/*可兼容的私有数据结构版本号*/
#define VER_1_PRIVATE_FS_1 ((UINT8)52)
#define VER_1_PRIVATE_FS_1 ((UINT8)53)
#define VER_1_PRIVATE_FS_2 ((UINT8)0)
#define VER_2_PRIVATE_FS_1 ((UINT8)0xFF)
@@ -108,7 +108,7 @@
#define VER_3_PRIVATE_FS_2 ((UINT8)0xFF)
/*可兼容OC数据结构版本号*/
#define VER_1_OCDATA_FS_1 ((UINT8)37) /*oc 3.0 较新数据版本*/
#define VER_1_OCDATA_FS_1 ((UINT8)38) /*oc 3.0 较新数据版本*/
#define VER_1_OCDATA_FS_2 ((UINT8)0)
#define VER_2_OCDATA_FS_1 ((UINT8)0xFF)
@@ -125,9 +125,10 @@ static UINT16 g_TiocFsVersion[TIOCFS_VERSION_LENGTH] = { 0u };/* TIOC
UINT32 gSystemUpdateMainUseCycNum = 0U; /*系统升级主用起始周期号*/
static UINT32 wSwitchMachineCutInterval = 0U; /*RC/CI系统控制转辙机板主控切换间隔时间(单位:S)*/
static UINT32 wSwitchMachineDrvingCutInterval = 0U; /*RC/CI系统驱动道岔后控制转辙机板主控切换时间(单位:S)*/
static UINT32 wSwitchLastDrvValidTime = 0U; /*RC/CI系统上一次驱动道岔有效时间*/
static UINT32 wSwitchMachineCutInterval = 0U; /*RC/CI系统控制转辙机板主控切换间隔时间(单位:S)*/
static UINT32 wSwitchMachineDrvingCutInterval = 0U; /*RC/CI系统驱动道岔后控制转辙机板主控切换时间(单位:S)*/
static UINT32 wSwitchLastDrvValidTime = 0U; /*RC/CI系统上一次驱动道岔有效时间*/
static UINT32 dwSwitchRedunCollTolTime = 0U; /*道岔冗余采集报警容忍时间*/
/*
*
* void
@@ -361,6 +362,9 @@ void SystemParaTimeToCycleCount(void)
paraVal = GetSystemParaValue(SWITCH_LAST_DRV_TIME);
wSwitchLastDrvValidTime = TimeToCycleCount((UINT32)paraVal * 1000U, appCycleTime); /*RC/CI系统上一次驱动道岔有效时间*/
paraVal = GetSystemParaValue(SWITCH_REDUN_COLL_ALARM_TIME);
dwSwitchRedunCollTolTime = TimeToCycleCount((UINT32)paraVal, appCycleTime); /*道岔冗余采集报警容忍时间*/
}
/*
@@ -3429,16 +3433,30 @@ UINT8 GetLocalSerialCommFlag(void)
* @return CI_SUCCESS CI_ERROR
* @note by cgh 20260507
*/
UINT8 SetLocalSerialCommData(UINT8 chGroupIndex,UINT8 chPortIndex,UINT16 wSerialCommCiId,UINT8 chSerialCommPort)
UINT8 SetLocalSerialCommData(UINT8 chGroupIndex, UINT8 chPortIndex, UINT16 wSerialCommCiId, UINT8 chSerialCommPort)
{
UINT8 chReval = CI_ERROR;
UINT8 chDevType = 0U; /*设备类型*/
UINT8 chDevId = 0U; /*设备ID*/
UINT8 chLocalRcWorkMode = 0u; /*本地RC工作模式*/
if ((SERIAL_GROUP_SUM_MAX > chGroupIndex) && (CI_SUM_MAX > wSerialCommCiId) && (SERIAL_PORT_SUM_MAX > chPortIndex))
if ((SERIAL_GROUP_SUM_MAX > chGroupIndex) && (SERIAL_PORT_SUM_MAX > chPortIndex))
{
gSzSerialCommData[chGroupIndex].wSerialCommOtherCiId = wSerialCommCiId;
gSzSerialCommData[chGroupIndex].chSerialCommPort[chPortIndex] = chSerialCommPort;
chLocalRcWorkMode = GetLocalRcWorkMode();
chDevType = (UINT8)((wSerialCommCiId & 0xFF00U) >> 8U);
chDevId = (UINT8)(wSerialCommCiId & 0x00FFU);
chReval = CI_SUCCESS;
if ((0u ==wSerialCommCiId) || ((chLocalRcWorkMode == chDevType) && (CI_SUM_MAX > chDevId)))
{
gSzSerialCommData[chGroupIndex].wSerialCommOtherCiId = wSerialCommCiId;
gSzSerialCommData[chGroupIndex].chSerialCommPort[chPortIndex] = chSerialCommPort;
chReval = CI_SUCCESS;
}
else
{
; /*初始化失败*/
}
}
else
{
@@ -3514,4 +3532,15 @@ UINT8 IsSerialDevice(UINT16 DeviceName, UINT8* pSerialGroup)
}
return chReval;
}
/**
* @brief ms
* @param[in] void
* @return ms
* @note by wyd 20260605
*/
UINT32 GetSwitchRedunCollHunXianCycCfg(void)
{
return dwSwitchRedunCollTolTime;
}
@@ -109,6 +109,7 @@ extern "C" {
#define FUNC_OVERLAP_UT_UNLOCK_MODE ((UINT8)74) /*UT列车占压停车区域时,保护区段解锁方式*/
#define FUNC_PSD_EXCEPT_CANCLE_TYPE ((UINT8)75) /*屏蔽门异常打开后解除异常方式:0xAA 需ATS发 0xBA命令;0x55未异常打开自动解除*/
#define FUNC_PSD_KEEP_CLOSE_TYPE ((UINT8)76) /*联锁系统输出打开/关闭站台门命令原则*/
#define FUNC_GATEWAY_INTERFACE_IDENTIFIER ((UINT8)77) /*联锁与网关接口标识:01:不存在GAL报文头 02:存在GAL报文头*/
#define CiSum_ID ((UINT16)1)/*实际联锁集中站数量 编号*/
@@ -191,6 +192,7 @@ extern "C" {
#define SWITCH_MACHINE_CUT_INTERVAL (77U) /*RC/CI系统控制转辙机板主控切换间隔时间(单位:S)*/
#define SWITCH_MACHINE_CUT_DRV_INTERVAL (78U) /*RC/CI系统驱动道岔后控制转辙机板主控切换时间(单位:S)*/
#define SWITCH_LAST_DRV_TIME (79U) /*RC/CI系统上一次驱动道岔有效时间*/
#define SWITCH_REDUN_COLL_ALARM_TIME (80U) /*道岔冗余采集报警容忍时间(ms)*/
#define FUNC_SWITCH_ON ((UINT8)0xAA) /*功能配置开关打开*/
#define FUNC_SWITCH_OFF ((UINT8)0x55) /*功能配置开关关闭*/
@@ -1636,6 +1638,14 @@ SerialCommData* GetLocalSerialCommData(void);
*/
UINT8 IsSerialDevice(UINT16 DeviceName, UINT8* pSerialGroup);
/**
* @brief ms
* @param[in] void
* @return ms
* @note by wyd 20260605
*/
UINT32 GetSwitchRedunCollHunXianCycCfg(void);
#ifdef __cplusplus
}
#endif
+102 -121
View File
@@ -185,12 +185,6 @@ static void SetTrainAtsScreenProc(void);
*/
static UINT32 GetTrainTransBadCyc(const UINT16 wTrainId);
/*
* (IVOC)
* const UINT16 wTrainId, ID
*
*/
static UINT32 GetTrainIvocTransBadCyc(const UINT16 wTrainId);
/*
* UCT
* const UINT16 wTrainId, ID
@@ -366,7 +360,8 @@ UINT8 TrainDataModuleInit(void)
gstTrainInfo[chCycle].chTrainPostionMode = 0U; /*列车位置模式*/
gstTrainInfo[chCycle].chPbtacsTransState = TRAIN_COMM_STATE_UNKNOWN; /*初始化与PBTACS车未通信*/
gstTrainInfo[chCycle].dwPbtacsTransBadCyc = 0U;
gszTrainId[gTrainSum] = gstTrainInfo[chCycle].wTrainId;
gTrainSum++;
@@ -415,7 +410,6 @@ UINT8 TrainDataModuleInit(void)
gTrainInfoTemp[chCycle].chIvocSpeedDir = 0u; /*Ivoc速度方向*/
gTrainInfoTemp[chCycle].wIvocTrainSpeed = 0u; /*Ivoc列车速度*/
gTrainInfoTemp[chCycle].dwIvocDelayTime = 0u; /*Ivoc消息延迟时间*/
}
@@ -542,33 +536,6 @@ UINT8 GetTrainTransitmitStat(const UINT16 wTrainId)
return chRetVal;
}
/*
* (IVOC)
* const UINT16 wTrainId, ID
* 0:
* 0x55:
* 0xAA:
* 0xFF:
* : qw.liu 2022-02-24
*/
UINT8 GetTrainIvocTransitmitStat(const UINT16 wTrainId)
{
UINT8 chRetVal = CI_ERROR;
UINT16 wBufIndex = 0U;
wBufIndex = GetTrainBufIndex(wTrainId);
if (TRAIN_SUM_MAX > wBufIndex)
{
chRetVal = gstTrainInfo[wBufIndex].chIvocTransmitStat;
}
else
{
chRetVal = CI_ERROR;
}
return chRetVal;
}
/*
*
* const UINT16 wTrainId, ID
@@ -1119,47 +1086,6 @@ UINT8 SetTrainTransmitStat(const UINT16 wTrainId,const UINT8 chTrainmitStat)
return chRetVal;
}
/*
* (IVOC)
* const UINT16 wTrainId, ID
* const UINT8 chTrainmitStat
* CI_ERROR:
CI_SUCCESS:
* 0x55 :
* 0xAA :
* 0xFF :
* : qw.liu 2025 - 05 - 08
*/
UINT8 SetTrainIvocTransmitStat(const UINT16 wTrainId, const UINT8 chTrainmitStat)
{
UINT8 chRetVal = CI_ERROR;
UINT16 wBufIndex = 0U;
wBufIndex = GetTrainBufIndex(wTrainId);
if (TRAIN_SUM_MAX > wBufIndex)
{
if ((TRAIN_COMM_STATE_GOOD == chTrainmitStat)
|| (TRAIN_COMM_STATE_BAD == chTrainmitStat)
|| (TRAIN_COMM_STATE_UNKNOWN == chTrainmitStat))
{
gstTrainInfo[wBufIndex].chIvocTransmitStat = chTrainmitStat;
gstTrainInfo[wBufIndex].dwIvocTransBadCyc = Get2oo2CurCycleNum();
chRetVal = CI_SUCCESS;
}
else
{
chRetVal = CI_ERROR;
}
}
else
{
chRetVal = CI_ERROR;
}
return chRetVal;
}
/*
*
* const UINT16 wTrainId, ID
@@ -3091,6 +3017,9 @@ void ClearTrainInfo(UINT16 wTrainId)
gstTrainInfo[wBufIndex].strJumpBackData.chJumpBackApplyState = TRAIN_JUMP_BACK_STATE_INVALID;/*初始化未申请*/
gstTrainInfo[wBufIndex].strJumpBackData.chJumpBackReplyState = TRAIN_JUMP_BACK_STATE_NONE;/*初始化允许默认值*/
gstTrainInfo[wBufIndex].strJumpBackData.dwJumpBackApplySn = 0U;/*初始化默认序列号*/
gstTrainInfo[wBufIndex].chPbtacsTransState = TRAIN_COMM_STATE_UNKNOWN; /*重置与PBTACS车未通信*/
gstTrainInfo[wBufIndex].dwPbtacsTransBadCyc = 0U;
}
else
{
@@ -4396,7 +4325,6 @@ void NeighborOutTrainProc(UINT8 chTiocId)
{
SetTrainMsgFromTiocId(wTrainId, 0u);
(void)SetTrainTransmitStat(wTrainId, TRAIN_COMM_STATE_BAD);
(void)SetTrainIvocTransmitStat(wTrainId, TRAIN_COMM_STATE_BAD);
}
else
{
@@ -4453,7 +4381,6 @@ void NeighborGoodTrainProc(UINT8 chTiocId)
{
SetTrainMsgFromTiocId(wTrainId, 0u);
(void)SetTrainTransmitStat(wTrainId, TRAIN_COMM_STATE_BAD);
(void)SetTrainIvocTransmitStat(wTrainId, TRAIN_COMM_STATE_BAD);
}
else
{
@@ -6531,28 +6458,6 @@ static UINT32 GetTrainTransBadCyc(const UINT16 wTrainId)
return dwRetVal;
}
/*
* (IVOC)
* const UINT16 wTrainId, ID
*
*/
static UINT32 GetTrainIvocTransBadCyc(const UINT16 wTrainId)
{
UINT32 dwRetVal = 0u;
UINT16 wBufIndex = 0U;
wBufIndex = GetTrainBufIndex(wTrainId);
if (TRAIN_SUM_MAX > wBufIndex)
{
dwRetVal = gstTrainInfo[wBufIndex].dwIvocTransBadCyc;
}
else
{
;
}
return dwRetVal;
}
/*
*
* const UINT16 wTrainId, ID
@@ -7814,23 +7719,21 @@ UINT8 GetTrainResRecycleOTStat(const UINT16 wTrainId)
UINT16 wBufIndex = 0U;
UINT32 overtimeCycleCount = 0U;
overtimeCycleCount = GetSystemParaTrainReCycleCount();
overtimeCycleCount = GetSystemParaTrainReCycleCount(); /*获取资源回收超限时间*/
wBufIndex = GetTrainBufIndex(wTrainId);
if (TRAIN_SUM_MAX > wBufIndex)
{
trainTransimitStat = GetTrainIvocTransitmitStat(wTrainId);
trainLoseCommCyc = GetTrainIvocTransBadCyc(wTrainId);
trainTransimitStat = GetPbtacsTrainTransState(wTrainId); /*获取与PBTACS车的通信状态*/
trainLoseCommCyc = GetPbtacsTrainTransBadCyc(wTrainId);
/*列车通信不好*/
if (TRAIN_COMM_STATE_BAD == trainTransimitStat)
{
overtimeStat = SystemOverTimeCheck(trainLoseCommCyc, overtimeCycleCount);
if (CI_TIME_OUT == overtimeStat)
{
/*超时*/
/*超时*/
chRetVal = CI_SUCCESS;
}
else
@@ -13000,7 +12903,6 @@ void InputMainTrainInformation(UINT16 wTrainId)
if (TRAIN_COMM_STATE_GOOD == chTransmitStat)
{
(void)SetTrainTransmitStat(wTrainId, TRAIN_COMM_STATE_BAD);
(void)SetTrainIvocTransmitStat(wTrainId, TRAIN_COMM_STATE_BAD);
SetTrainLevel(wTrainId, TRAIN_LEVEL_UR);
}
else
@@ -13863,7 +13765,6 @@ static void DoubleTrianComStateJuge(const UINT16 wTrainId, const UINT8 chComBadF
if (0u == trainMsgFromTiocId)
{
(void)SetTrainTransmitStat(wTrainId, TRAIN_COMM_STATE_BAD);
(void)SetTrainIvocTransmitStat(wTrainId, TRAIN_COMM_STATE_BAD);
}
else
{/*什么也不执行*/
@@ -13875,19 +13776,6 @@ static void DoubleTrianComStateJuge(const UINT16 wTrainId, const UINT8 chComBadF
if (0U == chComBadFlag)
{/*前面没设置通信中断*/
(void)SetTrainTransmitStat(wTrainId, TRAIN_COMM_STATE_GOOD);
if (CI_SUCCESS == chIvocCtxValid)
{
(void)SetTrainIvocTransmitStat(wTrainId, TRAIN_COMM_STATE_GOOD);
}
}
if (CI_ERROR == chIvocCtxValid)
{
chTransmitStat = GetTrainIvocTransitmitStat(wTrainId);
if (TRAIN_COMM_STATE_GOOD == chTransmitStat)
{
(void)SetTrainIvocTransmitStat(wTrainId, TRAIN_COMM_STATE_BAD);
}
}
}
@@ -14060,3 +13948,96 @@ UINT16* GetBlocLinkLogSecBuf(const UINT16 wTrainId)
}
return pLogSecBuf;
}
/*
* PBTACS列车通信状态
* const UINT16 wTrainId, ID
* const UINT8 chTrainmitStat
*
* Created By LQ 2026.06.09
*/
void SetPbtacsTrainTransState(const UINT16 wTrainId, const UINT8 chTrainmitStat)
{
UINT16 wBufIndex = 0U;
UINT32 dwCurCycNum = 0U;
wBufIndex = GetTrainBufIndex(wTrainId);
if ((TRAIN_SUM_MAX > wBufIndex)
&& ((TRAIN_COMM_STATE_GOOD == chTrainmitStat) || (TRAIN_COMM_STATE_BAD == chTrainmitStat) || (TRAIN_COMM_STATE_UNKNOWN == chTrainmitStat)))
{
gstTrainInfo[wBufIndex].chPbtacsTransState = chTrainmitStat;
if (TRAIN_COMM_STATE_BAD == chTrainmitStat)
{
if (0U == gstTrainInfo[wBufIndex].dwPbtacsTransBadCyc)
{
dwCurCycNum = Get2oo2CurCycleNum();
gstTrainInfo[wBufIndex].dwPbtacsTransBadCyc = dwCurCycNum; /*设置通信中断时间*/
}
else
{
/*已设置通信中断时间,不再重复刷新*/
}
}
else
{
gstTrainInfo[wBufIndex].dwPbtacsTransBadCyc = 0U;
}
}
else
{
/*异常分支,不处理*/
}
}
/*
* PBTACS列车通信状态
* const UINT16 wTrainId ID
* 0
* 0x55
* 0xAA
* 0xFF
* Created By LQ 2026.06.09
*/
UINT8 GetPbtacsTrainTransState(const UINT16 wTrainId)
{
UINT8 chRetVal = CI_ERROR;
UINT16 wBufIndex = 0U;
wBufIndex = GetTrainBufIndex(wTrainId);
if (TRAIN_SUM_MAX > wBufIndex)
{
chRetVal = gstTrainInfo[wBufIndex].chPbtacsTransState;
}
else
{
chRetVal = CI_ERROR;
}
return chRetVal;
}
/*
* PBTACS列车通信中断周期号
* const UINT16 wTrainId ID
*
* Created By LQ 2026.06.09
*/
UINT32 GetPbtacsTrainTransBadCyc(const UINT16 wTrainId)
{
UINT32 dwRetVal = 0U;
UINT16 wBufIndex = 0U;
wBufIndex = GetTrainBufIndex(wTrainId);
if (TRAIN_SUM_MAX > wBufIndex)
{
dwRetVal = gstTrainInfo[wBufIndex].dwPbtacsTransBadCyc;
}
else
{
;
}
return dwRetVal;
}
+30 -25
View File
@@ -227,7 +227,6 @@ typedef struct S_TrainInfoStru
UINT16 wTrainSpeed; /*速度*/
UINT8 chTrainZeroState; /*列车零速状态*/
UINT8 chTransmitStat; /*与列车传输状态*/
UINT8 chIvocTransmitStat; /*与IVOC列车传输状态*/
UINT8 chHeadScreenStat; /*列车前筛标志*/
UINT8 chTailScreenStat; /*列车后筛标志*/
TrainSafeLocStru strSafeLoc; /*列车安全位置*/
@@ -253,7 +252,6 @@ typedef struct S_TrainInfoStru
UINT8 chStopSteadyState; /*列车停准停稳状态*/
UINT8 chSleepCancleFlag; /*清除休眠车标志*/
UINT32 dwTransBadCyc; /*通信中断周期*/
UINT32 dwIvocTransBadCyc; /*通信中断周期*/
UINT8 chEaNum; /*通信列车回复的区间疏散数量*/
TrainEaStru strTrainEaInfo[EA_MAX_NUM]; /*列车恢复区间疏散信息*/
UINT8 chEaCmd; /*区间疏散命令*/
@@ -297,6 +295,8 @@ typedef struct S_TrainInfoStru
UINT8 chTrainPostionMode; /*列车位置模式,0x10 使用IVOC位置,0x14使用VOBC位置*/
BlocLinkInfoStru strBlocLinkData; /*点连式信息*/
UINT8 chPbtacsTransState; /*RC与PBTACS列车通信状态(该变量用于资源回收功能):0x55-通信正常,0xAA-通信中断,0xFF-未知*/
UINT32 dwPbtacsTransBadCyc; /*RC与PBTACS列车通信中断周期(该变量用于资源回收功能)*/
}TrainInfoStru;
@@ -438,16 +438,6 @@ UINT16 GetTrainBufIndex(const UINT16 wTrainId);
*/
UINT8 GetTrainTransitmitStat(const UINT16 wTrainId);
/*
* (IVOC)
* const UINT16 wTrainId, ID
* 0:
* 0x55:
* 0xAA:
* 0xFF:
* : qw.liu 2022-02-24
*/
UINT8 GetTrainIvocTransitmitStat(const UINT16 wTrainId);
/*
*
* const UINT16 wTrainId, ID
@@ -607,19 +597,6 @@ CI_SUCCESS:
*/
UINT8 SetTrainTransmitStat(const UINT16 wTrainId, const UINT8 chTrainmitStat);
/*
* (IVOC)
* const UINT16 wTrainId, ID
* const UINT8 chTrainmitStat
* CI_ERROR:
CI_SUCCESS:
* 0x55 :
* 0xAA :
* 0xFF :
* : qw.liu 2025 - 05 - 08
*/
UINT8 SetTrainIvocTransmitStat(const UINT16 wTrainId, const UINT8 chTrainmitStat);
/*
*
* const UINT16 wTrainId, ID
@@ -3128,6 +3105,34 @@ UINT8 GetBlocLinkLogSecNum(const UINT16 wTrainId);
*/
UINT16* GetBlocLinkLogSecBuf(const UINT16 wTrainId);
/*
* PBTACS列车通信状态
* const UINT16 wTrainId, ID
* const UINT8 chTrainmitStat
*
* Created By LQ 2026.06.09
*/
void SetPbtacsTrainTransState(const UINT16 wTrainId, const UINT8 chTrainmitStat);
/*
* PBTACS列车通信状态
* const UINT16 wTrainId ID
* 0
* 0x55
* 0xAA
* 0xFF
* Created By LQ 2026.06.09
*/
UINT8 GetPbtacsTrainTransState(const UINT16 wTrainId);
/*
* PBTACS列车通信中断周期号
* const UINT16 wTrainId ID
*
* Created By LQ 2026.06.09
*/
UINT32 GetPbtacsTrainTransBadCyc(const UINT16 wTrainId);
#ifdef __cplusplus
}
#endif
+36 -41
View File
@@ -37,8 +37,15 @@
#include "PFM_RemoteUpdate.h"
#include "MSCP_Define.h"
#include "CFM_Raw.h"
#include "CM_IP.h"
#include <stdarg.h>
/** @brief 网卡名 */
#define CFM_IP_INTERFACE_2oo2 "fec0"
#define CFM_IP_INTERFACE_2x2 "fec1"
#define CFM_IP_INTERFACE_MAINTAIN "wm0"
#define CFM_IP_NETMASK "255.255.255.0"
#define CFM_2oo2_MSG_NUM_MAX (200u)
#define CFM_2X2_MSG_NUM_MAX (200u)
#define CFM_OUTNET_MSG_NUM_MAX (5000u)
@@ -406,7 +413,7 @@ static void s_SockInit_2oo2(void)
rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Assert, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Assert,0u, ENUM_UNICAST);
CM_NM_ASSERT(ENUM_CM_TRUE == rt, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_26);
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
/*- 创建维护模式下的2取socket */
rt = CM_UDP_Socket_Create(&s_CFM_Sock.Sock_2oo2_Maintenance, CM_FALSE, (CM_UINT32)inet_addr(g_PFM_Cfg.Local_Cfg.IP_2oo2), g_PFM_Cfg.Local_Cfg.Port_2oo2_Maintenance, 0u, ENUM_UNICAST);
@@ -475,7 +482,7 @@ static void s_NetInit_2oo2(void)
rtCheck = CM_Thread_Create((CM_THREAD_T*)NULL, (CM_THREAD_FUNC_T)t_UdpRecvThread, "2oo2_Rx", 0, CM_TASK_PRIORITY_73, (CM_Thread_Arg_Struct_T*)&s_CFM_Rx2oo2_Assert);
CM_NM_ASSERT(CM_TRUE == rtCheck, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_29);
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
CM_NM_ASSERT(s_CFM_Rx2oo2Mainteance.IP != NULL, NET_MODE,DARK_FAULT_CODE_FUN_ORDER_1, TSCP_DARK_ASSERT_19);
(void)sprintf(s_CFM_Rx2oo2Mainteance.IP, "%s", g_PFM_Cfg.Local_Cfg.IP_2oo2);
@@ -1031,6 +1038,7 @@ CM_INT32 CFM_2oo2_Currency_NoSplit(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl,IN const
/*发送相关*/
CM_UINT8 sendBuf[1500] = {0u};
CM_UINT32 sysCyc = DFM_GetBirthCount(); /*平台周期号*/
CM_UINT16 ARQ_Cut = 0u; /* 记录重传请求次数 */
CM_UINT64 curTick = 0u; /* 当前时刻 */
CM_UINT64 sTick = 0u; /* 起始Tick */
@@ -1118,6 +1126,7 @@ CM_INT32 CFM_2oo2_Currency_NoSplit(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl,IN const
{
/*发送重传请求*/
(void)CFM_2oo2_SendARQ_Currency(p_2oo2_Ctrl,ENUM_2oo2_NET_ARQ);
ARQ_Cut++;
/*- 重置起始时间*/
sTick = CM_GetTick();
}
@@ -1126,6 +1135,10 @@ CM_INT32 CFM_2oo2_Currency_NoSplit(STRU_2OO2_NET_NO_PACK_T *p_2oo2_Ctrl,IN const
/*- 无处理 */
}
}
if(ENUM_BOARDSTATE_RUN == PFM_GetBoardState() && SFM_2oo2_ARQ_MAX_CNT <= ARQ_Cut)
{
CM_ASSERT(0,NET_MODE, DARK_FAULT_CODE_FUN_ORDER_53, TSCP_DARK_ASSERT_1);
}
if((CM_TRUE == mineRcvFlag) && (CM_TRUE == peerRcvFlag))
{
/*- 结束接收 */
@@ -3199,7 +3212,7 @@ static void s_NetInit_RemoteUpdate(void)
CM_BOOL rtCheck; /* 临时变量 */
CM_INT32 i = 0; /* 循环变量 */
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
/* 维护模式下用到的cfg全局变量数据拷贝,防护内存自检宕机引起的维护模式下使用cfg全局变量异常 */
g_RMUP_Cfg.CPU_ID=g_PFM_Cfg.CPU_ID;
@@ -3319,24 +3332,17 @@ void CFM_Net_Init(void)
void CFM_NetworkCard_Init(void)
{
/*- 变量初始化 */
CM_CHAR str[1024] = {0};
ENUM_CM_RETURN ret = ENUM_CM_FALSE;
/*- 配置2取网卡ip */
(void)memset(str, 0, sizeof(str));
(void)sprintf(str, "ifconfig %s %s", "fec0", g_PFM_Cfg.Local_Cfg.IP_2oo2);
(void)printf("%s\n",str);
(void)system(str);
/*- 配置2取网卡ip */
ret = CM_IP_TrySetIpAddrRetry(CFM_IP_INTERFACE_2oo2, g_PFM_Cfg.Local_Cfg.IP_2oo2, CFM_IP_NETMASK, 2);
CM_NM_ASSERT(ENUM_CM_TRUE == ret, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_42, TSCP_DARK_ASSERT_1);
/*- 配置通用网卡ip */
(void)memset(str, 0, sizeof(str));
(void)sprintf(str, "ifconfig %s %s", "fec1", g_PFM_Cfg.Local_Cfg.IP_Com);
(void)printf("%s\n",str);
(void)system(str);
ret = CM_IP_TrySetIpAddrRetry(CFM_IP_INTERFACE_2x2, g_PFM_Cfg.Local_Cfg.IP_Com, CFM_IP_NETMASK, 2);
CM_NM_ASSERT(ENUM_CM_TRUE == ret, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_42, TSCP_DARK_ASSERT_2);
/*- 配置维护网卡ip */
(void)memset(str, 0, sizeof(str));
(void)sprintf(str, "ifconfig %s %s", "wm0", g_PFM_Cfg.Local_Cfg.IP_Maintain);
(void)printf("%s\n",str);
(void)system(str);
ret = CM_IP_TrySetIpAddrRetry(CFM_IP_INTERFACE_MAINTAIN, g_PFM_Cfg.Local_Cfg.IP_Maintain, CFM_IP_NETMASK, 2);
CM_NM_ASSERT(ENUM_CM_TRUE == ret, NET_MODE, DARK_FAULT_CODE_FUN_ORDER_42, TSCP_DARK_ASSERT_3);
}
/**
* @brief UDP接收线程
@@ -3779,6 +3785,7 @@ static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg)
CM_UINT16 rmtPort_raw;/* 对方透传端口 */
struct in_addr serveraddr;/* 源ip */
CM_UINT8 Result = 0x0u;/* 请求处理结果 */
CM_UINT16 innetID = 0U;
#if QNX
void* pmask = NULL;
/*- 本线程锁定在 A53 core 1 */
@@ -3786,25 +3793,7 @@ static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg)
(void)ThreadCtl(_NTO_TCTL_RUNMASK, pmask);
#endif
MSCP_LOG_MSG("IP:%s:%d UDP recv Start\n", pCtrl->IP, pCtrl->port);
/*- 获取目的IP端口 */
pCom = PFM_INI_InnetID2Addr(g_Maintenance_Id);
if (NULL != pCom)
{
/*- 本机是否为CPU1 */
if (1u == g_PFM_Cfg.CPU_ID)
{
rmtIP = pCom->IP_G;
rmtPort_safe = pCom->Port_Safe_G;
rmtPort_raw = pCom->Port_Raw_G;
}
else
{
rmtIP = pCom->IP_P;
rmtPort_safe = pCom->Port_Safe_P;
rmtPort_raw = pCom->Port_Raw_P;
}
}
else
if(0u == g_Maintenance_Ids[0])
{
(void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(NET_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_1));
MSCP_LOG_MSG("Map Value From g_Maintenance_Id Error!!!\n");
@@ -3821,10 +3810,16 @@ static CM_THREAD_FUNC_T t_RemoteUpdateThread(IN CM_Thread_Arg_Struct_T* arg)
if (len > 0)
{
MSCP_LOG_DATALEN(rcvBuf, len, "t_RemoteUpdateThread rcvBuflen");
/*- 源IP端口是否合法 */
if ((srcIP == rmtIP) && ((srcPort== rmtPort_safe) || (srcPort == rmtPort_raw)))
pCom = PFM_INI_InnetIP2Addr(srcIP, srcPort);
rt = ENUM_CM_FALSE;
if(NULL != pCom)
{
if (srcPort== rmtPort_safe)
rt = PFM_MaintenanceID_Search(pCom->InnetID);
}
/*- 源IP端口是否合法 */
if (ENUM_CM_TRUE == rt)
{
if (srcPort== pCom->Port_Safe_G || srcPort == pCom->Port_Safe_P)
{
/*- @alias 需要解sfp协议的远程部署命令 */
/*- @alias 将收到的完整帧写入线程接收队列 */
@@ -4039,7 +4034,7 @@ void CFM_NetFlush(void)
{
/*无处理 */
}
if((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
/*- 内网远程部署接收缓冲区清空 */
rt = CM_MQ_Flush(&s_CFM_RxRemoteUpdate.MsgQ);
+2
View File
@@ -41,6 +41,8 @@ extern "C"
#define CFM_INNET_RAW_MSG_NUM_MAX (7000u)
#define CFM_OUTNET_RAW_MSG_NUM_MAX (1000u)
#define SFM_2oo2_ARQ_MAX_CNT ((ENUM_INIT_OVER<=PFM_LOG_GET_INIT_STAGE())?(g_PFM_Cfg.CYC_TIME/50u+1u):6000u)
/*暗文类型宏定义*/
#define DARK_LOG_STRING (0x55u)
+437
View File
@@ -0,0 +1,437 @@
#include "CM_IP.h"
#include "CM_Memory.h"
#include "PFM_Log.h"
#include <arpa/inet.h>
#include <net/if.h>
#include <netinet/in.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/sockio.h>
#include <unistd.h>
/**
* @brief IP接口的输入参数
* @param[in] pNetCardName
* @param[in] pIpAddr IPv4地址字符串
* @param[in] pNetMask
* @return
*/
static ENUM_CM_RETURN CM_IP_SetIpAddrParamCheck(IN const CM_CHAR *pNetCardName,
IN const CM_CHAR *pIpAddr,
IN const CM_CHAR *pNetMask)
{
ENUM_CM_RETURN rt = ENUM_CM_FALSE;
/* 按使用顺序检查参数,避免在空指针上执行strlen等操作。 */
if (NULL == pNetCardName)
{
printf("CM_IP_SetIpAddr netcard name is NULL.\n");
}
else if (strlen(pNetCardName) >= IFNAMSIZ)
{
printf("CM_IP_SetIpAddr netcard name is too long: %s.\n", pNetCardName);
}
else if (NULL == pIpAddr)
{
printf("CM_IP_SetIpAddr ipAddr is NULL.\n");
}
else if (NULL == pNetMask)
{
printf("CM_IP_SetIpAddr netMask is NULL.\n");
}
else
{
rt = ENUM_CM_TRUE;
}
return rt;
}
/**
* @brief IP接口的输入参数
* @param[in] pNetCardName
* @param[out] pIpAddr IPv4地址输出缓存
* @param[in] ipAddrLen IPv4地址输出缓存长度
* @param[out] pNetMask
* @param[in] netMaskLen
* @return
*/
static ENUM_CM_RETURN CM_IP_GetIpAddrParamCheck(IN const CM_CHAR *pNetCardName,
OUT CM_CHAR *pIpAddr,
IN CM_UINT32 ipAddrLen,
OUT CM_CHAR *pNetMask,
IN CM_UINT32 netMaskLen)
{
ENUM_CM_RETURN rt = ENUM_CM_FALSE;
/* 输出缓存需要能够容纳最长IPv4字符串及结尾字符。 */
if (NULL == pNetCardName)
{
printf("CM_IP_GetIpAddr netcard name is NULL.\n");
}
else if (strlen(pNetCardName) >= IFNAMSIZ)
{
printf("CM_IP_GetIpAddr netcard name is too long: %s.\n", pNetCardName);
}
else if (NULL == pIpAddr)
{
printf("CM_IP_GetIpAddr ipAddr is NULL.\n");
}
else if (CM_IP_ADDR_STR_LEN > ipAddrLen)
{
printf("CM_IP_GetIpAddr ipAddr buffer is too small.\n");
}
else if (NULL == pNetMask)
{
printf("CM_IP_GetIpAddr netMask is NULL.\n");
}
else if (CM_IP_ADDR_STR_LEN > netMaskLen)
{
printf("CM_IP_GetIpAddr netMask buffer is too small.\n");
}
else
{
rt = ENUM_CM_TRUE;
}
return rt;
}
/**
* @brief IPv4地址
* @param[in] pNetCardName
* @param[in] pIpAddr IPv4点分十进制字符串
* @param[in] pNetMask
* @return
*/
ENUM_CM_RETURN CM_IP_SetIpAddr(IN const CM_CHAR *pNetCardName, IN const CM_CHAR *pIpAddr,
IN const CM_CHAR *pNetMask)
{
ENUM_CM_RETURN rt = ENUM_CM_FALSE;
ENUM_CM_RETURN retMem = ENUM_CM_FALSE;
ENUM_CM_RETURN paramCheckRt = ENUM_CM_FALSE;
CM_INT32 sock = -1;
CM_INT32 ret = 0;
CM_INT32 ipConvertRet = 0;
CM_INT32 netMaskConvertRet = 0;
struct ifreq ifReq;
struct sockaddr_in *pSockAddr = NULL;
struct in_addr netMaskAddr;
/* 参数检查失败时不创建socket,也不修改网卡配置。 */
paramCheckRt = CM_IP_SetIpAddrParamCheck(pNetCardName, pIpAddr, pNetMask);
if (ENUM_CM_TRUE == paramCheckRt)
{
/* ifreq在本函数中只初始化一次,网卡名和地址族供两个ioctl共用。 */
retMem = CM_Memset((void*)&ifReq, (CM_UINT8)0U, (CM_SIZE_T)sizeof(struct ifreq),
(CM_SIZE_T)sizeof(struct ifreq));
if (ENUM_CM_TRUE != retMem)
{
printf("CM_IP_SetIpAddr memset ifreq failed.\n");
}
else
{
(void)strncpy(ifReq.ifr_name, pNetCardName, IFNAMSIZ - 1);
pSockAddr = (struct sockaddr_in*)&ifReq.ifr_addr;
#ifdef QNX
pSockAddr->sin_len = sizeof(struct sockaddr_in);
#endif
pSockAddr->sin_family = AF_INET;
/* 先完成IP和掩码格式转换,任一格式错误都不执行ioctl。 */
ipConvertRet = (CM_INT32)inet_pton(AF_INET, pIpAddr, &pSockAddr->sin_addr);
netMaskConvertRet = (CM_INT32)inet_pton(AF_INET, pNetMask, &netMaskAddr);
if (1 != ipConvertRet)
{
if (0 == ipConvertRet)
{
printf("CM_IP_SetIpAddr invalid ip address: %s.\n", pIpAddr);
}
else
{
perror("CM_IP_SetIpAddr inet_pton");
}
}
else if (1 != netMaskConvertRet)
{
if (0 == netMaskConvertRet)
{
printf("CM_IP_SetIpAddr invalid netmask: %s.\n", pNetMask);
}
else
{
perror("CM_IP_SetIpAddr netmask inet_pton");
}
}
else
{
sock = (CM_INT32)socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0)
{
perror("CM_IP_SetIpAddr socket");
}
else
{
/*- 通过临时UDP socket设置指定网卡IP */
ret = (CM_INT32)ioctl(sock, SIOCSIFADDR, &ifReq);
if (0 != ret)
{
perror("CM_IP_SetIpAddr ioctl SIOCSIFADDR");
MSCP_LOG_MSG("CM_IP_SetIpAddr ioctl SIOCSIFADDR, %s:%s:%s\n",pNetCardName, pIpAddr, strerror(errno));
}
else
{
/* 保留网卡名和地址族,只清除已使用的IP地址字段后写入掩码。 */
retMem = CM_Memset((void*)&pSockAddr->sin_addr, (CM_UINT8)0U,
(CM_SIZE_T)sizeof(struct in_addr),
(CM_SIZE_T)sizeof(struct in_addr));
if (ENUM_CM_TRUE != retMem)
{
printf("CM_IP_SetIpAddr memset address failed.\n");
}
else
{
pSockAddr->sin_addr = netMaskAddr;
ret = (CM_INT32)ioctl(sock, SIOCSIFNETMASK, &ifReq);
if (0 != ret)
{
perror("CM_IP_SetIpAddr ioctl SIOCSIFNETMASK");
MSCP_LOG_MSG("CM_IP_SetIpAddr ioctl SIOCSIFNETMASK, %s:%s:%s\n",
pNetCardName, pNetMask, strerror(errno));
}
else
{
rt = ENUM_CM_TRUE;
}
}
}
(void)close(sock);
}
}
}
}
return rt;
}
/**
* @brief IPv4地址并读回校验
* @param[in] pNetCardName
* @param[in] pIpAddr IPv4点分十进制字符串
* @param[in] pNetMask
* @return
*/
ENUM_CM_RETURN CM_IP_TrySetIpAddr(IN const CM_CHAR *pNetCardName, IN const CM_CHAR *pIpAddr,
IN const CM_CHAR *pNetMask)
{
ENUM_CM_RETURN rt = ENUM_CM_FALSE;
ENUM_CM_RETURN setRt = ENUM_CM_FALSE;
ENUM_CM_RETURN getRt = ENUM_CM_FALSE;
CM_CHAR ipAddrRead[CM_IP_ADDR_STR_LEN] = { 0 };
CM_CHAR netMaskRead[CM_IP_ADDR_STR_LEN] = { 0 };
/* 设置成功后立即读回,IP和掩码均一致才认为配置成功。 */
setRt = CM_IP_SetIpAddr(pNetCardName, pIpAddr, pNetMask);
if (ENUM_CM_TRUE != setRt)
{
printf("CM_IP_TrySetIpAddr set ip failed.\n");
}
else
{
getRt = CM_IP_GetIpAddr(pNetCardName, ipAddrRead, (CM_UINT32)sizeof(ipAddrRead),
netMaskRead, (CM_UINT32)sizeof(netMaskRead));
if (ENUM_CM_TRUE != getRt)
{
printf("CM_IP_TrySetIpAddr get ip failed.\n");
}
else if (0 != strcmp(ipAddrRead, pIpAddr))
{
printf("CM_IP_TrySetIpAddr ip mismatch, set:%s, read:%s.\n", pIpAddr, ipAddrRead);
}
else if (0 != strcmp(netMaskRead, pNetMask))
{
printf("CM_IP_TrySetIpAddr netmask mismatch, set:%s, read:%s.\n", pNetMask, netMaskRead);
}
else
{
rt = ENUM_CM_TRUE;
}
}
return rt;
}
/**
* @brief IPv4地址
* @param[in] pNetCardName
* @param[in] pIpAddr IPv4点分十进制字符串
* @param[in] pNetMask
* @param[in] retryTimes retryTimes + 1
* @return
*/
ENUM_CM_RETURN CM_IP_TrySetIpAddrRetry(IN const CM_CHAR *pNetCardName, IN const CM_CHAR *pIpAddr,
IN const CM_CHAR *pNetMask, IN CM_UINT32 retryTimes)
{
ENUM_CM_RETURN rt = ENUM_CM_FALSE;
CM_UINT32 tryIndex = 0u;
CM_CHAR log_buf[1024] = {0};
/* retryTimes表示首次尝试失败后的额外重试次数。 */
while (CM_TRUE)
{
if (0u != tryIndex)
{
printf("CM_IP_TrySetIpAddrRetry retry %u.\n", tryIndex);
}
else
{
/* No action. */
}
rt = CM_IP_TrySetIpAddr(pNetCardName, pIpAddr, pNetMask);
if (ENUM_CM_TRUE == rt)
{
break;
}
else if (tryIndex >= retryTimes)
{
break;
}
else
{
tryIndex++;
}
}
if (ENUM_CM_TRUE == rt)
{
(void)snprintf(log_buf, sizeof(log_buf), "IP Set Success, Interface:%s, IP:%s, NetMask:%s, retryTimes:%u.\n",
(NULL != pNetCardName) ? pNetCardName : "NULL",
(NULL != pIpAddr) ? pIpAddr : "NULL",
(NULL != pNetMask) ? pNetMask : "NULL", tryIndex);
}
else
{
(void)snprintf(log_buf, sizeof(log_buf), "IP Set Failed, Interface:%s, IP:%s, NetMask:%s, retryTimes:%u.\n",
(NULL != pNetCardName) ? pNetCardName : "NULL",
(NULL != pIpAddr) ? pIpAddr : "NULL",
(NULL != pNetMask) ? pNetMask : "NULL", tryIndex);
}
printf("%s", log_buf);
MSCP_LOG_MSG("%s", log_buf);
return rt;
}
/**
* @brief IPv4地址
* @param[in] pNetCardName
* @param[out] pIpAddr IPv4点分十进制字符串输出缓存
* @param[in] ipAddrLen pIpAddr缓存长度
* @param[out] pNetMask
* @param[in] netMaskLen pNetMask缓存长度
* @return
*/
ENUM_CM_RETURN CM_IP_GetIpAddr(IN const CM_CHAR *pNetCardName, OUT CM_CHAR *pIpAddr,
IN CM_UINT32 ipAddrLen, OUT CM_CHAR *pNetMask,
IN CM_UINT32 netMaskLen)
{
ENUM_CM_RETURN rt = ENUM_CM_FALSE;
ENUM_CM_RETURN retMem = ENUM_CM_FALSE;
ENUM_CM_RETURN paramCheckRt = ENUM_CM_FALSE;
CM_INT32 sock = -1;
CM_INT32 ret = 0;
struct ifreq ifReq;
struct sockaddr_in *pSockAddr = NULL;
const CM_CHAR *pRetIpAddr = NULL;
/* 参数合法后再清空输出,防止空指针或短缓存被写入。 */
paramCheckRt = CM_IP_GetIpAddrParamCheck(pNetCardName, pIpAddr, ipAddrLen,
pNetMask, netMaskLen);
if (ENUM_CM_TRUE == paramCheckRt)
{
pIpAddr[0] = '\0';
pNetMask[0] = '\0';
/* ifreq在本函数中只初始化一次,随后仅复用其中的地址字段。 */
retMem = CM_Memset((void*)&ifReq, (CM_UINT8)0U, (CM_SIZE_T)sizeof(struct ifreq),
(CM_SIZE_T)sizeof(struct ifreq));
if (ENUM_CM_TRUE != retMem)
{
printf("CM_IP_GetIpAddr memset ifreq failed.\n");
}
else
{
(void)strncpy(ifReq.ifr_name, pNetCardName, IFNAMSIZ - 1);
pSockAddr = (struct sockaddr_in*)&ifReq.ifr_addr;
#ifdef QNX
pSockAddr->sin_len = sizeof(struct sockaddr_in);
#endif
pSockAddr->sin_family = AF_INET;
sock = (CM_INT32)socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0)
{
perror("CM_IP_GetIpAddr socket");
}
else
{
/*- 通过临时UDP socket读取指定网卡IP */
ret = (CM_INT32)ioctl(sock, SIOCGIFADDR, &ifReq);
if (0 != ret)
{
perror("CM_IP_GetIpAddr ioctl SIOCGIFADDR");
MSCP_LOG_MSG("CM_IP_GetIpAddr ioctl SIOCGIFADDR, %s:%s:%s\n",pNetCardName, pIpAddr, strerror(errno));
}
else
{
/*- 将二进制地址转换为点分十进制IP字符串 */
pRetIpAddr = (const CM_CHAR*)inet_ntop(AF_INET, &pSockAddr->sin_addr, pIpAddr, ipAddrLen);
if (NULL == pRetIpAddr)
{
perror("CM_IP_GetIpAddr inet_ntop");
}
else
{
/* 保留网卡名和地址族,只清除IP查询写入的地址字段。 */
retMem = CM_Memset((void*)&pSockAddr->sin_addr, (CM_UINT8)0U,
(CM_SIZE_T)sizeof(struct in_addr),
(CM_SIZE_T)sizeof(struct in_addr));
if (ENUM_CM_TRUE != retMem)
{
printf("CM_IP_GetIpAddr memset address failed.\n");
}
else
{
ret = (CM_INT32)ioctl(sock, SIOCGIFNETMASK, &ifReq);
if (0 != ret)
{
perror("CM_IP_GetIpAddr ioctl SIOCGIFNETMASK");
MSCP_LOG_MSG("CM_IP_GetIpAddr ioctl SIOCGIFNETMASK, %s:%s\n",
pNetCardName, strerror(errno));
}
else
{
pRetIpAddr = (const CM_CHAR*)inet_ntop(AF_INET, &pSockAddr->sin_addr,
pNetMask, netMaskLen);
if (NULL == pRetIpAddr)
{
perror("CM_IP_GetIpAddr netmask inet_ntop");
}
else
{
rt = ENUM_CM_TRUE;
}
}
}
}
}
(void)close(sock);
}
}
}
return rt;
}
+65
View File
@@ -0,0 +1,65 @@
/**
* @file CM_IP.h
* @brief IP地址
*/
#ifndef CM_IP_H_
#define CM_IP_H_
#include "CM_Types.h"
/** @brief IPv4点分十进制字符串长度,包含字符串结束符 */
#define CM_IP_ADDR_STR_LEN (16u)
/**
* @brief IPv4地址
* @param[in] pNetCardName
* @param[in] pIpAddr IPv4点分十进制字符串"192.168.1.10"
* @param[in] pNetMask "255.255.255.0"
* @return
* - ENUM_CM_TRUE
* - ENUM_CM_FALSE
*/
ENUM_CM_RETURN CM_IP_SetIpAddr(IN const CM_CHAR *pNetCardName, IN const CM_CHAR *pIpAddr,
IN const CM_CHAR *pNetMask);
/**
* @brief IPv4地址并读回校验
* @param[in] pNetCardName
* @param[in] pIpAddr IPv4点分十进制字符串"192.168.1.10"
* @param[in] pNetMask
* @return
* - ENUM_CM_TRUE
* - ENUM_CM_FALSE
*/
ENUM_CM_RETURN CM_IP_TrySetIpAddr(IN const CM_CHAR *pNetCardName, IN const CM_CHAR *pIpAddr,
IN const CM_CHAR *pNetMask);
/**
* @brief IPv4地址
* @param[in] pNetCardName
* @param[in] pIpAddr IPv4点分十进制字符串"192.168.1.10"
* @param[in] pNetMask
* @param[in] retryTimes retryTimes + 1
* @return
* - ENUM_CM_TRUE
* - ENUM_CM_FALSE
*/
ENUM_CM_RETURN CM_IP_TrySetIpAddrRetry(IN const CM_CHAR *pNetCardName, IN const CM_CHAR *pIpAddr,
IN const CM_CHAR *pNetMask, IN CM_UINT32 retryTimes);
/**
* @brief IPv4地址
* @param[in] pNetCardName
* @param[out] pIpAddr IPv4点分十进制字符串输出缓存
* @param[in] ipAddrLen pIpAddr缓存长度CM_IP_ADDR_STR_LEN
* @param[out] pNetMask
* @param[in] netMaskLen pNetMask缓存长度CM_IP_ADDR_STR_LEN
* @return
* - ENUM_CM_TRUE
* - ENUM_CM_FALSE
*/
ENUM_CM_RETURN CM_IP_GetIpAddr(IN const CM_CHAR *pNetCardName, OUT CM_CHAR *pIpAddr,
IN CM_UINT32 ipAddrLen, OUT CM_CHAR *pNetMask,
IN CM_UINT32 netMaskLen);
#endif
+1 -1
View File
@@ -160,7 +160,7 @@ CM_UINT8 MSCP_AppSendMsg(IN ENUM_MSCP_MSG_CHN_T ch, IN CM_UINT16 dstName,
/*- 返回 */
break;
case ENUM_MSG_INNET_MAINTENANCE: /*-< 远程部署内网安全通信 */
rt = Prtcl_InnetSafe_AppRmSend(txBuf, txLen);
rt = Prtcl_InnetSafe_AppRmSend(dstName, txBuf, txLen);
MSCP_LOG_MSG("MSCP_AppSendMsg txLen = %d \n",txLen);
MSCP_LOG_BIN(txBuf,txLen);
/*- 返回 */
+2 -2
View File
@@ -40,11 +40,11 @@
CM_CHAR FS_FILE_PATH[100];
/** 平台软件版本号 */
const CM_UINT8 MSCP_SW_VERION[4] = { 93u, 1u, 1u, 63u };
const CM_UINT8 MSCP_SW_VERION[4] = { 93u, 1u, 1u, 66u };
/** 驱动软件版本号 */
CM_UINT8 MSCP_DRV_VERION[4] = {0};
/** 与维护一体机接口文档版本号(接口文档发生改变时升级版本号) */
CM_UINT16 TSCP_DOC_VERION[2] = {38u,0u};
CM_UINT16 TSCP_DOC_VERION[2] = {40u,0u};
/** 操作系统版本号 */
CM_UINT8 TSCP_QNX_VERION[10] = {0u};
+1 -1
View File
@@ -262,7 +262,7 @@ extern CM_UINT8 TSCP_QNX_VERION[10]; /** 操作系统版本号 */
CM_UINT32 M_RemoteUpdate_Enable;/**< 远程部署内网安全通信功能开关 */
CM_UINT8 M_Area_Enable; /**< 倒切配置,0x00为兼容的主线版本,0x55为CI0xAA为RC */
CM_UINT8 M_AREA_SEB_Enable; /**< 区域串口板卡使能开关 */
CM_UINT16 ID_Maintenance; /*维护终端ID*/
CM_UINT16 ID_Maintenance[257]; /*维护终端ID,可能有多个,固定下标0表示ID个数, 下标1表示主要ID*/
CM_CHAR Start_Path[32]; /**< 程序启动路径 */
CM_INT32 reboot_replycount; /**< 重启确认报文回复次数 */
CM_UINT8 M_AutoReboot_Count; /**< 自动重启次数 */
+23 -21
View File
@@ -401,15 +401,14 @@ void MSCP_ASSERT(unsigned int x, unsigned int MaintenanceFlag, unsigned short Mo
if(ENUM_INIT_MAIN_NET <= PFM_LOG_GET_INIT_STAGE())
{
CFM_LogCiphertextSend();
}
/*- 等待日志队列全部发送*/
LogQisEmpty = CFM_LogQ_isEmpty();
while (ENUM_CM_FALSE == LogQisEmpty)
{
CFM_LogCiphertextSend();
CM_Sleep(5u);
/*- 等待日志队列全部发送*/
LogQisEmpty = CFM_LogQ_isEmpty();
while (ENUM_CM_FALSE == LogQisEmpty)
{
CFM_LogCiphertextSend();
CM_Sleep(5u);
LogQisEmpty = CFM_LogQ_isEmpty();
}
}
/*- 退出运营故障码*/
@@ -538,14 +537,14 @@ void MSCP_REBOOT_ASSERT(unsigned int x, unsigned int MaintenanceFlag,unsigned sh
if(ENUM_INIT_MAIN_NET <= PFM_LOG_GET_INIT_STAGE())
{
CFM_LogCiphertextSend();
}
/*- 等待日志队列全部发送*/
LogQisEmpty = CFM_LogQ_isEmpty();
while (ENUM_CM_FALSE == LogQisEmpty)
{
CFM_LogCiphertextSend();
CM_Sleep(5u);
/*- 等待日志队列全部发送*/
LogQisEmpty = CFM_LogQ_isEmpty();
while (ENUM_CM_FALSE == LogQisEmpty)
{
CFM_LogCiphertextSend();
CM_Sleep(5u);
LogQisEmpty = CFM_LogQ_isEmpty();
}
}
/* 启动跟踪录制 */
@@ -940,7 +939,7 @@ static void PFM_LOG_MaintenanceMode(ENUM_BOARD_STATE_T MaintenanceFlag, CM_UINT3
while (1)
{
/*- 远程部署功能开关开启,并且维护id应用已设置不是初始值0 是否允许进入维护模式*/
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) && (0x00u != g_Maintenance_Id) && (0x55 == MaintenanceFlag) && ((ENUM_BOARDSTATE_EXIT == boardState) || (ENUM_BOARDSTATE_UPDATE == boardState) || (ENUM_BOARDSTATE_DEFAULT == boardState)))
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) && (0u < g_Maintenance_Ids[0]) && (0x55 == MaintenanceFlag) && ((ENUM_BOARDSTATE_EXIT == boardState) || (ENUM_BOARDSTATE_UPDATE == boardState) || (ENUM_BOARDSTATE_DEFAULT == boardState)))
{
MSCP_LOG_MSG("----------Maintenance Mode count = %d----------\n",s_count);
@@ -989,8 +988,8 @@ static void PFM_LOG_MaintenanceMode(ENUM_BOARD_STATE_T MaintenanceFlag, CM_UINT3
}
else
{
MSCP_LOG_MSG("MaintenanceFlag = %d, g_Maintenance_Id = %d, g_RMUP_Cfg.M_RemoteUpdate_Enable = %d, boardState = %d\n", \
MaintenanceFlag,g_Maintenance_Id,g_RMUP_Cfg.M_RemoteUpdate_Enable,boardState);
MSCP_LOG_MSG("MaintenanceFlag = %d, g_Maintenance_Id nums = %d, g_RMUP_Cfg.M_RemoteUpdate_Enable = %d, boardState = %d\n", \
MaintenanceFlag,g_Maintenance_Ids[0],g_RMUP_Cfg.M_RemoteUpdate_Enable,boardState);
CM_Sleep(CM_UINT32_MAX);
}
}
@@ -1112,7 +1111,10 @@ CM_UINT32 *PFM_DarkLogGenerate(CM_UINT16 mode, CM_UINT16 fault, CM_UINT16 num)
/* 宕机前向通控发送状态为宕机的心跳 连续发送三包*/
static void s_OutnetHeart_Send(void)
{
CFM_TxOutnetHeart(ENUM_2x2_SHUTDOWN);
CFM_TxOutnetHeart(ENUM_2x2_SHUTDOWN);
CFM_TxOutnetHeart(ENUM_2x2_SHUTDOWN);
if(ENUM_INIT_NET <= PFM_LOG_GET_INIT_STAGE())
{
CFM_TxOutnetHeart(ENUM_2x2_SHUTDOWN);
CFM_TxOutnetHeart(ENUM_2x2_SHUTDOWN);
CFM_TxOutnetHeart(ENUM_2x2_SHUTDOWN);
}
}
+2
View File
@@ -117,6 +117,8 @@ extern "C"
/*分帧接收*/
#define TSCP_DARK_SFM_2OO2FRAME (0x80u)
#define TSCP_DARK_SFM_2X2FRAME (0x81u)
/*2乘切系原因*/
#define TSCP_DARK_2X2_SWITCH_REASON (0x82u)
/*警告标志定义*/
#define TSCP_DARK_WARNING (0x1FFEu)
/** 初始化阶段标志 */
+130 -54
View File
@@ -34,7 +34,7 @@
#define WAIT_TIME_2S (2000u/g_PFM_Cfg.CYC_TIME + 1u)
#define WAIT_TIME_10S (10000u/g_PFM_Cfg.CYC_TIME + 1u)
#define WAIT_TIME_120S (120000u/g_PFM_Cfg.CYC_TIME + 1u)
CM_UINT16 g_Maintenance_Id = 0x00u;/* 维护终端内网id */
CM_UINT16 g_Maintenance_Ids[256] = {0};/* 维护终端内网id */
CM_UINT8 g_RemoteUpdate_State = 0x00u;/* 远程部署过程状态 */
ENUM_BOARD_STATE_T g_boardState = ENUM_BOARDSTATE_ERROR;
@@ -44,11 +44,13 @@ static CM_UINT32 s_packTimer = 0u; /**< 请求命令时间戳 */
static CM_UINT32 s_packFirstSendTimer = 0u; /**< 第一次回复重启确认的周期号 */
static CM_UINT32 s_packFirstRecvTimer = 0u; /**< 收到aid第一次回复重启确认的周期号 */
static CM_UINT8 reboottype = 0u;/**< 重启请求命令 0x55:未更新重启 0xaa:升级重启 0xd1~d7:硬重启 */
static CM_UINT16 s_rebootSrcid = 0u;
extern CM_UINT32 g_MSCP_SysCount; /**< 系统周期号 */
static CM_UINT8 s_countres = 0u;/**重启确认报文回复次数计数 */
static CM_UINT8 packAccredit = 2u; /**授权状态 (当变量置为0或者1,则需要处理远程重启请求报文)*/
static CM_UINT8 reasonAuthorization = 0u; /*授权原因*/
static CM_UINT8 s_HardReboottype = 0u;/**<0xd1~d7:硬重启 */
static CM_UINT16 s_HardRebootSrcid = 0u;/*接收到的重启命令的源ID*/
static CM_UINT8 s_packHardAccredit = 2u; /**硬重启授权状态 (当变量置为0或者1,则需要处理远程重启请求报文)*/
static CM_UINT8 s_reasonHardAuthorization = 0u; /*硬重启授权原因*/
@@ -100,7 +102,7 @@ static void PFM_DataReastart_SendTwo(void);
static void PFM_RM_File(IN CM_UINT8 pathname[]);
/*- 远程硬件重启命令接收处理 */
static void PFM_Data_HardWareReastart(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UINT16 packLen,CM_UINT8 packType);
static void PFM_Data_HardWareReastart(CM_UINT16 srcName, CM_UINT8* mData,CM_UINT32 dataOffset,CM_UINT16 packLen,CM_UINT8 packType);
/*- 远程切系命令接收处理 */
static void PFM_Data_RemoteSwitch(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UINT16 packLen,CM_UINT8 packType);
@@ -109,7 +111,7 @@ static void PFM_Data_RemoteSwitch(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UINT16
static void PFM_RemoteSwitch_Send(CM_UINT8 type,CM_UINT32 rcv_packTime,CM_UINT8 accredit,CM_UINT8 reason);
/*- 硬件重启确认帧组包发送 */
static void PFM_HardWareReastart_Send(CM_UINT8 type,CM_UINT32 rcv_packTime,CM_UINT8 accredit,CM_UINT8 reason);
static void PFM_HardWareReastart_Send(CM_UINT8 type,CM_UINT16 dstName, CM_UINT32 rcv_packTime,CM_UINT8 accredit,CM_UINT8 reason);
/*- 继电器检测 */
static ENUM_HARDWARE_BOOT_SELFCHECK_T PFM_Realy_Check(ENUM_HARDWARE_BOOT_SELFCHECK_T s_selfcheck_state,CM_UINT32 s_OutPutTime, CM_UINT8 comResult);
@@ -284,7 +286,7 @@ ENUM_CM_RETURN PFM_InnetRemoteUpdate_Send(IN CM_UINT8 ResponseBuf[],IN CM_UINT16
STRU_PFM_INNET_CFG_T* pCom = NULL;/* 通信配置 */
/*- 获取目的IP端口 */
pCom = PFM_INI_InnetID2Addr(g_Maintenance_Id);
pCom = PFM_INI_InnetID2Addr(g_Maintenance_Ids[1]);
/*- 是否获取成功 */
if ((NULL != ResponseBuf) && (NULL != pCom))
{
@@ -796,7 +798,7 @@ ENUM_CM_RETURN PFM_FileVerity_Response(IN CM_UINT32 TimeStamp,IN STRU_FILE_UPDAT
CM_UINT8 PFM_RmUp_Check(void)
{
/*- 变量初始化 */
CM_UINT8 rt = 0u; /* 函数返回值为成功 */
CM_UINT8 rt = packAccredit; /* 函数返回值为授权原因 */
/*- 如果crc计算错误 */
if((1 == reasonAuthorization) && (1 == packAccredit))
{
@@ -1034,7 +1036,7 @@ ENUM_CM_RETURN PFM_DevStateSend(CM_UINT8 ifCyc)
CM_UINT8 i = 0;
MSCP_LOG_MSG("Maintenance Mode DevStateSendIndex = %d\n",DevStateSendIndex);
if((0x00u != g_Maintenance_Id) && (0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) && (0x55u == g_RMUP_Cfg.M_2oo2_Enable))
if((0u < g_Maintenance_Ids[0]) && (0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) && (0x55u == g_RMUP_Cfg.M_2oo2_Enable))
{
/* 总长度(临时添加) */
txLen = 0u;
@@ -1164,7 +1166,6 @@ ENUM_CM_RETURN PFM_DevStateSend(CM_UINT8 ifCyc)
/*- 检查2oo2双机的输出校验帧是否一致 */
CM_ASSERT_MAINTAIN(offset == rxLen);
/*- 设置设备id */
dstName = g_Maintenance_Id;
if(1u == g_RMUP_Cfg.CPU_ID)
{
(void)CM_Memcpy(txBuf+offset,1000u-offset,rxBuf+3u,rxLen-3u);
@@ -1177,8 +1178,12 @@ ENUM_CM_RETURN PFM_DevStateSend(CM_UINT8 ifCyc)
/* 填入长度,总长是offset-自身2字节 */
txLen = offset - 2u;
CM_ShortToChar(txLen, &txBuf[0]);
ret = Prtcl_InnetSafe_RmSend(dstName, txBuf, offset);
MSCP_LOG_MSG("offset = %d send ret =%d\n",offset, ret);
for(i = 1; i <= g_Maintenance_Ids[0]; i++)
{
dstName = g_Maintenance_Ids[i];
ret = Prtcl_InnetSafe_RmSend(dstName, txBuf, offset);
MSCP_LOG_MSG("INNET RM dst id %04x offset = %d send ret =%d\n",dstName, offset, ret);
}
}
else
{
@@ -1191,8 +1196,12 @@ ENUM_CM_RETURN PFM_DevStateSend(CM_UINT8 ifCyc)
/* 填入长度,总长是offset-自身2字节 */
rxLen = offset - 2u;
CM_ShortToChar(rxLen, &rxBuf[0]);
ret = Prtcl_InnetSafe_RmSend(dstName, rxBuf, offset);
MSCP_LOG_MSG("offset = %d send ret = %d\n",offset, ret);
for(i = 1; i <= g_Maintenance_Ids[0]; i++)
{
dstName = g_Maintenance_Ids[i];
ret = Prtcl_InnetSafe_RmSend(dstName, rxBuf, offset);
MSCP_LOG_MSG("INNET RM dst id %04x offset = %d send ret =%d\n",dstName, offset, ret);
}
}
}
else
@@ -1229,6 +1238,7 @@ static CM_UINT8 PFM_DataReastart_Recv(void)
CM_UINT8 boardType = 0u;
CM_UINT8 boardId = 0u;
CM_UINT32 packRestartCrc = 0u; /*重启请求命令crc*/
static CM_BOOL flag_first_request = CM_FALSE;
do
{
/*- 从内网安全协议读取应用接收报文 */
@@ -1306,15 +1316,17 @@ static CM_UINT8 PFM_DataReastart_Recv(void)
{
/*- 无处理 */
}
flag_first_request = CM_TRUE;
packAccredit = 0u;
reasonAuthorization = 0u;
MSCP_LOG_MSG("0xa5 reboottype = %d\n",reboottype);
}
}
/*- 如果帧类型是二次请求确认 */
else if(0xa6 == packType)
else if(0xa6 == packType && CM_TRUE == flag_first_request)
{
/*- 按照二次请求确认帧继续解包 */
flag_first_request = CM_FALSE;
boardType = mData[dataOffset];
dataOffset +=1u;
MSCP_LOG_MSG("boardType = %d\n",boardType);
@@ -1460,7 +1472,7 @@ static void PFM_DataReastart_Send(void)
CM_ShortToChar(packLen, &mData[0]);
/*- 发送远程重启确认报文 */
MSCP_LOG_MSG("shut down dateOffset = %d, packLen = %d\n",dataOffset,packLen);
(void)Prtcl_InnetSafe_AppRmSend(mData, dataOffset);
(void)Prtcl_InnetSafe_AppRmSend(g_Maintenance_Ids[1], mData, dataOffset);
}
else
{
@@ -1533,7 +1545,7 @@ static void PFM_DataReastart_SendTwo(void)
CM_ShortToChar(packLen, &mData[0]);
/*- 发送远程重启确认报文 */
MSCP_LOG_MSG("shut down dateOffset = %d, packLen = %d\n",dataOffset,packLen);
(void)Prtcl_InnetSafe_AppRmSend(mData, dataOffset);
(void)Prtcl_InnetSafe_AppRmSend(g_Maintenance_Ids[1], mData, dataOffset);
}
else
{
@@ -1674,39 +1686,74 @@ void PFM_MaintenanceMode(void)
* @brief id
* @param dstName id
*/
void PFM_SetMaintenanceId(IN CM_UINT16 dstName )
void PFM_SetMaintenanceId(IN CM_UINT16* dstNames )
{
/*- 变量初始化 */
CM_INT32 i = 0;
CM_INT32 i = 0, j = 0, index = 1;
CM_UINT8 FindFlag = 0u;
CM_UINT32 dstNums= 0u;
/*- 开始遍历内网通信配置:是否遍历完成:下一条配置 */
for (i = 1; i <= (CM_INT32)g_PFM_Cfg.INNET_COM_NUM; i++)
{
/*- 是否找到了目标内网ID */
if (dstName == g_PFM_Cfg.INNET_COM_CFG[i].InnetID)
{
/*- 设置维护终端内网id */
g_Maintenance_Id = dstName;
FindFlag = 1u;
/*- 返回 */
break;
}
else
{
/*- 无处理 */
}
}
if(NULL != dstNames)
{
dstNums = dstNames[0];
if(MAINTAIN_ID_MAX_NUM < dstNums)
{
dstNums = MAINTAIN_ID_MAX_NUM;
}
for (i = 1; i <= (CM_INT32)dstNums; i++)
{
for(j = 1; j <= (CM_INT32)g_PFM_Cfg.INNET_COM_NUM; j++)
{
/*- 是否找到了目标内网ID */
if (dstNames[i] == g_PFM_Cfg.INNET_COM_CFG[j].InnetID)
{
/*- 设置维护终端内网id */
g_Maintenance_Ids[index++] = dstNames[i];
FindFlag = 1u;
break;
/*- 返回 */
}
else
{
/*- 无处理 */
}
}
}
}
g_Maintenance_Ids[0] = index - 1;
if (1u != FindFlag)
{
(void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(REMOTE_UPDATE, DARK_FAULT_CODE_FUN_ORDER_10, TSCP_DARK_ASSERT_1));
MSCP_LOG_MSG("MSCP_SetMaintenanceId Error!!! dstName not find in INNET_COM_CFG InnetID\n",dstName);
MSCP_LOG_MSG("MSCP_SetMaintenanceId Error!!! dstName not find in INNET_COM_CFG InnetID\n");
}
else
{
}
}
/**
* @brief ID是否存在
* @param id ID
* @return
* ENUM_CM_TRUE-
* ENUM_CM_FALSE-
*/
ENUM_CM_RETURN PFM_MaintenanceID_Search(IN CM_UINT16 id)
{
ENUM_CM_RETURN ret = ENUM_CM_FALSE;
CM_UINT32 i = 0;
for(i = 1u; i <= g_Maintenance_Ids[0]; i++)
{
if(id == g_Maintenance_Ids[i])
{
ret = ENUM_CM_TRUE;
break;
}
}
return ret;
}
/**
* @brief
* @param type 0x550x56
@@ -1715,7 +1762,7 @@ void PFM_SetMaintenanceId(IN CM_UINT16 dstName )
* @param reason 0~0xff
* @return
*/
static void PFM_HardWareReastart_Send(CM_UINT8 type,CM_UINT32 rcv_packTime,CM_UINT8 accredit,CM_UINT8 reason)
static void PFM_HardWareReastart_Send(CM_UINT8 type,CM_UINT16 dstName, CM_UINT32 rcv_packTime,CM_UINT8 accredit,CM_UINT8 reason)
{
/*- 变量初始化 */
CM_UINT8 mData[1000] = { 0u };
@@ -1769,7 +1816,7 @@ static void PFM_HardWareReastart_Send(CM_UINT8 type,CM_UINT32 rcv_packTime,CM_UI
dataOffset += 4u;
packLen = dataOffset - 2u;
CM_ShortToChar(packLen, &mData[0]);
ret = Prtcl_InnetSafe_AppRmSend(mData,dataOffset);
ret = Prtcl_InnetSafe_AppRmSend(dstName, mData,dataOffset);
if(ret == 0)
{
/*输出异常警告*/
@@ -1845,7 +1892,7 @@ static void PFM_RemoteSwitch_Send(CM_UINT8 type,CM_UINT32 rcv_packTime,CM_UINT8
dataOffset += 4u;
packLen = dataOffset - 2u;
CM_ShortToChar(packLen, &mData[0]);
ret = Prtcl_InnetSafe_AppRmSend(mData,dataOffset);
ret = Prtcl_InnetSafe_AppRmSend(g_Maintenance_Ids[1],mData,dataOffset);
if(ret == 0)
{
/*输出异常警告*/
@@ -1867,7 +1914,7 @@ static void PFM_RemoteSwitch_Send(CM_UINT8 type,CM_UINT32 rcv_packTime,CM_UINT8
* @param packLen 0~0xffff
* @param packType 0~0xff
*/
static void PFM_Data_HardWareReastart(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UINT16 packLen,CM_UINT8 packType)
static void PFM_Data_HardWareReastart(CM_UINT16 srcName,CM_UINT8* mData,CM_UINT32 dataOffset,CM_UINT16 packLen,CM_UINT8 packType)
{
/*- 变量初始化 */
CM_UINT32 packTimer = 0u;
@@ -1880,6 +1927,7 @@ static void PFM_Data_HardWareReastart(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UI
CM_UINT32 packRestartCrc = 0u; /*重启请求命令crc*/
CM_UINT8 boottype = 0u;/**<临时 重启请求命令 0x55:未更新重启 0xaa:升级重启 0xd1~d7:硬重启 */
static CM_UINT8 s_boottype = 0u;/**<静态 重启请求命令 0x55:未更新重启 0xaa:升级重启 ,0xd1~d7:硬重启 */
static CM_UINT16 s_srcid = 0u;
CM_UINT8 recvType = 0u;
ENUM_2x2_STATE_T localState = SFM_2x2_GetLocal2x2State();
/*- 如果帧类型是一次请求确认 */
@@ -1912,7 +1960,9 @@ static void PFM_Data_HardWareReastart(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UI
{
/*- 非法包丢弃 */
s_boottype = 0u;
s_srcid = 0u;
s_HardReboottype = 0u;
s_HardRebootSrcid = 0U;
s_packHardAccredit = 1u;
s_reasonHardAuthorization = 1u;
(void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(REMOTE_UPDATE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_1));
@@ -1922,6 +1972,7 @@ static void PFM_Data_HardWareReastart(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UI
{
/*- 非法包丢弃 */
s_boottype = 0u;
s_srcid = 0u;
/* s_HardReboottype = 0u; */
s_packHardAccredit = 1u;
s_reasonHardAuthorization = 5u;
@@ -1933,7 +1984,9 @@ static void PFM_Data_HardWareReastart(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UI
{
/*- 非法包丢弃 */
s_boottype = 0u;
s_srcid = 0u;
s_HardReboottype = 0u;
s_HardRebootSrcid = 0U;
s_packHardAccredit = 1u;
s_reasonHardAuthorization = 6u;
(void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(REMOTE_UPDATE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_2));
@@ -1943,7 +1996,9 @@ static void PFM_Data_HardWareReastart(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UI
{
/*- 非法包丢弃 */
s_boottype = 0u;
s_srcid = 0u;
s_HardReboottype = 0u;
s_HardRebootSrcid = 0U;
s_packHardAccredit = 1u;
s_reasonHardAuthorization = 7u;
(void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(REMOTE_UPDATE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_3));
@@ -1952,9 +2007,10 @@ static void PFM_Data_HardWareReastart(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UI
else
{
s_boottype = boottype;
s_srcid = srcName;
s_packHardAccredit = 0u;
s_reasonHardAuthorization = 0u;
MSCP_LOG_MSG("0xa5 boottype = %d\n",boottype);
MSCP_LOG_MSG("0xa5 boottype = %d, srcid = %04x\n",boottype, s_srcid);
}
/*首次应答*/
recvType = 0x55u;
@@ -1992,7 +2048,9 @@ static void PFM_Data_HardWareReastart(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UI
{
/*- crc计算失败丢弃错误包 */
s_boottype = 0u;
s_srcid = 0u;
s_HardReboottype = 0u;
s_HardRebootSrcid = 0U;
s_packHardAccredit = 1u;
s_reasonHardAuthorization = 1u;
MSCP_LOG_MSG("error pack 0xa6 packSwitchCrc=%d,calcCrc1=%d,packCrc=%d,calcCrc2=%d\n",packRestartCrc,calcCrc1,packCrc,calcCrc2);
@@ -2003,6 +2061,7 @@ static void PFM_Data_HardWareReastart(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UI
{
/*- 正在执行其它命令 */
s_boottype = 0u;
s_srcid = 0u;
/* s_HardReboottype = 0u; */
s_packHardAccredit = 1u;
s_reasonHardAuthorization = 5u;
@@ -2010,11 +2069,20 @@ static void PFM_Data_HardWareReastart(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UI
,s_switch2xFlag,s_switchRmFlag,g_iostate);
(void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(REMOTE_UPDATE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_5));
}
else if(s_srcid != srcName)
{
s_packHardAccredit = 1u;
s_reasonHardAuthorization = 6u;
MSCP_LOG_MSG("error pack 0xa6 s_srcid = %04x srcName = %04x\n", s_srcid, srcName);
(void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_WARNING, 4U, DARK_FAULT_CODE_MERGE(REMOTE_UPDATE, DARK_FAULT_CODE_FUN_ORDER_13, TSCP_DARK_ASSERT_8));
}
/*- 切系命令一次回复到二次请求接收时间是否小于两分钟 */
else if(((g_MSCP_SysCount - s_packFirstRecvTimer)*g_RMUP_Cfg.CYC_TIME) >= 120000u)
{
s_boottype = 0u;
s_srcid = 0u;
s_HardReboottype = 0u;
s_HardRebootSrcid = 0U;
s_packHardAccredit = 1u;
s_reasonHardAuthorization = 7u;
MSCP_LOG_MSG("error pack 0xa6 g_MSCP_SysCount = %d s_packFirstRecvTimer = %d\n", g_MSCP_SysCount, s_packFirstRecvTimer);
@@ -2023,7 +2091,9 @@ static void PFM_Data_HardWareReastart(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UI
else if((boottype <= 0xd0u) || (boottype >= 0xd8u ) || (s_boottype != boottype))
{
s_boottype = 0u;
s_srcid = 0u;
s_HardReboottype = 0u;
s_HardRebootSrcid = 0U;
s_packHardAccredit = 1u;
s_reasonHardAuthorization = 6u;
MSCP_LOG_MSG("error pack 0xa6 s_boottype = %d boottype = %d\n", s_boottype, boottype);
@@ -2032,17 +2102,18 @@ static void PFM_Data_HardWareReastart(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UI
else
{
s_HardReboottype = s_boottype;
s_HardRebootSrcid = s_srcid;
s_packHardAccredit = 0u;
s_reasonHardAuthorization = 0u;
g_iostate = 0x1u;
MSCP_LOG_MSG("0xa6 boottype = %d, s_boottype = %d\n",boottype, s_boottype);
MSCP_LOG_MSG("0xa6 boottype = %d, s_boottype = %d, s_srcid = %04x\n",boottype, s_boottype, s_srcid);
}
/*再次应答*/
recvType = 0x56u;
}
/*- 硬重启命令请求回复 */
PFM_HardWareReastart_Send(recvType,packTimer,s_packHardAccredit,s_reasonHardAuthorization);
PFM_HardWareReastart_Send(recvType,srcName,packTimer,s_packHardAccredit,s_reasonHardAuthorization);
}
/**
@@ -2253,7 +2324,7 @@ static void PFM_Data_RemoteSwitch(CM_UINT8* mData,CM_UINT32 dataOffset,CM_UINT16
* - 0xa7
* - 0xa8
*/
CM_UINT8 PFM_RemoteRun_Data(CM_UINT8 *mData,CM_UINT32 dataLen)
CM_UINT8 PFM_RemoteRun_Data(CM_UINT16 srcName, CM_UINT8 *mData,CM_UINT32 dataLen)
{
/*- 变量初始化 */
CM_UINT32 dataOffset = 0u;
@@ -2273,7 +2344,7 @@ CM_UINT8 PFM_RemoteRun_Data(CM_UINT8 *mData,CM_UINT32 dataLen)
{
if((0xA5u == packType) || (0xA6u == packType))
{
PFM_Data_HardWareReastart(mData,dataOffset,packLen,packType);
PFM_Data_HardWareReastart(srcName,mData,dataOffset,packLen,packType);
}
else if((0xA7u == packType) || (0xA8u == packType))
{
@@ -2308,7 +2379,8 @@ void PFM_HardWareBoot_UpData(void)
g_boardState = g_AppSetboardState;
/*- 更新硬重启模式 */
reboottype = s_HardReboottype;
MSCP_LOG_MSG("reboottype = %d, s_HardReboottype = %d\n",reboottype,s_HardReboottype);
s_rebootSrcid = s_HardRebootSrcid;
MSCP_LOG_MSG("reboottype = %d, s_HardReboottype = %d, s_HardRebootSrcid = %04x\n",reboottype,s_HardReboottype,s_HardRebootSrcid);
/*- 更新切系状态 */
if(0x55 == s_switchRmFlag)
{
@@ -2335,11 +2407,13 @@ void PFM_HardWareBoot_OutPut(void)
/*- 变量初始化 */
CM_INT32 ret = 0;
CM_UINT8 type = 0u;
CM_UINT16 srcID = 0u;
static ENUM_HARDWARE_BOOT_SELFCHECK_T checkselfret = ENUM_RELAY_1ST_OUTPUT;
/*- 重启命令为硬重启命令 */
if((0xd0u < reboottype) && (0xd8u > reboottype))
{
type = reboottype;
srcID = s_rebootSrcid;
/*- @alias 执行硬重启 */
switch(type)
{
@@ -2348,7 +2422,7 @@ void PFM_HardWareBoot_OutPut(void)
if(ENUM_2x2_MASTER == SFM_2x2_GetLocal2x2State())
{
MSCP_LOG_MSG("PFM_HardWareBoot_OutPut 1\n");
checkselfret = PFM_HardWareBoot_CheckSelf(0x0Cu,ENUM_TYPE_PUB,type);
checkselfret = PFM_HardWareBoot_CheckSelf(0x0Cu,ENUM_TYPE_PUB,type,srcID);
}
else
{
@@ -2360,22 +2434,22 @@ void PFM_HardWareBoot_OutPut(void)
case 0xd2:
/*- 1010:CCU*/
MSCP_LOG_MSG("PFM_HardWareBoot_OutPut 3\n");
checkselfret = PFM_HardWareBoot_CheckSelf(0x0Au,ENUM_TYPE_CCU,type);
checkselfret = PFM_HardWareBoot_CheckSelf(0x0Au,ENUM_TYPE_CCU,type,srcID);
break;
case 0xd3:
/*- 0110:SEB*/
MSCP_LOG_MSG("PFM_HardWareBoot_OutPut 4\n");
checkselfret = PFM_HardWareBoot_CheckSelf(0x06u,ENUM_TYPE_SEB,type);
checkselfret = PFM_HardWareBoot_CheckSelf(0x06u,ENUM_TYPE_SEB,type,srcID);
break;
case 0xd4:
/*- 1001:ESB*/
MSCP_LOG_MSG("PFM_HardWareBoot_OutPut 5\n");
checkselfret = PFM_HardWareBoot_CheckSelf(0x09u,ENUM_TYPE_ESB,type);
checkselfret = PFM_HardWareBoot_CheckSelf(0x09u,ENUM_TYPE_ESB,type,srcID);
break;
case 0xd5:
/*- 0101:EEB*/
MSCP_LOG_MSG("PFM_HardWareBoot_OutPut 6\n");
checkselfret = PFM_HardWareBoot_CheckSelf(0x05u,ENUM_TYPE_OTHER,type);
checkselfret = PFM_HardWareBoot_CheckSelf(0x05u,ENUM_TYPE_OTHER,type,srcID);
break;
case 0xd6:
/*- 0011:OCIO预留,硬件不支持禁止打开*/
@@ -2389,7 +2463,7 @@ void PFM_HardWareBoot_OutPut(void)
if(ENUM_2x2_MASTER == SFM_2x2_GetLocal2x2State())
{
MSCP_LOG_MSG("PFM_HardWareBoot_OutPut 9\n");
checkselfret = PFM_HardWareBoot_CheckSelf(0x0Fu,ENUM_TYPE_ALL,type);
checkselfret = PFM_HardWareBoot_CheckSelf(0x0Fu,ENUM_TYPE_ALL,type,srcID);
}
else
{
@@ -2410,7 +2484,9 @@ void PFM_HardWareBoot_OutPut(void)
MSCP_LOG_MSG("PFM_HardWareBoot_OutPut 12\n");
/*- 恢复运营状态*/
reboottype = 0u;
s_rebootSrcid = 0u;
s_HardReboottype = 0u;
s_HardRebootSrcid = 0u;
g_iostate = 0x0u;
}
}
@@ -2433,7 +2509,7 @@ void PFM_HardWareBoot_OutPut(void)
* @param reboottype 0xD1~0xD7
* @return ENUM_HARDWARE_BOOT_SELFCHECK_T 0~11
*/
ENUM_HARDWARE_BOOT_SELFCHECK_T PFM_HardWareBoot_CheckSelf(CM_UINT8 level,ENUM_BOARD_TYPE_T board_type,CM_UINT8 reboottype)
ENUM_HARDWARE_BOOT_SELFCHECK_T PFM_HardWareBoot_CheckSelf(CM_UINT8 level,ENUM_BOARD_TYPE_T board_type,CM_UINT8 reboottype, CM_UINT16 srcName)
{
/*- 变量初始化 */
static ENUM_HARDWARE_BOOT_SELFCHECK_T s_selfcheck_state = ENUM_RELAY_1ST_OUTPUT;
@@ -2703,8 +2779,8 @@ ENUM_HARDWARE_BOOT_SELFCHECK_T PFM_HardWareBoot_CheckSelf(CM_UINT8 level,ENUM_BO
/*- 反馈执行结果 */
case ENUM_OUTPUT_RESULT:
/*- 发送结果至AID */
MSCP_LOG_MSG("s_relay_default[0] = %d,s_relay_default[1] = %d,s_relay_default[2] = %d,s_relay_default[3] = %d\n",s_relay_default[0],s_relay_default[1],s_relay_default[2],s_relay_default[3]);
PFM_HardWareBoot_CheckSelf_Response(s_boot_result,s_relay_default,reboottype);
MSCP_LOG_MSG("s_relay_default[0] = %d,s_relay_default[1] = %d,s_relay_default[2] = %d,s_relay_default[3] = %d, srcName = %04x\n",s_relay_default[0],s_relay_default[1],s_relay_default[2],s_relay_default[3], srcName);
PFM_HardWareBoot_CheckSelf_Response(s_boot_result,s_relay_default,reboottype, srcName);
/*- 清空所有标志位 */
s_selfcheck_state = ENUM_RELAY_1ST_OUTPUT;
s_OutPutTime = 0u;
@@ -2866,7 +2942,7 @@ CM_UINT8 PFM_HardWareBoot_CheckSelf_ComState(ENUM_BOARD_TYPE_T type, CM_UINT8 s_
* @param reboottype 0xd1~0xd7
* @return
*/
void PFM_HardWareBoot_CheckSelf_Response(CM_UINT8 boot_result,CM_UINT8 *defaultbuf,CM_UINT8 reboottype)
void PFM_HardWareBoot_CheckSelf_Response(CM_UINT8 boot_result,CM_UINT8 *defaultbuf,CM_UINT8 reboottype,CM_UINT16 dstName)
{
/*- 变量初始化 */
CM_UINT8 mData[1000] = { 0u };
@@ -2911,7 +2987,7 @@ void PFM_HardWareBoot_CheckSelf_Response(CM_UINT8 boot_result,CM_UINT8 *defaultb
dataOffset += 4u;
packLen = dataOffset - 2u;
CM_ShortToChar(packLen, &mData[0]);
ret = Prtcl_InnetSafe_AppRmSend(mData,dataOffset);
ret = Prtcl_InnetSafe_AppRmSend(dstName,mData,dataOffset);
if(ret == 0)
{
/*- 输出异常警告 */
+13 -5
View File
@@ -12,7 +12,9 @@ extern "C"
#define FAULT_REBOOT_CUT_MAX (3u) /*故障重启次数限制*/
extern CM_UINT16 g_Maintenance_Id;/* 维护终端内网id */
#define MAINTAIN_ID_MAX_NUM (2u) /*同时通信的维护终端的最大个数*/
extern CM_UINT16 g_Maintenance_Ids[256];/* 维护终端内网id */
extern CM_UINT8 g_RemoteUpdate_State;/* 远程部署过程状态 */
extern CM_UINT8 s_switch2xFlag;
@@ -115,12 +117,16 @@ void PFM_MaintenanceMode(void);
* @brief id
* @param dstName id
*/
void PFM_SetMaintenanceId(IN CM_UINT16 dstName);
void PFM_SetMaintenanceId(IN CM_UINT16* dstNames);
/**
* @brief ID是否存在
*/
ENUM_CM_RETURN PFM_MaintenanceID_Search(IN CM_UINT16 id);
/**
* @brief \
*/
CM_UINT8 PFM_RemoteRun_Data(CM_UINT8 *mData,CM_UINT32 dataLen);
CM_UINT8 PFM_RemoteRun_Data(CM_UINT16 srcName, CM_UINT8 *mData,CM_UINT32 dataLen);
/*硬件重启IO更新*/
void PFM_HardWareBoot_UpData(void);
/*执行硬件重启IO输出*/
@@ -133,9 +139,10 @@ CM_UINT8 PFM_GetBoardRebootState(void);
* @param level IO 0x00~0x0F
* @param board_type ENUM_BOARD_TYPE_T
* @param reboottype 0xD1~0xD7
* @param srcName ID
* @return ENUM_HARDWARE_BOOT_SELFCHECK_T
*/
ENUM_HARDWARE_BOOT_SELFCHECK_T PFM_HardWareBoot_CheckSelf(CM_UINT8 level,ENUM_BOARD_TYPE_T board_type,CM_UINT8 reboottype);
ENUM_HARDWARE_BOOT_SELFCHECK_T PFM_HardWareBoot_CheckSelf(CM_UINT8 level,ENUM_BOARD_TYPE_T board_type,CM_UINT8 reboottype, CM_UINT16 srcName);
/**
* @brief AB系通信需要计算的板卡通信状态()
* @param type ENUM_BOARD_TYPE_T
@@ -149,9 +156,10 @@ CM_UINT8 PFM_HardWareBoot_CheckSelf_ComState(ENUM_BOARD_TYPE_T type, CM_UINT8 s_
* @param boot_result 0x550xAA
* @param *defaultbuf 0x550xAA
* @param reboottype 0xd1~0xd7
* @param dstName ID
* @return
*/
void PFM_HardWareBoot_CheckSelf_Response(CM_UINT8 boot_result,CM_UINT8 *defaultbuf,CM_UINT8 reboottype);
void PFM_HardWareBoot_CheckSelf_Response(CM_UINT8 boot_result,CM_UINT8 *defaultbuf,CM_UINT8 reboottype,CM_UINT16 dstName);
/**
* @brief AB系通信需要计算的板卡通信状态
+2 -2
View File
@@ -566,11 +566,11 @@ static CM_INT32 s_2oo2_ARQ_Recv(OUT CM_UINT8 *RxData, IN CM_UINT32 RxSize, OUT E
}
}
/*本机与邻机接收成功或重传次数超过1分钟(6000次)退出重传 */
if(((CM_TRUE == MineRcvSuccessFlag) && (CM_TRUE == PeerRcvSuccessFlag)) || (ARQ_Cut >= 6000))
if(((CM_TRUE == MineRcvSuccessFlag) && (CM_TRUE == PeerRcvSuccessFlag)) || (ARQ_Cut >= SFM_2oo2_ARQ_MAX_CNT))
{
/*- 结束接收 */
/*- 结束接收 重传超过6000次日志记录 */
if(ARQ_Cut >= 6000)
if(ARQ_Cut >= SFM_2oo2_ARQ_MAX_CNT)
{
MSCP_LOG_MSG("2oo2 failed break ARQ_Cut = %d, MineRcvSuccessFlag = %d, PeerRcvSuccessFlag = %d\n", ARQ_Cut, MineRcvSuccessFlag, PeerRcvSuccessFlag);
CM_ASSERT(0,SFM_2oo2_MODE, DARK_FAULT_CODE_FUN_ORDER_6, TSCP_DARK_ASSERT_2);
+91
View File
@@ -172,6 +172,16 @@ static void SFM_2x2_Input2oo2Exchange(STRU_2X2_CTRL_T *peerCtrl);
static void SFM_2x2_Eth422StateDark(void);
/* 返回4线中通信正常的数量*/
static CM_UINT8 s_2x2_CommNormalNum(void);
/**
* @brief
* @details /AID/
* */
static void s_2x2_SlaveGetSwitchReason(void);
/**
* @brief
* @details >>AID>
* */
static void s_2x2_SlaveSendSwitchReason(void);
/* 输入周期号同步函数 */
static void SFM_2x2_InputSysCycSyn(STRU_2X2_CTRL_T *peerCtrl){
@@ -1355,6 +1365,8 @@ static CM_THREAD_FUNC_T SFM_2x2_StateChange_Thread(void)
/*二取本机热备状态、按钮状态、通信状态等、确保双CPU数据一致*/
s_State_2xAfter_2oo2Sync(&ctrl_2oo2_2xstate,&partner_state);
curTick[3] = CM_GetTick();
/* 尝试获取切系相关状态*/
s_2x2_SlaveGetSwitchReason();
/*带着双cpu一致的双系数据做状态机切换*/
if(s_2x2_state_Ctrl.MicroCyc < (s_2x2_thread_Ctrl.number_Cyc - 1u))
{
@@ -1536,12 +1548,24 @@ void SFM_2x2_ChangeState(void)
s_2x2_Ctrl.LastFollowCyc = SFM_2x2_GetSysCount() - 1u;
s_2x2_Ctrl.LastCheckOKCount = SFM_2x2_GetSysCount();
s_2x2_Ctrl.OutPutCheckFailFlag = 0u;
s_2x2_Ctrl.AppFollowRcvFlag = CM_TRUE;
s_2x2_Ctrl.AppFollowCmpFlag = 0u;
}
else
{
/*无处理*/
}
if(1u == s_2x2_Ctrl.AppFollowCmpFlag && CM_TRUE == s_2x2_Ctrl.AppFollowRcvFlag && ENUM_2x2_MASTER == s_2x2_state_Ctrl.LocalState)
{
if(ENUM_2x2_SLAVE == s_2x2_state_Ctrl.PartnerState)
{
s_2x2_state_Ctrl.LocalState = ENUM_2x2_OFFLINE;
}
else
{
CM_RE_ASSERT(0, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_24, TSCP_DARK_ASSERT_7);
}
}
MSCP_LOG_MSG("timecurr 16.0.0 = %lld us\n", NOW_USED_TIME);
/*- 记录上周期状态用于回滚*/
s_2x2_state_Ctrl.LastLocalState = s_2x2_Ctrl.LocalState;
@@ -1630,6 +1654,8 @@ void SFM_2x2_ChangeState(void)
(void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_AREA, 1U, &s_2x2_Ctrl.LocalAreaState);
(void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_AREA_SWITCH, 1U, &s_2x2_Ctrl.AreaSwitchMode);
}
/* 如果发生了备系升主,暗文发送原因*/
s_2x2_SlaveSendSwitchReason();
SFM_2x2_LOG_Transition();
SFM_AREA_LOG_Transition();
@@ -1672,6 +1698,7 @@ void SFM_2x2_Init(IN const CM_UINT8 *VitalBuf, IN CM_UINT16 VitalLen, INOUT CM_U
s_2x2_Ctrl.LocalState = ENUM_2x2_OFFLINE;
s_2x2_Ctrl.PartnerState = ENUM_2x2_SHUTDOWN;
s_2x2_Ctrl.AppFollowCmpFlag = 1u;
s_2x2_Ctrl.AppFollowRcvFlag = CM_FALSE;
/*- 更新上一周期的主备状态为这周期的主备状态(给应用用) */
s_2x2_Ctrl.LastLocalState = s_2x2_Ctrl.LocalState;
@@ -1690,6 +1717,7 @@ void SFM_2x2_Init(IN const CM_UINT8 *VitalBuf, IN CM_UINT16 VitalLen, INOUT CM_U
s_2x2_state_Ctrl.LocalAIDSwitchState = ENUM_2x2_AIDSWITCH_DISABLE;
s_2x2_state_Ctrl.PartnerAIDSwitchState = ENUM_2x2_AIDSWITCH_DISABLE;
s_2x2_state_Ctrl.switchReason = ENUM_2x2_SWITCH_REASON_NULL;
s_2x2_state_Ctrl.LocalID =s_2x2_Ctrl.LocalID;
s_2x2_state_Ctrl.PartnerID = s_2x2_Ctrl.PartnerID;
@@ -3045,10 +3073,12 @@ void SFM_2x2_EndProc(void)
curTickTest[0] = CM_GetTick();
if (s_2x2_Ctrl.RxAppFollowSysCyc >= sysCyc)
{
s_2x2_Ctrl.AppFollowRcvFlag = CM_TRUE;
s_2x2_AppFollow_SyncCheck();
}
else
{
s_2x2_Ctrl.AppFollowRcvFlag = CM_FALSE;
/*没有收到数据 将离线*/
s_2x2_Ctrl.AppFollowCmpFlag = 1u;
}
@@ -3063,12 +3093,14 @@ void SFM_2x2_EndProc(void)
if (s_2x2_Ctrl.RxAppFollowSysCyc >= sysCyc)
{
/*- 调用应用API覆盖应用关键数据 */
s_2x2_Ctrl.AppFollowRcvFlag = CM_TRUE;
retFollowUp = APP_API_FollowUp(g_RxAppFollow, (CM_UINT32)g_RxAppFollow_len);
CM_RE_ASSERT(ENUM_CM_TRUE == retFollowUp, SFM_2x2_MODE, DARK_FAULT_CODE_FUN_ORDER_9, TSCP_DARK_ASSERT_2);
s_2x2_Ctrl.AppFollowCmpFlag = 0u;
}
else
{
s_2x2_Ctrl.AppFollowRcvFlag = CM_FALSE;
s_2x2_Ctrl.AppFollowCmpFlag = 1u;
}
curTickTest[1] = CM_GetTick();
@@ -4417,4 +4449,63 @@ static void s_2x2_BaseFollow_Sync(void)
offset += 1u;
s_2x2_Ctrl.AreaTimeOffset = (CM_INT64)CM_64FromChar(&g_RxBaseFollow[offset]);
offset += 8u;
}
/**
* @brief
* @details /AID/
* */
static void s_2x2_SlaveGetSwitchReason(void)
{
if(ENUM_2x2_SLAVE == s_2x2_state_Ctrl.LocalState)
{
if(1 == s_2x2_state_Ctrl.ctrSwitchFlag)
{
s_2x2_state_Ctrl.switchReason |= ENUM_2x2_SWITCH_REASON_CTR;
}
if(1u == s_2x2_state_Ctrl.aidSwitchFlag)
{
s_2x2_state_Ctrl.switchReason |= ENUM_2x2_SWITCH_REASON_AID;
}
}
}
/**
* @brief
* @details >>AID>
* */
static void s_2x2_SlaveSendSwitchReason(void)
{
CM_UINT8 reason = 0x00u;
if(ENUM_2x2_MASTER == s_2x2_Ctrl.LocalState && ENUM_2x2_SLAVE == s_2x2_Ctrl.LastLocalState)
{
/* 执行了切系*/
if(ENUM_2x2_SHUTDOWN == s_2x2_Ctrl.PartnerState)
{
/* 另一系宕机,一定是自动切系(因为备系升主逻辑中宕机升主优先级最高)*/
reason = 0x00u;
}
else if(ENUM_2x2_SWITCH_REASON_CTR == (ENUM_2x2_SWITCH_REASON_CTR & s_2x2_state_Ctrl.switchReason))
{
/* 人工按钮切系*/
reason = 0x55u;
}
else if(ENUM_2x2_SWITCH_REASON_AID == (ENUM_2x2_SWITCH_REASON_AID & s_2x2_state_Ctrl.switchReason))
{
/* 人工AID切系*/
reason = 0xAAu;
}
else if(ENUM_2x2_SWITCH_REASON_AUTO == (ENUM_2x2_SWITCH_REASON_AUTO & s_2x2_state_Ctrl.switchReason))
{
/* 自动切系*/
reason = 0x00u;
}
else
{
/* 其他情况,默认自动切系*/
reason = 0x00u;
}
(void)CFM_DarkLog_Storage(DARK_LOG_HEX, TSCP_DARK_2X2_SWITCH_REASON, 1U, &reason);
}
s_2x2_state_Ctrl.switchReason = ENUM_2x2_SWITCH_REASON_NULL;
}
+13
View File
@@ -45,6 +45,15 @@ extern CM_UINT32 g_MSCP_SysCount;
#define MSCP_2X2_THREAD_TIME (40U) /*2x线程运行时间*/
#define MSCP_2X2_STATE_OVER_TIME (MSCP_2X2_THREAD_TIME + 25U) /*2x线程判断数据超时时间*/
#define MSCP_2X2_STATE_RCV_WITETIME (MSCP_2X2_THREAD_TIME - 20U) /*2x线程等待对系数据时间*/
/* 切系原因*/
typedef enum
{
ENUM_2x2_SWITCH_REASON_NULL = 0x00u, /* 没有切系*/
ENUM_2x2_SWITCH_REASON_AUTO = 0x01u, /* 自动切系*/
ENUM_2x2_SWITCH_REASON_CTR = 0x02u, /* 按钮切系*/
ENUM_2x2_SWITCH_REASON_AID = 0x04u /* AID切系*/
}ENUM_2x2_SWITCH_REASON_T;
/** 2x2消息类型 */
typedef enum
{
@@ -190,6 +199,7 @@ extern CM_UINT32 g_MSCP_SysCount;
/*输出比较信息*/
CM_UINT32 LastCheckOKCount; /**< 上次输出比较成功(跟随成功)的本地时间,2oo2比较 (这个标志用来判断如果未收到主系的数据,则停止更新,后将为离线)*/
CM_UINT32 OutPutCheckFailFlag; /**< 上次输出比较成功(跟随成功)的本地时间,2oo2比较 (这个标志用来判断收到输出数据后是否比较成功, 比较失败则降级)*/
CM_BOOL AppFollowRcvFlag; /* 上次应用跟随数据的接收结果,只判断是否是否成功接收*/
CM_UINT32 AppFollowCmpFlag; /**< 上次应用跟随数据比较结果,只有备系使用 (这个标志用来判断备系和主系应用跟随数据是否比较成功, 比较失败则降级)*/
CM_UINT32 RxCheckSysCyc; /**< 收到的输出校验帧的周期号,2oo2交换 */
CM_INT32 RxCheckLen; /**< 收到的输出校验帧长度,2oo2交换 */
@@ -241,6 +251,7 @@ extern CM_UINT32 g_MSCP_SysCount;
CM_UINT32 LastRxInputSysCyc; /**< 收到的对系输入数据的周期号,2oo2交换 */
/*跟随数据*/
CM_UINT32 LastFollowCyc; /**< 上次进行平台跟随的时间,2oo2比较,*/
CM_BOOL AppFollowRcvFlag; /* 上次应用跟随数据的接收结果,只判断是否是否成功接收*/
CM_UINT32 AppFollowCmpFlag; /**< 上次应用跟随数据比较结果,只有备系使用 (这个标志用来判断备系和主系应用跟随数据是否比较成功, 比较失败则降级)*/
/*输出比较信息*/
@@ -261,6 +272,8 @@ extern CM_UINT32 g_MSCP_SysCount;
ENUM_2x2_AID_SWITCH_STATE PartPeerAIDSwitchState; /**< 对系的邻机的主动切系按钮状态 */
CM_UINT8 aidSwitchFlag; /**< aid切系控制标志 */
ENUM_2x2_SWITCH_REASON_T switchReason; /*记录切系原因*/
/*脉冲*/
ENUM_PULSE_TYPE_T pulse[5][2]; /* [][0]A系, [][1]B系, [0]四个CPU一致的脉冲,[1]1-1, [2]1-2, [3]2-1, [4]2-2(TODO 下标使用宏定义)*/
ENUM_PULSE_TYPE_T pulseFeedBack; /*本系回读*/
+74 -25
View File
@@ -189,7 +189,7 @@ void SFM_PrtclInInit(CM_UINT8* p_SfpInnetPara)
}
/*- 入参是否为空 */
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id) && (NULL != p_SfpInnetPara))
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]) && (NULL != p_SfpInnetPara))
{
/*- 远程部署内网安全协议初始化*/
CM_NM_ASSERT(0u != InnetID, PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_17, TSCP_DARK_ASSERT_1);
@@ -658,7 +658,7 @@ void SFM_UnPrtclProc(void)
}
PFM_CFC_Check(46);
/*- @alias 远程部署内网安全通信协议解析 */
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
(void)QueueClear(&s_InnetPrtcl_RM.DataToApp);
s_InnetPrtcl_RM.RadamSN = SFM_2x2_GetSysCount();
@@ -962,7 +962,7 @@ CM_UINT32 Prtcl_InnetSafe_RmRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT8* pLifeTim
CM_UINT32 rt_len = 0u; /* 函数返回长度值 */
CM_UINT8 rt = 0u; /* 函数返回值 */
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
/*- 锁定接收队列 */
(void)CM_Mutex_Lock(s_Innet_RmRecv_M);
@@ -994,7 +994,7 @@ CM_UINT32 Prtcl_InnetSafe_RmRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT8* pLifeTim
(void)CM_QueueRead(rt_len, rxBuf, &s_Innet_RmRecvQ);
/*- 解析通信协议,如果是重启或切系命令,执行重启或切系逻辑*/
rt = PFM_RemoteRun_Data(rxBuf,rt_len);
rt = PFM_RemoteRun_Data(*pSrcName,rxBuf,rt_len);
/*- 如果是重启命令*/
if((0xA5 <= rt) && (0xA8 >= rt))
{
@@ -1053,7 +1053,7 @@ CM_UINT32 Prtcl_InnetSafe_PlatRmRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT8* pLif
CM_UINT16 msgLen = 0u; /* 报文长度 */
CM_UINT32 qStatus = 0u; /* 队列状态 */
CM_UINT32 rt_len = 0u; /* 函数返回长度值 */
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
/*- 锁定接收队列 */
(void)CM_Mutex_Lock(s_Innet_RmRecv_M);
@@ -1114,7 +1114,7 @@ CM_UINT32 Prtcl_InnetSafe_PlatRmRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT8* pLif
* - 0 ()
* @details
*/
CM_UINT8 Prtcl_InnetSafe_AppRmSend(IN const CM_UINT8* txBuf, IN CM_UINT32 txLen)
CM_UINT8 Prtcl_InnetSafe_AppRmSend(IN CM_UINT16 dstName, IN const CM_UINT8* txBuf, IN CM_UINT32 txLen)
{
/*- 变量初始化 */
CM_UINT8 buf[2u] = { 0u }; /* 临时变量 */
@@ -1122,18 +1122,21 @@ CM_UINT8 Prtcl_InnetSafe_AppRmSend(IN const CM_UINT8* txBuf, IN CM_UINT32 txLen)
ENUM_CM_RETURN temprt = ENUM_CM_TRUE; /* 临时返回值 */
CM_ASSERT_MAINTAIN(txBuf != NULL);
/*- 输入长度检查 */
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
/*
2 ()
2 ID
n字节
*/
/*- 锁定发送队列 */
(void)CM_Mutex_Lock(s_Innet_AppRmSend_M);
/*- 填写协议输出帧头 */
CM_ShortToChar(txLen, buf);
CM_ShortToChar(txLen + 2, buf);
temprt &= CM_QueueWrite(2u, buf, &s_Innet_AppRmSendQ);/*长度*/
CM_ShortToCharLE(dstName, buf);
temprt &= CM_QueueWrite(2u, buf, &s_Innet_AppRmSendQ);/*目的ID*/
/*- 填写应用输出报文 */
temprt &= CM_QueueWrite(txLen, txBuf, &s_Innet_AppRmSendQ);
if(ENUM_CM_TRUE == temprt)
@@ -1174,26 +1177,54 @@ CM_UINT8 Prtcl_InnetSafe_RmSend(IN CM_UINT16 dstName, IN const CM_UINT8* txBuf,
{
/*- 变量初始化 */
CM_UINT16 len = 0u; /* 长度 */
CM_UINT16 applen = 0u; /* 长度 */
CM_UINT16 applen = 0u, tmplen = 0u; /* 长度 */
CM_BOOL flag_split = CM_FALSE; /*是否将平台帧和应用帧分开发送*/
CM_UINT8 buf[2u] = { 0u }; /* 临时变量 */
CM_UINT8 buf4[4u] = {0u}; /* 临时变量*/
CM_UINT8 Buftmp[128] = { 0u }; /* 临时变量 */
CM_UINT8 rt = 0u; /* 函数返回值 */
ENUM_CM_RETURN temprt = ENUM_CM_TRUE; /* 临时返回值 */
CM_UINT16 appDstID = 0xffffu;
/*- 输入长度检查 */
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
/*- 锁定发送队列 */
(void)CM_Mutex_Lock(s_Innet_AppRmSend_M);
/*- 读取应用帧头 */
/*
2 ()
2 ID
n字节
*/
(void)CM_QueueRead(2u, buf, &s_Innet_AppRmSendQ);/*长度*/
(void)CM_QueueScan(2u, buf, &s_Innet_AppRmSendQ);/*长度*/
applen = CM_ShortFromChar(buf);
(void)CM_QueueRead(applen, Buftmp, &s_Innet_AppRmSendQ);/*长度*/
if(applen >= 2u)
{
(void)CM_QueueScan(4u, buf4, &s_Innet_AppRmSendQ);/*长度*/
appDstID = CM_ShortFromCharLE(&buf4[2]);
temprt = PFM_MaintenanceID_Search(appDstID);
applen -= 2u;
}
if(appDstID == dstName || ENUM_CM_FALSE == temprt)
{
(void)CM_QueueRead(2u, buf, &s_Innet_AppRmSendQ);
(void)CM_QueueRead(2u, buf, &s_Innet_AppRmSendQ);
(void)CM_QueueRead(applen, Buftmp, &s_Innet_AppRmSendQ);/*长度*/
if(appDstID == g_Maintenance_Ids[1])
{
tmplen = applen;
flag_split = CM_FALSE;
}
else
{
flag_split = CM_TRUE;
tmplen = 0u;
}
}
else
{
}
/*- 解锁发送队列 */
(void)CM_Mutex_Unlock(s_Innet_AppRmSend_M);
@@ -1206,7 +1237,7 @@ CM_UINT8 Prtcl_InnetSafe_RmSend(IN CM_UINT16 dstName, IN const CM_UINT8* txBuf,
(void)CM_Mutex_Lock(s_Innet_RmSend_M);
/*- 填写协议输出帧头 */
len = (CM_UINT16)(txLen + 4u)+applen;
len = (CM_UINT16)(txLen + 4u)+tmplen;
CM_ShortToChar(len, buf);
temprt &= CM_QueueWrite(2u, buf, &s_Innet_RmSendQ);/*长度*/
CM_ShortToCharLE(0u, buf);
@@ -1217,7 +1248,22 @@ CM_UINT8 Prtcl_InnetSafe_RmSend(IN CM_UINT16 dstName, IN const CM_UINT8* txBuf,
temprt &= CM_QueueWrite(txLen, txBuf, &s_Innet_RmSendQ);
if(ENUM_CM_TRUE == temprt)
{
temprt &= CM_QueueWrite(applen, Buftmp, &s_Innet_RmSendQ);
if(CM_TRUE == flag_split)
{
len = applen + 4u;
CM_ShortToChar(len, buf);
temprt &= CM_QueueWrite(2u, buf, &s_Innet_RmSendQ);/*长度*/
CM_ShortToCharLE(0u, buf);
temprt &= CM_QueueWrite(2u, buf, &s_Innet_RmSendQ);/*2字节预留*/
CM_ShortToCharLE(dstName, buf);
temprt &= CM_QueueWrite(2u, buf, &s_Innet_RmSendQ);/*目的ID*/
temprt &= CM_QueueWrite(applen, Buftmp, &s_Innet_RmSendQ);
}
else
{
temprt &= CM_QueueWrite(tmplen, Buftmp, &s_Innet_RmSendQ);
}
if(ENUM_CM_TRUE == temprt)
{
rt = 1u;/*成功*/
@@ -1312,7 +1358,7 @@ void SFM_EnPrtclProc(void)
}
/*- 远程部署内网安全协议封装 */
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
CM_LongToChar(0u, s_InnetPrtcl_RM.PrtclSndBuff);
CM_LongToChar(0u, s_InnetPrtcl_RM.RecordArray);
@@ -1382,7 +1428,7 @@ CM_UINT32 SFM_ReadInnetRmCodedOutput(OUT CM_UINT8 Buf[], IN CM_UINT32 BufSize)
*/
/*- 获取输出报文总长度 */
CM_UINT32 len = 0u;
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
len = CM_LongFromChar(s_InnetPrtcl_RM.PrtclSndBuff);
CM_RE_ASSERT(BufSize >= 4u,PRTCL_MODE, DARK_FAULT_CODE_FUN_ORDER_21, TSCP_DARK_ASSERT_1);
@@ -1538,7 +1584,7 @@ void SFM_TxInnetSafeRm(IN CM_UINT8 Buf[], IN CM_UINT32 Len)
STRU_PFM_INNET_CFG_T* pCom = NULL;/* 通信配置 */
ENUM_CM_RETURN ret = ENUM_CM_FALSE;
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
allLen = CM_LongFromChar(Buf); /*外网输出帧报文总长度*/
CM_RE_ASSERT((allLen + 4u) == Len,PRTCL_MODE,DARK_FAULT_CODE_FUN_ORDER_20, TSCP_DARK_ASSERT_1);
@@ -1573,7 +1619,8 @@ void SFM_TxInnetSafeRm(IN CM_UINT8 Buf[], IN CM_UINT32 Len)
/*- 是否获取成功 */
if (NULL != pCom)
{
if (g_Maintenance_Id == dstID)
ret = PFM_MaintenanceID_Search(dstID);
if (ret == ENUM_CM_TRUE)
{
/*- 远程部署维护终端设备 */
/*- 本机是否为CPU1 */
@@ -1624,6 +1671,7 @@ void SFM_TxInnetSafeRemoteUpdate(IN CM_UINT8 Buf[], IN CM_UINT32 Len)
CM_UINT16 msgLen = 0u; /* 外网输出帧长度 */
CM_UINT16 dstID = 0u; /* 目的设备ID */
STRU_PFM_INNET_CFG_T* pCom = NULL;/* 通信配置 */
ENUM_CM_RETURN ret = ENUM_CM_FALSE;
if ((allLen + 4u) == Len)
{
@@ -1658,7 +1706,8 @@ void SFM_TxInnetSafeRemoteUpdate(IN CM_UINT8 Buf[], IN CM_UINT32 Len)
/*- 是否获取成功 */
if (NULL != pCom)
{
if (g_Maintenance_Id == dstID)
ret = PFM_MaintenanceID_Search(dstID);
if (ret == ENUM_CM_TRUE)
{
/*- 远程部署维护终端设备 */
/*- 本机是否为CPU1 */
@@ -1989,7 +2038,7 @@ void SFM_PrtclBufSwitch(void)
}
/*- 是否开启远程部署内网安全通信 */
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
/*- 读取远程部署内网发送缓冲 */
len = CM_QueueStatus(&s_Innet_RmSendQ);
@@ -2173,7 +2222,7 @@ void SFM_UnPrtclProc_Crash(void)
{
CM_UINT8 ret = 0;
/*- @alias 内网安全通信协议解析 */
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
g_PFM_Check = PFM_CFC_PROC_NUM + 6;
CM_UINT32 QueuelenA = QueueStatus(&s_InnetPrtcl_RM.OutnetQueueA);
@@ -2215,7 +2264,7 @@ void SFM_EnPrtclProc_Crash(void)
SFM_AppToPrtclBuf_InnetSafeCrash();
/*- 内网安全协议封装 */
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
MSCP_LOG_MSG("SFM_EnPrtclProc_Crash Queuelen1 = %d\n",QueueStatus(&s_InnetPrtcl_RM.OutputDataQueue));
CM_LongToChar(0u, s_InnetPrtcl_RM.PrtclSndBuff);
@@ -2254,7 +2303,7 @@ void SFM_PrtclBufToApp_InnetSafeCrash(void)
ENUM_CM_RETURN ret = ENUM_CM_FALSE;
CM_UINT8 rslt = 0u;
/*- 是否开启内网安全通信 */
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_RMUP_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
/*- 清空应用内网接收缓冲区 */
(void)CM_QueueClear(&s_Innet_RmRecvQ);
@@ -2292,7 +2341,7 @@ void SFM_AppToPrtclBuf_InnetSafeCrash(void)
CM_UINT8 rslt = 0u;
CM_UINT32 Queuelen = 0u;
/*- 是否开启内网安全通信 */
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0x00u != g_Maintenance_Id))
if ((0x55u == g_PFM_Cfg.M_RemoteUpdate_Enable) &&(0u < g_Maintenance_Ids[0]))
{
/*- 读取应用内网发送缓冲 */
len = CM_QueueStatus(&s_Innet_RmSendQ);
+1 -1
View File
@@ -171,7 +171,7 @@ extern "C"
/* 发送内网远程部署安全通信数据 */
void SFM_TxInnetSafeRemoteUpdate(IN CM_UINT8 Buf[], IN CM_UINT32 Len);
CM_UINT8 Prtcl_InnetSafe_AppRmSend(IN const CM_UINT8* txBuf, IN CM_UINT32 txLen);
CM_UINT8 Prtcl_InnetSafe_AppRmSend(IN CM_UINT16 dstName, IN const CM_UINT8* txBuf, IN CM_UINT32 txLen);
CM_UINT32 Prtcl_InnetSafe_RmRecv(OUT CM_UINT16* pSrcName, OUT CM_UINT8* pLifeTime, OUT CM_UINT8* rxBuf, IN CM_UINT32 rxSize);
@@ -1760,7 +1760,7 @@ static UINT8 ROUTE_STRU_init_FAO(UINT8 * pDataAdd, DSU_ROUTE_STRU * pRouteStru)
}
/*进路性质*/
pRouteStru->wRouteType = ShortFromChar(pData);
pRouteStru->dwRouteType = ShortFromChar(pData);
pData += 2;
/*起始信号机编号*/
@@ -1902,7 +1902,7 @@ static UINT8 ROUTE_STRU_init_HLT(UINT8 * pDataAdd, DSU_ROUTE_STRU * pRouteStru)
}
/*进路性质*/
pRouteStru->wRouteType = ShortFromChar(pData);
pRouteStru->dwRouteType = ShortFromChar(pData);
pData += 2U;
/*起始信号机编号*/
@@ -2148,7 +2148,7 @@ static UINT8 ROUTE_STRU_init_CPK(UINT8 * pDataAdd, DSU_ROUTE_STRU * pRouteStru)
}
/*进路性质*/
pRouteStru->wRouteType = ShortFromChar(pData);
pRouteStru->dwRouteType = ShortFromChar(pData);
pData += 2;
/*起始信号机编号*/
@@ -2273,6 +2273,9 @@ static UINT8 ROUTE_STRU_init_CC(UINT8 * pDataAdd, DSU_ROUTE_STRU * pRouteStru)
static UINT16 maxCBTCAccessLinkNum = MAX_CBTC_ACCESS_LINK_NUM;/*进路包含的实际CBTC接近区段最大数量*/
static UINT16 maxBLOCAccessLinkNum = MAX_BLOC_ACCESS_LINK_NUM;/*进路包含的实际点式接近区段最大数量*/
UINT8 reval = 0U;/*初始赋值为失败*/
UINT8 chDataType = 0U;
chDataType = GetLocalPublicDataType(); /*区分分支,与主线*/
/*输入参数空指针防护*/
if ((NULL != pDataAdd) && (NULL != pRouteStru))
{
@@ -2287,8 +2290,17 @@ static UINT8 ROUTE_STRU_init_CC(UINT8 * pDataAdd, DSU_ROUTE_STRU * pRouteStru)
}
/*进路性质*/
pRouteStru->wRouteType = ShortFromChar(pData);
pData += 2U;
if (0x01 == chDataType)
{
/*主线扩大字段*/
pRouteStru->dwRouteType = LongFromChar(pData);
pData += 4U;
}
else
{
pRouteStru->dwRouteType = ShortFromChar(pData);
pData += 2U;
}
/*起始信号机编号*/
pRouteStru->wStartSignalId = ShortFromChar(pData);
@@ -502,7 +502,7 @@ typedef struct DSU_RouteStruct
{
UINT16 wId; /*编号*/
CHAR szCaption [24]; /*进路名称*/
UINT16 wRouteType; /*进路性质*/
UINT32 dwRouteType; /*进路性质*/
UINT16 wStartSignalId; /*起始信号机编号*/
UINT16 wEndSignalId; /*终止信号机编号*/
UINT16 wOrgnLkId; /*起点所处link编号*/ /*新增---严广学*/
@@ -1,15 +1,15 @@
/********************************************************
*
* FsfbRecordDelare.h
*
* 1.0
* 2013.09.09
*
* FSFB协议记录相关宏定义
* 使
* ļFsfbRecordDelare.hare.h
* Ȩ˵ ؿƼ޹˾
* 1.0
* ʱ 2013.09.09
*
* FSFBЭ¼غ
* ʹע
*
*
* 2010.05.10 FSFB新周期开始标识
* ޸ļ¼
* 2010.05.10 ޸ ׷FSFBڿʼʶ
*
********************************************************/
@@ -19,93 +19,93 @@
/********************************************************************************
********************************************************************************/
/* 各个标志位 */
#define FSFB_CYCLE_TAG (0xF4FB) /* FSFB新周期开始标识 */
#define IN_RED (0x01) /*输入红网处理*/
#define IN_BLUE (0x02) /*输入蓝网处理*/
#define IN_FRAME_LEN_ERR (0x03) /*输入数据帧长度错误*/
#define IN_READ_FRAME_ERR (0x04) /*读取数据帧长度错误*/
#define IN_READ_FRAME (0x05) /*读取数据帧*/
#define IN_CRC_ERR (0x06) /*CRC错误*/
#define IN_NO_LNK (0x07) /*无链路*/
#define IN_CAT_ERR (0x08) /*输入帧种类错误*/
#define IN_ADDR_ERR (0x09) /*输入帧种类错误*/
#define IN_SSR_STATUS_ERR (0x0A) /*输入SSR收状态错误*/
#define IN_SSR_SSE_TC_ERR (0x0B) /*输入SSRSSE序号错误*/
#define IN_ABT_STATUS (0x0C) /*输入ABT收状态*/
#define IN_ABT_SVC_ERR (0x0D) /*输入ABTSVC错误*/
#define IN_ABT_OLD_ERR (0x0E) /*输入ABT旧序号错误*/
#define IN_ABT_SSE_BTC (0x0F) /*输入ABTSSEBTC*/
#define IN_BTD_LEN_ERR (0x10) /*输入BTD的长度错误*/
#define IN_BTD_STATUS (0x11) /*输入BTD收状态*/
#define IN_BTD_LOST_ERR (0x12) /*输入BTD丢失超容忍*/
#define IN_BTD_DELAY_ERR (0x13) /*输入BTD延迟超容忍*/
#define IN_BTD_SVC_ERR (0x14) /*输入BTDSVC错误*/
#define OUT_APP (0x15) /*输出数据*/
#define OUT_FRAME_LEN_ERR (0x16) /*输出应用帧数据长度错误*/
#define OUT_READ_ERR (0x17) /*输出读应用数据错误*/
#define OUT_APP_FRAME (0x18) /*输出应用帧数据*/
#define OUT_FRAME_TYPE_ERR (0x19) /*输出帧类型错误*/
#define OUT_ADDR_ERR (0x1A) /*输出地址错误*/
#define OUT_FIND_LNK_ERR (0x1B) /*输出查询链路错误*/
#define OUT_INSERT_NODE_ERR (0x1C) /*输出插入节点错误*/
#define OUT_INIT_NODE_ERR (0x1D) /*输出初始化节点错误*/
#define OUT_DATA_TYPE (0x1E) /*输出数据类型*/
#define OUT_LNK (0x1F) /*输出链路*/
#define OUT_RP_LNK (0x20) /*输出RP链路*/
#define OUT_ALL_LEN_ERR (0x21) /*输出数据总长度错误*/
/* ־λ */
#define FSFB_CYCLE_TAG (0xF4FB) /* FSFBڿʼʶ */
#define IN_RED (0x01) /**/
#define IN_BLUE (0x02) /**/
#define IN_FRAME_LEN_ERR (0x03) /*֡ȴ*/
#define IN_READ_FRAME_ERR (0x04) /*ȡ֡ȴ*/
#define IN_READ_FRAME (0x05) /*ȡ֡*/
#define IN_CRC_ERR (0x06) /*CRC*/
#define IN_NO_LNK (0x07) /*·*/
#define IN_CAT_ERR (0x08) /*֡*/
#define IN_ADDR_ERR (0x09) /*֡*/
#define IN_SSR_STATUS_ERR (0x0A) /*SSR״̬*/
#define IN_SSR_SSE_TC_ERR (0x0B) /*SSRSSEŴ*/
#define IN_ABT_STATUS (0x0C) /*ABT״̬*/
#define IN_ABT_SVC_ERR (0x0D) /*ABTSVC*/
#define IN_ABT_OLD_ERR (0x0E) /*ABTŴ*/
#define IN_ABT_SSE_BTC (0x0F) /*ABTSSEBTC*/
#define IN_BTD_LEN_ERR (0x10) /*BTDijȴ*/
#define IN_BTD_STATUS (0x11) /*BTD״̬*/
#define IN_BTD_LOST_ERR (0x12) /*BTDʧ*/
#define IN_BTD_DELAY_ERR (0x13) /*BTDӳٳ*/
#define IN_BTD_SVC_ERR (0x14) /*BTDSVC*/
#define OUT_APP (0x15) /**/
#define OUT_FRAME_LEN_ERR (0x16) /*Ӧ֡ݳȴ*/
#define OUT_READ_ERR (0x17) /*Ӧݴ*/
#define OUT_APP_FRAME (0x18) /*Ӧ֡*/
#define OUT_FRAME_TYPE_ERR (0x19) /*֡ʹ*/
#define OUT_ADDR_ERR (0x1A) /*ַ*/
#define OUT_FIND_LNK_ERR (0x1B) /*ѯ·*/
#define OUT_INSERT_NODE_ERR (0x1C) /*ڵ*/
#define OUT_INIT_NODE_ERR (0x1D) /*ʼڵ*/
#define OUT_DATA_TYPE (0x1E) /**/
#define OUT_LNK (0x1F) /*·*/
#define OUT_RP_LNK (0x20) /*RP·*/
#define OUT_ALL_LEN_ERR (0x21) /*ܳȴ*/
#define FSFB_RCV_TAG 0xF4 /* FSFB输入单元标识 */
#define FSFB_OUT_TAG 0xF5 /* FSFB输出单元标识 */
#define FSFB_MSG_IN_TAG 0x04 /* FSFB输入一帧消息起始标识(B 0000 0100) */
#define FSFB_MSG_OUT_TAG 0x08 /* FSFB输出一帧消息起始标识(B 0000 1000) */
#define FSFB_NODE_OUT_TAG 0x0C /* FSFB输出一帧消息起始标识(B 0000 1100) */
#define FSFB_OUT_E_TAG 0x0F /* FSFB输出单元结束标识(B 0000 1111) */
#define FSFB_RCV_TAG 0xF4 /* FSFB뵥Ԫʶ */
#define FSFB_OUT_TAG 0xF5 /* FSFBԪʶ */
#define FSFB_MSG_IN_TAG 0x04 /* FSFBһ֡Ϣʼʶ(B 0000 0100) */
#define FSFB_MSG_OUT_TAG 0x08 /* FSFBһ֡Ϣʼʶ(B 0000 1000) */
#define FSFB_NODE_OUT_TAG 0x0C /* FSFBһ֡Ϣʼʶ(B 0000 1100) */
#define FSFB_OUT_E_TAG 0x0F /* FSFBԪʶ(B 0000 1111) */
/************************************************************************
* 16bit
* D15~D12
* D11~D10
* D9~D8
* D7~D44
*
* D3~D04
* ԭЭһ16bit
* D15~D12
* D11~D10ȼ
* D9~D8ģλ
* D7~D4ģеĴģͬʱ4λĺͬ
* ڶȵײ
* D3~D0ģǷͬ4λĺͬ
************************************************************************/
/* 错误等级 */
/* ȼ */
#define FSFB_ERR 0x0800
#define FSFB_WARN 0x0400
/* 模块位置 */
#define FSFB_RECEIVE 0x0200 /* 输入模块 */
#define FSFB_OUTPUT 0x0100 /* 输出模块 */
/* ģλ */
#define FSFB_RECEIVE 0x0200 /* ģ */
#define FSFB_OUTPUT 0x0100 /* ģ */
/* 各模块特有错误 */
/* ģд */
#define FSFB_ERROR_NULL 0x0000
/* 输入 */
#define FSFB_MSG_TYPE_ILLEGAL 0x0010 /* 不是FSFB消息 */
#define FSFB_MSG_OLD_ERR 0x0020 /* 非最新报文 */
#define FSFB_DEL_MSG_LNK_ERR 0x0030 /* 临时报文删除失败 */
#define FSFB_MSG_NOT_NODE_ERR 0x0040 /* 报文信息与通信节点信息不一致 */
#define FSFB_MSG_LEN_ERR 0x0050 /* 报文长度不正 */
#define FSFB_MSG_FMT_ILLEGAL 0x0060 /* 报文格式不对 */
#define FSFB_SSR_NOT_ILLEGAL 0x0070 /* 不是对应SSR报文信息 */
#define FSFB_MSG_REPLACE_ERR 0x0080 /* 覆盖节点失败 */
#define FSFB_MSG_NO_REPLACENODE 0x0090 /* 不存在覆盖节点 */
#define FSFB_MSG_NO_INVALID 0x00A0 /* BSD解码失败 */
/* */
#define FSFB_MSG_TYPE_ILLEGAL 0x0010 /* FSFBϢ */
#define FSFB_MSG_OLD_ERR 0x0020 /* ± */
#define FSFB_DEL_MSG_LNK_ERR 0x0030 /* ʱɾʧ */
#define FSFB_MSG_NOT_NODE_ERR 0x0040 /* ϢͨŽڵϢһ */
#define FSFB_MSG_LEN_ERR 0x0050 /* ijȲ */
#define FSFB_MSG_FMT_ILLEGAL 0x0060 /* ĸʽ */
#define FSFB_SSR_NOT_ILLEGAL 0x0070 /* ǶӦSSRϢ */
#define FSFB_MSG_REPLACE_ERR 0x0080 /* ǽڵʧ */
#define FSFB_MSG_NO_REPLACENODE 0x0090 /* ڸǽڵ */
#define FSFB_MSG_NO_INVALID 0x00A0 /* BSDʧ */
#define FSFB_MSG_CRC_ERR 0x00B0
/* 输出 */
#define FSFB_DBGET_ERR 0x0050 /* 数据库查询错误 */
/* 函数出错处理,底层处理错误 */
#define FSFB_QUEUE_READ 0x0001 /* 队列读有错 */
#define FSFB_QUEUE_WRITE 0x0002 /* 队列写有错 */
#define FSFB_QUEUE_INTEGRITY 0x0003 /* 队列中数据不完整(包括scan有错,应用给出错误)*/
#define FSFB_LNK_PUSH 0x0004 /* 链路管理表节点压栈错误 */
#define FSFB_LNK_POP 0x0005 /* 序列号缓存链表节点出栈错误 */
/* */
#define FSFB_DBGET_ERR 0x0050 /* ݿѯ */
/* ײ㴦 */
#define FSFB_QUEUE_READ 0x0001 /* жд */
#define FSFB_QUEUE_WRITE 0x0002 /* дд */
#define FSFB_QUEUE_INTEGRITY 0x0003 /* ݲscanдӦø*/
#define FSFB_LNK_PUSH 0x0004 /* ·ڵѹջ */
#define FSFB_LNK_POP 0x0005 /* кŻڵջ */
@@ -21,6 +21,7 @@
#define PRTCL_RECORD_SIMPLIFY_BIN /*二进制记录开关*/
#define USE_DSU_SFP /*使用SFP查询函数*/
#define SWAP_CRC /*½»»»CRC*/
#else
#endif
Binary file not shown.
Binary file not shown.
Binary file not shown.